#define F_CPU 3686400L #include #include #include #include #include #include "lcd-routines.h" #define Bus_Port PORTC #define Bus_DDR DDRC #define Bus_Pin PINC #define Pin_Nr PC0 #define Bus_Eingang() Bus_DDR &= ~(1<800 ms warten // 2.Befehlszyklus: Messwerte (Scratch Pad) auslesen // Start mit Master-Reset-Impuls u. Abfrage: Slave presence Bus_Reset(); // Skip ROM-Befehl, da nur ein DS1820 angeschlossen ist Byte_Schreiben(0xCC); Byte_Schreiben(0xBE); // Auslesen des Scratch Pads vom DS1820 // 9 Byte großen Scratch Pad-Inhalt einlesen for (i = 0; i < 9; i++) { Sensordaten[i] = Byte_Lesen(); } // Temperatur berechnen, als float-Wert if (Sensordaten[1] == 0) { // Positive Temp.-Werte Temperatur = Sensordaten[0]/2.0; } else { // Neg. Temp.-Werte Temperatur = (~Sensordaten[0])+1; // 2er-Komplement Temperatur = Temperatur/-2.0; } return Temperatur; } int main (void) { char Buffer[20]; float Temperatur; int vorkomma; int nachkomma; lcd_init(); while (1) { Temperatur = Temperatur_Messung(); lcd_setcursor(0,1); lcd_string("Temperatur:"); lcd_setcursor( 0,2 ); if ( signbit(Temperatur) ) { Temperatur = fabs(Temperatur); lcd_string( "-" ); } vorkomma = (int) Temperatur; itoa( vorkomma, Buffer, 10 ); lcd_string( Buffer ); lcd_string( "." ); nachkomma = (int)((Temperatur - vorkomma) * 10); itoa( nachkomma, Buffer, 10 ); lcd_string( Buffer ); _delay_ms(300); } }