// Festlegung der Quarzfrequenz #ifndef F_CPU // optional definieren #define F_CPU 18432000UL // MEXLEclock mit 18,432 MHz Quarz #endif // Deklarationen // ============================================================================ #include // Header-Dateien zum ATmega88 #include // Header-Datei fuer Bit-Berechnung #include // Header-Datei fuer Interrupts #include // Header-Datei fuer Wartezeit #include "lcd_lib_de.h" // Header-Datei fuer LCD-Anzeige #include // Konstanten #define ASC_NULL 0x30 // Das Zeichen '0' in ASCII #define ASC_FULL_STOP 0x2E // Das Zeichen ':' in ASCII #define VORTEILER_WERT 90 #define HUNDERTSTEL_WERT 10 #define ZEHNTEL_WERT 10 // Variable unsigned char vorteiler = VORTEILER_WERT; // Zaehlvariable Vorteiler unsigned char hundertstel = HUNDERTSTEL_WERT; unsigned char zehntel = ZEHNTEL_WERT; unsigned int adcValue = 0; // Variable fuer den AD-Wandlungswert unsigned int switchnr = 0; int LuxValue = 0; //unsigned int index = 0; bool takt10ms; // Bit-Botschaft alle 10 ms bool takt100ms; // Bit-Botschaft alle 100 ms bool takt1s; // Bit-Botschaft alle 1s bool sw1 = 0; // Bitspeicher fuer Taste 1 bool sw2 = 0; // Bitspeicher fuer Taste 2 bool sw3 = 0; // Bitspeicher fuer Taste 3 bool sw4 = 0; // Bitspeicher fuer Taste 4 //Funktionsprototypen void initTimer0 (void); void initAdc (void); void initDisplay (void); void initSwitch (void); void doAdc (void); void calculateLux (void); void Anzeige(void); void readButtons(void); // Einlesen der Tastenwerte //void refreshDisplay (void); //void refreshDisplayTemp(int tempValue, char line, char pos); // Hauptprogrammschleife __________________________________________________ int main () { initDisplay(); // Initialisierung LCD-Anzeige initAdc(); // Initialisierung des AD-Wandlers initTimer0(); // Initialisierung von Timer0 initSwitch(); // Initialisierung des Taster sei(); // generell Interrupts einschalten while(1) // unendliche Warteschleife mit Aufruf der { if(takt100ms) // Durchfuehrung der Funktion einmal pro 100ms { takt100ms = 0; // Taktbotschaft zuruecksetzen doAdc(); // Ausfuehrung des Modules der A/D-Wandlung calculateLux(); // Ausfuehrung des Modules der Umrechnung readButtons(); } if(takt1s) // Durchfuehrung der Anzeige einmal pro 1s { takt1s = 0; // Taktbotschaft zuruecksetzen Anzeige(); // Ausfuehrung des Modules der Anzeige } } } // Timer Initialisierung ============================================================== // // Initialisierung des Timer0 zur Erzeugung eines getakteten Interrupts. // Er dient dazu, die benoetigten Taktbotschaften zu erzeugen. void initTimer0() { TCCR0A |= (0< interner Takt = 96 kHz // Abfrage des ADC0 (NTC-Spannungsteiler) // Referenzspannung = analoge Versorgung Avcc void initAdc() { ADMUX |= (1<