/* Test tc74 + i2C * /* Auteur : Arlotto Date : 05/10/03 Création * ***************************************************************/ #include __CONFIG(0X3539); #include "biosdem.h" #define TC74_WRITE 0x9A // Adresse i2c par défaut #define TC74_READ (TC74_WRITE|1) #define TC74_RTR 0 //Commande Read Temperature void i2c_init(void); signed char tc74_read(void); void main (void){ signed char temp ; lcd_init(); lcd_clear(); i2c_init(); for ( ; ; ) { if (!RB0) { temp = tc74_read(); lcd_goto(LCD_LINE_ONE+0); lcd_printf("%d",temp); } } } void i2c_init(void) { char x ; TRISC3 = 1 ; //SDA et SCL en entrée TRISC4 = 1 ; SSPSTAT = 0x80 ; // Pas de controle de slew rate, niveaux i2c SSPCON = 0x28 ; // enable i2c 7bits master mode SSPADD = 9 ; // fclock = 100khz = Fosc/(4(SSPADD+1) x = SSPBUF ; // vide le buffer et raz flags } signed char tc74_read(void) { signed char temp ; SEN = 1 ; // envoie START et attend la fin while(SEN); //ACKDT = 0 ; SSPIF = 0 ; // envoie adresse et R/W=0 SSPBUF = TC74_WRITE ; while(!SSPIF); SSPIF = 0 ; // envoie commande de lecture SSPBUF = TC74_RTR ; while(!SSPIF); RSEN = 1 ; // envoie Repeated START while(RSEN); SSPIF = 0 ; // envoie adresse et R/W = 1 SSPBUF = TC74_READ ; while(!SSPIF); SSPIF = 0 ; RCEN = 1; // passe en lecture while(!STAT_BF); // et attend la réception des 8 bits temp = SSPBUF ; // lecture de la valeur reçue ACKEN = 1 ; // Envoie un ack while(ACKEN); // et attend la fin return temp ; }