-         

Ergebnis 1 bis 8 von 8

Thema: Atmega: Sekunden in Takt umrechnen

  1. #1
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1

    Atmega: Sekunden in Takt umrechnen

    Anzeige

    Hallo zusammen,

    ich bin da erneut auf ein kleines Problem gestoßen. Vielleicht kann mir einer Erleutung bringen.
    Zu meinem Problem:
    Ich versuche mit einem Timer genaue Sekunden zu zählen (z.B. für eine einfache Uhr).
    Wenn ich also einen Takt von 1Mhz habe, sollte es nach meinem Verständnis um 1 000 000 Takte die Sekunde handeln.
    Wenn ich nun den Timer0 nehme und den Timercounter auf 56 setze, zählt der Timer von 56-256, was 200 Takte entspricht.
    Also nach Adamriese:
    1000000 : 200 = 5000
    Wenn ich einen Timer0-Overflow-Interrupt einschalte, führt das zu 5000 Interrupts die Sekunde.
    => allerdings entspricht die Rechnung keine Sekunde!!!
    Was habe ich hier nicht richtig verstanden???

    Danke für eure Hilfe

  2. #2
    Erfahrener Benutzer Begeisterter Techniker Avatar von Bernd_Stein
    Registriert seit
    19.09.2008
    Ort
    Deutschland : Nordrhein-Westfalen ( NRW )
    Alter
    46
    Beiträge
    362
    Hallo,

    soweit für mich alles richtig. Zeig doch mal dein Programm. Und schreib doch mal wieso das nicht stimmen soll.
    Wenn das Programm allerdings nicht in Assembler ist, kann ich nicht weiter helfen.

    Bernd_Stein
    CRS Robotics A255

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Wenn ich nun den Timer0 nehme und den Timercounter auf 56 setze...
    ..., dann unterschlage ich die durch den Aufruf der ISR und das Setzen des TCNT0-Register verlorenen Takte:

    SIGNAL (SIG_OVERFLOW0)
    {
    TCNT0 += 56+3; // +drei Takte für das Lesen und erneute Setzen von TCNT0 berücksichtigen.
    ...

    Nach dem Überlauf wird TCNT0 weitergezählt. In der ISR werden der aktuelle Zählerstand und die Registerladetakte berücksichtigt.

    Plan B: Timer läuft im CTC-Mode mit 200 als OCR0...
    Geändert von radbruch (02.01.2012 um 18:42 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  4. #4
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    27
    Beiträge
    3.517
    Blog-Einträge
    9
    Welchen Mega benutzt du den? Wenn du einen Mega32 benutzt kannst du mit dem Timer1 (16-Bit Timer) 1 Sekunde generieren.
    Ansonsten nimm ein 32kHz Quarz damit kannst du besser 1 Sekunde realisieren als mit 1MHz
    Schaut ruhig mal auf meiner Homepage vorbei :
    http://kampis-elektroecke.de

    Oder folge mir auf Google+:
    Daniel Kampert

    Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.

    Gruß
    Daniel

  5. #5
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    Ich benutze den Atmega8 und hier ist der code. Den Printbefehl habe ich nur zur Kontrolle eingefügt.

    Code:
    $regfile = "m8def.dat"
    $crystal = 1000000
    $baud = 57600
    
    Tccr0 = &B00000001
    Timsk.toie0 = 1
    
    Ddrb = &B00000001
    
    On Timer0 Zaehler
    
       Dim Count As Word
       Dim Sekunde As Byte
       Dim Minute As Byte
       Dim Stunde As Byte
    
       Count = 0
       Sekunde = 0
       Minute = 0
       Stunde = 0
    
    Tcnt0 = 55
    
    Sreg.7 = 1
    
    Do
    
       If Count = 5000 Then
             Sekunde = Sekunde + 1
             Count = 0
             Portb.0 = Not Portb.0
    
           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
             End If
        End If
    
       'Print Stunde ; ":" ; Minute ; ":" ; Sekunde
    Loop
    
    Zaehler:
    
       Count = Count + 1
       Tcnt0 = 55
    
    Return
    Danke für die schnellen Antworten...
    Geändert von radbruch (02.01.2012 um 20:13 Uhr)

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Lass mich raten: Deine Uhr läuft zu langsam.

    Hier ein Beispiel für die Frequenzkorrektur in der Overflow-ISR mit 36kHz und Timer2:
    http://www.roboternetz.de/community/...l=1#post444004
    http://www.roboternetz.de/community/...l=1#post444260
    Geändert von radbruch (02.01.2012 um 20:26 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #7
    Benutzer Stammmitglied Avatar von Wombatz
    Registriert seit
    10.06.2011
    Beiträge
    70
    Blog-Einträge
    1
    ja die Uhr läuft zu langsam.

    Verstehe ich das richtig??? Durch den Aufruf der ISR verstreichen Takte die man mit += ausgleichen kann??

    Danke für deine Antwort...bist echt super!!!

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.781
    Blog-Einträge
    8
    Jepp, wenn die ISR aufgerufen wird verstreichen einige Zähltakte. Und zwar nicht nur durch das Ermitteln der Sprungadresse, speichern der Rücksprungadresse auf dem Stack und dem Sprung und Rücksprung zur ISR sondern auch durch das Speichern und Zurückladen der wichtigsten Register. (Stichwort: nosave). Dadurch ist zu Beginn der ISR der Zähler schon deutlich größer als 0 und diese Zähltakte verlängern letztlich deine Sekunden...

    P.S.:
    Danke für deine Antwort...bist echt super!!!
    Danke für's Lob :)
    Geändert von radbruch (02.01.2012 um 21:00 Uhr)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. NE555 genau 3 Sekunden Takt
    Von Joe93 im Forum Elektronik
    Antworten: 12
    Letzter Beitrag: 11.01.2009, 15:45
  2. CLK Takt höher als Datenbus Takt (SDRAM)
    Von saoirse im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 25.08.2007, 18:12
  3. Genauen Sekunden Takt
    Von DeltaEx im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 22.01.2007, 17:31
  4. Timer1, 1 sekunden Takt, ungenau ?!
    Von Roberto im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 30.12.2005, 14:05
  5. Sekunden Anzahl in Minuten:Sekunden umrechnen
    Von Björn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 12.08.2005, 16:15

Berechtigungen

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