//---------------------------------------------------------------------------------------------------------------------- // Titel : // Prozessor : ATmega2561 mit 16 MHz // Funktion : Ausgabe der Eingangsspannung und visuelle Darstellung der Schaltzustände, an den Port A0 und Port A1, // durch LED-Anzeigen auf dem Display // Schaltung : ISP Programmieradapter an PC oder Laptop und an die ISP Schnittstelle auf dem Mikrocontroller // anschließen // Sprache : C // Datum : 28.11.07 // Version : 2.0 // Autor : Sven Zöllner //---------------------------------------------------------------------------------------------------------------------- #include #include #include #include #include #include //---------------------------------------------------------------------------------------------------------------------- #define LCD_DDR DDRB // Prototypen void init (void); void delay_ms(unsigned int period); #include #include #include //---------------------------------------------------------------------------------------------------------------------- int main() { int adclow; int adchigh; char l_wert[1] = " "; char h_wert[1] = " "; char t_wert[20]; // Display initialisieren ANFANG------------------------------------------------------------------------------- LCD_Init(); delay_ms(100); LCD_Cls(white); Orientation = Portrait180; LCD_Rect (5, 5, 126, 80, 1, black); LCD_Print ("Eingangsspannung:",8,8,1,1,2,blue ,white); LCD_Print ("Port A0",20,98,1,1,1,black,white); LCD_Print ("Port A1",20,112,1,1,1,black,white); LCD_Circle (12,100,5,0,0,black); // LED-Anzeige 1 einfacher Rahmen LCD_Circle (12,100,4,1,1,red); // LED-Anzeige 1 AUS LCD_Circle (12,115,5,0,0,black); // LED-Anzeige 2 einfacher Rahmen LCD_Circle (12,115,4,1,1,red); // LED-Anzeige 2 AUS // Display initialisieren ENDE-------------------------------------------------------------------------------------- do { // AD-Wandler einlesen ANFANG--------------------------------------------------------------------------------- init (); while (1) { wdt_reset (); if (ACSR&0x20) { PORTA = 0x01; LCD_Circle (12,100,4,1,1,green); ADMUX= 2; ADCSRA = (1< 1) strcpy (l_wert,"1"); if(adchigh < 1) strcpy (h_wert,"0"); if(adchigh > 1) strcpy (h_wert,"1"); //LCD_Print (" ",10,28,1,1,2,black ,white); LCD_Print (l_wert,15,28,1,1,2,black ,white); LCD_Print (h_wert,20,28,1,1,2,black ,white); LCD_Print (" V ",30,28,1,1,2,black ,white); } else { PORTA = 0x00; LCD_Circle (12,100,4,1,1,red); LCD_Print ("unter 25V",10,28,1,1,2,black ,white); } } } while(1); return 0; // AD-Wandler einlesen ENDE------------------------------------------------------------------------------------------- } void delay_ms(uint16_t period) { for(unsigned int i=0; i<=period; i++) _delay_ms(1); } void init (void) { DDRA = 0x0F; // PORT A = Ausgang }