Hallo, ich will eine binäre Uhr mit einem Atmega8 verwirklichen. Anbei ist mein Codeauszug. Auf meinem STK500 zählen die Sekunden aber schon viel zu langsam, ich finde aber den Fehler nicht. Kann von euch jemand den Fehler entdecken? Gruß osmaniak #include <avr/io.h> #include <avr/interrupt.h> #include "externe_Variablen.h" volatile uint8_t sekunden; int main(void) { cli(); DDRC=0xFF; DDRD=0xFF; DDRB=0x03; //Timer initialisieren: TCCR1A = 0x00; TCCR1B|= (1<<CS00)|(1<<CS02); //Prescaler 1024, CTC-Mode OCR1A = 512; //Vergleiswert setzten TIMSK = (1<<OCIE1A); //OC-Interrupt aktivieren sekunden=0; unsigned minuten=0; unsigned stunden=0; sei(); //Polling-Loop: while(1) { PORTC = 0xFF-sekunden; if (sekunden==60) { sekunden=0; minuten++; //PORTD = minuten; if(minuten==60) { minuten=0; stunden++; //PORTC= 0xFFFF - stunden; if(stunden==24) { stunden=0; } } } } return 0; } ISR(TIMER1_COMPA_vect) { sekunden++; TIFR |= (1 << OCF1A); }
Es fehlen essentielle Informationen. Wie ist der Controller getaktet, und um wie viel sind die Sekunden zu langsam? Vom Code her würde ich eigentlich erwarten, dass es viel zu schnell läuft, außer der Controller ist ungewöhnlich langsam getaktet.
Ich takte mit 4 MHz. OCR1A = 512; habe ich nun auf 4096 gesetzt. Trotzdem läuft es noch so ziemlich gleich schnell. Ich vermute ein Problem mit der ISR? Laut meiner Berechnung: 4194304/(4096*1024)=1s auf genau eine Sekunde kommen.
osmaniak schrieb: > Ich takte mit 4 MHz. > ... > 4194304/(4096*1024)=1s Was denn nun, 4 oder 4,194304 MHz? osmaniak schrieb: > Trotzdem läuft es noch so ziemlich gleich schnell. Richtig, da du den Timer im Normal-Mode laufen lässt, ist die Zeit zwischen zwei Compare-Events ja auch immer gleich groß. Was du eigentlich haben willst, ist der CTC-Mode.
Das Quartz taktet mit 4,194MHz. Ok und wie komme ich in den CTC-Mode?
osmaniak schrieb: > Ok und wie komme ich in den CTC-Mode? Indem du im Datenblatt nachschaust, welche Bits du wo setzen musst.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.