-
        
+ Antworten
Ergebnis 1 bis 3 von 3

Thema: Genauigkeit ATMEGA16 mit 16MHz Quartz

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    13.12.2004
    Alter
    30
    Beiträge
    36

    Genauigkeit ATMEGA16 mit 16MHz Quartz

    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)?

    Code:
    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
    P.S.: Ich benutze ein 16MHz Quartz

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    29.09.2004
    Beiträge
    135
    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.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    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)?
    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.

    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.

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •