-         

Ergebnis 1 bis 4 von 4

Thema: Zeitmessung via 16bit timer

  1. #1
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    22
    Beiträge
    661

    Zeitmessung via 16bit timer

    Anzeige

    Liebes Forum ich will für meinen Pro-Bot eien Stopwatch wie beim Rp6
    programmieren, leider komme ich nicht sehr voran nicht das einfachste programm um Sekunden zu messen Funktioniert.hier mal das Programm es soll erst mal nur mit einer Stopwacht arbeiten. beim Terminal kommt immer nur null raus. Kann mir da jemand helfen ?



    Code:
    $regfile = "m128def.dat"
    $framesize = 42
    $swstack = 32
    $hwstack = 32
    $crystal = 14745600
    $baud = 19200
    
    Dim Sw1ys As Long
    Dim Sw1ms As Long
    Dim Sw1s As Word
    Dim Sw1m As Byte
    
    Config Timer3 = Timer , Prescale = 8
    Timer3 = 63693
    On Ovf3 On_ovf3
    Enable Ovf3
    Enable Interrupts
    
    Sw1ms = Sw1ys / 10
    Sw1s = Sw1ms / 100
    Sw1m = Sw1s / 60
    
    
    
    
    
    Do
    
    
    Print Sw1s
    
    
    Loop
    
    End
    
    On_ovf3:
     Sw1ys = Sw1ys + 1
    Return
    MfG Martinius

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    Moin Martinius,

    also ich sehe da auf den ersten Blick zwei Fehler:

    Erstens musst Du den Befehl Timer3 = 63693 auch in der Timer3-ISR ausführen lassen. Sonst läuft Dir der Timer nur beim ersten mal nach 1 ms über, und ab dann alle ca. 35 ms, weil er nach dem Overflow bei 0 anfängt zu zählen.

    Zweitens lässt Du die Variable Sw1s zwar permanent in der Do-Loop-Schleife ausdrucken - berechnet wird sie aber nur ein einziges mal, nämlich vor der Do-Loop-Schleife! Und da sind alle Deine Variablen noch Null. Folglich ändert sich zwar Sw1ys, aber alle anderen Variablen nicht! Die Divisionen müssten also schon in die Do-Loop-Schleife rein.

    Gruß,

    Daniel

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    27.09.2009
    Alter
    22
    Beiträge
    661
    vielen dank jetzt funks.
    MfG Martinius

  4. #4
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Ein Prescaler von nur 8 ist schon recht klein um per Preload im Interrupt eine konstante Frequenz zu erzeugen. Zum einen kommt zu der Berechenten Zeit noch die bis zum neu setzen des Timers dazu, das sind bei BASCON durchauch schon mal rund 50 Zyklen. Dazu kommt noch eine mögliche Schwankung um +-2 Zyklen - wenn man Pech hat liegt man da gerade an der Grenze und es gibt einen Timertick mehr oder weniger.

    Besser wäre es hier den CTC Modus des Timers zu nutzen, oder man ließt gleich den Timer aus rechnent dann bei Bedarf vor der Ausgabe um.

Berechtigungen

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