- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 8 von 8

Thema: Atmega: Sekunden in Takt umrechnen

Hybrid-Darstellung

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

    Atmega: Sekunden in Takt umrechnen

    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 Roboter-Spezialist Avatar von Bernd_Stein
    Registriert seit
    19.09.2008
    Ort
    Deutschland : Nordrhein-Westfalen ( NRW )
    Alter
    53
    Beiträge
    407
    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, TRONXY X3A, TinkerCAD, c´t-Lab, ProfiLab Expert, AVR8 Assembler

  3. #3
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    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 17:42 Uhr)
    Bild hier  
    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
    34
    Beiträge
    3.501
    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 19:13 Uhr)

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    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:
    https://www.roboternetz.de/community...l=1#post444004
    https://www.roboternetz.de/community...l=1#post444260
    Geändert von radbruch (02.01.2012 um 19:26 Uhr)
    Bild hier  
    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, 14:45
  2. CLK Takt höher als Datenbus Takt (SDRAM)
    Von saoirse im Forum Elektronik
    Antworten: 1
    Letzter Beitrag: 25.08.2007, 17:12
  3. Genauen Sekunden Takt
    Von DeltaEx im Forum Asuro
    Antworten: 2
    Letzter Beitrag: 22.01.2007, 16:31
  4. Timer1, 1 sekunden Takt, ungenau ?!
    Von Roberto im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 6
    Letzter Beitrag: 30.12.2005, 13:05
  5. Sekunden Anzahl in Minuten:Sekunden umrechnen
    Von Björn im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 12.08.2005, 15:15

Berechtigungen

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

LiFePO4 Speicher Test