mars01 Postat August 19, 2015 Partajează Postat August 19, 2015 (editat) |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ******************************************************************************** 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 August 19, 2015 de mars01 1 Link spre comentariu
mars01 Postat August 19, 2015 Autor Partajează Postat August 19, 2015 (editat) 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 August 19, 2015 de mars01 Link spre comentariu
mars01 Postat Decembrie 25, 2015 Autor Partajează Postat Decembrie 25, 2015 (editat) 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 Decembrie 25, 2015 de mars01 Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum