Liste der Anhänge anzeigen (Anzahl: 5)
Atmega 32 Uhr läuft zu schnell
Hallo liebe Forengemeinde. Ich frage mich nun schon seid einigen Tagen wie sich 2 Programmteile gegenseitig beeinflussen.
Fakt ist: Die Uhr läuft erst seit der Einbindung der uart.c, uart.h und der dazugehörigen functions in der Main etwas zu schnell. (In 30 min ca. 2 Min abweichung. [Uhr geht vor:confused:])
Jedoch verstehe ich leider nicht wodurch dies verursacht wird. :(
Chip läuft mit einem 8MHz Quarz und ist richtig gefused.
Jemand eine Idee? Bin für jeden noch so kleinen Tipp dankbar!
Liste der Anhänge anzeigen (Anzahl: 1)
HI ich habe mal ein bisschen herumprobiert und verwende nun den Comparemode.
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 */
}
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])
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...:confused: