HI ich habe mal ein bisschen herumprobiert und verwende nun den Comparemode.
Das Erfreuliche: Die Uhr Läuft nicht mehr zu schnell, dafür nun aber leider zu langsam. (Abweichung nach 5h laufzeit ca. 30 minuten. [Uhr geht zurück])Code:#ifndef OCR1A #define OCR1A OCR1 // 2313 support #endif #ifndef WGM12 #define WGM12 CTC1 // 2313 support #endif #define XTAL 8000000L // nominal value #define DEBOUNCE 256L // debounce clock (256Hz = 4msec) #define uchar unsigned char #define uint unsigned int uchar prescaler; TCCR1B = (1<<WGM12) | (1<<CS10); // divide by 1 // clear on compare TCNT1 = 0; // Timmer startet mit 0 prescaler = (uchar)DEBOUNCE; //software teiler TIMSK = 1<<OCIE1A; SIGNAL (SIG_OUTPUT_COMPARE1A) { /************************************************************************/ /* Insert Key Debouncing Here */ /************************************************************************/ if( --prescaler == 0 ){ prescaler = (uchar) DEBOUNCE; ss++;//Addiere +1 zu Sekunden LED_burned++; ANALOG_ss++; if (ss == 60) { ss = 0; mm++;//Addiere +1 zu Minuten if (mm == 60) { mm = 0; hh++;//Addiere +1 zu Stunden if (hh == 24) { hh = 0; } } } } #if XTAL % DEBOUNCE if (prescaler <= XTAL % DEBOUNCE) OCR1A += XTAL / DEBOUNCE +1; /* um 1 Takt längere Periode um den Rest abzutragen */ else #endif OCR1A += XTAL / DEBOUNCE; /* kurze Periode */ }
Habe nun auch mal meine Fusesettings mitgepostet falls sich der Fehler vielleicht doch dort verbirgt.
Grundsetzlich ist es aber schon möglich den Timer1 comparemode für eine SoftwareClock (ohne große Abweichungen) zu verwenden und gleichzeitig eine lauffähiges UART Programm zur Kommunikation mit dem PC zu haben?
Weil großteils wird für den UART ja der Timer1 verwendet so wie ich das beurteilen kann...![]()
Lesezeichen