//---------------------------------------------------------------------------------- // Titre : Récuparation par i2c de la température et affichage sur LCD //---------------------------------------------------------------------------------- // Fonction : Affiche la température sur l'écran LCD // Configuration : Aucune //---------------------------------------------------------------------------------- // Processeur : ATmega8/48/88/168 // Fréquence : 3.6864 MHz // Langage : C // Date : 26.09.2008 // Version : 1.0 // Auteur : Devtronic SARL //---------------------------------------------------------------------------------- #include // Registres AVR and définition des constantes #include // Librairie contenant les fonctions d'attente #include // Librairie contenant les fonctions d'interruptions #include "myavr_lcd.h" // Librairie LCD #include "myavr_i2c_master.h" // Librairie LCD //---------------------------------------------------------------------------------- void afficher_temperature(char msb,char lsb); void afficher_temperature(char msb,char lsb) { double temperature; int multiplicateur; char unite[3] = {0x20,0xDF,0x43}; // espace - ° - C // Récupération et retrait du bit de signe if (msb & 0x80) // Température négative { multiplicateur = -1; } else { multiplicateur = 1; } msb = msb & 0x7F; // Calcul température temperature = (((msb << 1) + (lsb >> 7)) / 2) * multiplicateur; // Affichage MYAVRLCD_deplacerCurseur(2,1); MYAVRLCD_ecrireChaine(" ",16); MYAVRLCD_deplacerCurseur(2,1); MYAVRLCD_afficherDouble(temperature,1); MYAVRLCD_ecrireChaine(unite,3); } int main(void) { char msb,lsb; // Initialisation de l'écran LCD MYAVRLCD_initialisation(); MYAVRLCD_ecrireChaine("Temperature :",13); // Initialisation de l'I2C (Fréquence = 100 kHz à 20 MHz) MYAVRI2CMASTER_initialisation(96,0); while(1) { // Récupération de la température MYAVRI2CMASTER_debut_transaction(0x48,1); msb = MYAVRI2CMASTER_lecture_ack(); lsb = MYAVRI2CMASTER_lecture_nack(); MYAVRI2CMASTER_fin_transaction(); // Affichage de la température afficher_temperature(msb,lsb); // Rafraichissement toutes les 5s _delay_ms(1000); } return 0; } //--------------------------------------------------------------------------