Ich weiß nicht ob du den Prescaler richtig eingestellt hast d.h. ob der Interrupt wirklich nach jeder Sekunde ausgelöst wird. Man kann das ausrechnen wir groß der Prescaler sein müss bei 16Mhz für eine Sek. aber da bin ich überfragt.
Hi,
wie genau ist der Timer1 des ATMEGA16?
Ich habe mit Hilfe von rnAVR und zum Teil geklauten Code eine Uhr geschrieben. Diese Uhr lief die 1. Stunde vor und jetzt nach (je ca 20 Sek). Ist das normal oder mein Code so schlecht (bin Anfänger)?
P.S.: Ich benutze ein 16MHz QuartzCode:Cls Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5 Config Lcd = 16 * 2 Dim Sekunde As Byte Dim Minute As Byte Dim Stunde As Byte Config Timer1 = Timer , Prescale = 256 On Timer1 Timer_irq Const Timervorgabe = 3036 Enable Timer1 Enable Interrupts Stunde = 16 'Uhr stellen Minute = 27 Do 'Hier könnte Ihr Hauptprogramm stehen Loop 'Dies ist der Programmteil, der in dem von ihnen gewählten 'Intervall aufgerufen wird Timer_irq: 'Timer1 = Timervorgabe Sekunde = Sekunde + 1 If Sekunde = 60 Then Sekunde = 0 Minute = Minute + 1 If Minute = 60 Then Minute = 0 Stunde = Stunde + 1 If Stunde = 24 Then Stunde = 0 End If End If Cls Lcd Stunde ; ":" ; Minute ; ":" ; Sekunde Return
Ich weiß nicht ob du den Prescaler richtig eingestellt hast d.h. ob der Interrupt wirklich nach jeder Sekunde ausgelöst wird. Man kann das ausrechnen wir groß der Prescaler sein müss bei 16Mhz für eine Sek. aber da bin ich überfragt.
Wenn rnAVR dir für eine Frequenz von 1 Hz eine Timervorgabe von 3036 ausrechnet und du diese Timervorgabe im Programmcode auskommentierst, ist es eigentlich normal, dass deine Uhr falsch geht.Diese Uhr lief die 1. Stunde vor und jetzt nach (je ca 20 Sek). Ist das normal oder mein Code so schlecht (bin Anfänger)?
Ohne die Timervorgabe werden deine Sekunden ca. alle 950 ms anstatt einmal pro Sekunde hochgezählt.
Dass deine Uhr erst ca. 20 Sekunden vor und dann 20 Sekunden nach geht erklärt das allerdings auch nicht, theoretisch müsste sie konstant vorgehen.
Lesezeichen