Sari la conținut
ELFORUM - Forumul electronistilor

Librarii. Cod. Functii. Drivere. Exemple. Pentru PIC


Postări Recomandate

||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

********************************************************************************

 

Am creat acest topic pentru a avea un loc unitar unde sa putem posta cod sub forma de surse avand ca tinta microcontrollerele produse de Microchip.

Nu conteaza in ce compilator sau limbaj este realizat sau daca este eficient. Important este ca sursele postate sa fie functionale.

 

Se poate posta  cod creat de dvs dar si ce ati gasit pe Internet si ati testat ca fiind functional. Unde este cazul e bine sa oferim credit acelora care au creat acel program. Daca nu va aduceti aminte de unde este preluat atunci mentionati sursa ca fiind Internet si/sau modificat de dvs.

 

Postati surse nu numai fisiere .hex

 

Aici se posteaza codul si nu se comenteaza asupra lui.

 

Pentru comentarii folositi topicul companion: Librarii. Cod. Functii. Drivere. Exemple. Pentru PIC. Comentarii si Intrebari

 

Postati obligatoriu:

1. Nume cod/librarie. 

2. Compilator si limbaj de programare. Pentru ce familie de PIC este realizata.

3. Descriere sumara.

 

Nota: daca ati creat dvs libraria respectiva, includeti si un exemplu cat de bine comentat

 

********************************************************************************

|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

 

 

Incep eu.

 

1. Librarie driver pentru LCD HD44780

2. Librarie realizata in C folosind mikroC for PIC, am testat-o pe controllere seria 18F dar ar trebui sa mearga si pentru 16F.

3. In plus fata de libraria standard din mikroC aduce posibiltatea de a tipari pe LCD numere in format signed LONG, numere in format FLOAT, stringuri de caractere declarate ca si constante.

 

Exemplul de utilizare va fi continut in urmatoarea librarie pe care o voi posta curand (librarie driver pentru senzorul de umiditate si temperatura DHT22).

HD44780 LCD library v0.1.zip

Editat de mars01
Link spre comentariu

1. Librarie driver pentru senzorul de temperatura/umiditate DHT22

2. Librarie realizata in C folosind mikroC for PIC, am testat-o pe controllere seria 18F dar ar trebui sa mearga si pentru 16F.

3. Am creat cateva functii care sa citeasca senzorul.

O functie DHT_read() care returneaza o structura avand ca membri partile integrale si fractionale pentru temperatura si umiditate cat si un checksum.

O functie DHT_f_read() care returneaza o structura avand ca membri valorile reale (FLOAT) pentru temperatura si umiditate cat si checksum-ul. Si o functie care returneaza ca si cea precedenta valorile reale pentru temp si umiditate dar si indexul de caldura (cel dupa care sunt calculate codurile "colorate" dar formula utilizata este o formula mai moderata decat cea folosita curent in EU).

Am creat o functie separata care intoarce valorile FLOAT si una care intoarce valorile FLOAT dar si Heat Index-ul pentru ca ultima ocupa foarte mult spatiu in program, aproape 8KB (operatii cu valori FLOAT ...).

DHT22_mikroC_for_PIC library v0.1.zip

Editat de mars01
Link spre comentariu
  • 4 luni mai târziu...

1. Librarie driver periferic I2C in configuratie MASTER.

2. Librarie realizata in C cu compilatorul XC8 de la Microchip. Este facuta pentru un PIC16F1936/1938 dar poate fi folosita si pentru alte controllere seria 16F.

3. Preluata si adaptata (minimal) pentru compilatorul Microchip XC8 de aici: http://www.hobbytronics.co.uk/hi-tech-c-i2c-master

In attachment se gasesc fisierele cu libraria I2C cat si un exemplu, si acesta preluat de pe aceasi pagina.

// FOR PIC16F1938// Should work for any other 16F PIC's or 18F PIC's just be careful about the SCL and SDA pins TRIS register setting// Mind the CPU frequency. You should change the settings for SSPADD if you use other frequency than 16 MHz#include <xc.h> // include processor files - each processor file is guarded.  #define I2C_WRITE 0#define I2C_READ 1// Initialize MSSP port. _FOSC_FREQ = 16000000void i2c_Init(void){   // Initialize I2C MSSP   // Master 100KHz   TRISC3 = 1;              // set SCL and SDA pins as inputs   TRISC4 = 1;      //Bit 7 is 0 = No collision   //Bit 6 is 0 = No overflow   //Bit 5 is 1 = Enables the serial port and configures the SDA and SCL pins as the source of the serial port pins   //Bit 4 is 0 = SCL Release Control: Holds clock low (clock stretch). (Used to ensure data setup time.)   //Bit 3-0    = SSP mode select bits: 1000 = I2C Master mode, clock = FOSC / (4 * (SSPADD+1))   SSPCON1 = 0b00101000; 	// I2C enabled, Master mode   SSPCON2 = 0x00;      // I2C Master mode, clock = FOSC/(4 * (SSPADD + 1))    SSPADD = 39;    		// 100Khz @ 16Mhz Fosc      //Bit 7 is 1 = Slew rate control disabled for standard speed mode (100 kHz and 1 MHz)   //Bit 6 is 1 = Enable input logic so that thresholds are compliant with SM bus specification   //Bit 5 is 0 = Indicates that the last byte received or transmitted was address   //Bit 4 is 0 = Stop bit was not detected last   //Bit 3 is 0 = Start bit was not detected last   //BIt 2 is 0 = Transmit is not in progress / OR-ing this bit with SEN, RSEN, PEN, RCEN or ACKEN will indicate if the MSSP is in Idle mode   //Bit 1 is 0 = Address does not need to be updated   //Bit 0 is 0 = if RECEIVE: 0 = Receive not complete, SSPBUF is empty / if TRANSMIT: 0 = Data transmit complete (does not include the ACK and Stop bits), SSPBUF is empty   SSPSTAT = 0b11000000;}// i2c_Wait - wait for I2C transfer to finishvoid i2c_Wait(void){    while ( ( SSPCON2 & 0x1F ) || ( SSPSTAT & 0x04 ) );}// i2c_Start - Start I2C communicationvoid i2c_Start(void){    i2c_Wait();    SEN=1;}// i2c_Restart - Re-Start I2C communicationvoid i2c_Restart(void){    i2c_Wait();    RSEN=1;}// i2c_Stop - Stop I2C communicationvoid i2c_Stop(void){    i2c_Wait();    PEN=1;}// i2c_Write - Sends one byte of datavoid i2c_Write(unsigned char data){    i2c_Wait();    SSPBUF = data;}// i2c_Address - Sends Slave Address and Read/Write mode// mode is either I2C_WRITE or I2C_READvoid i2c_Address(unsigned char address, unsigned char mode){    unsigned char l_address;    l_address=address<<1;    l_address+=mode;    i2c_Wait();    SSPBUF = l_address;}// i2c_Read - Reads a byte from Slave deviceunsigned char i2c_Read(unsigned char ack){    // Read data from slave    // ack should be 1 if there is going to be more data read    // ack should be 0 if this is the last byte of data read    unsigned char i2cReadData;    i2c_Wait();    RCEN=1;    i2c_Wait();    i2cReadData = SSPBUF;    i2c_Wait();    if ( ack ) ACKDT=0;	        // Ack    else       ACKDT=1;	        // NAck    ACKEN=1;                    // send acknowledge sequence    return( i2cReadData );}

librarie_i2c.zip

Editat de mars01
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări