-
        

Ergebnis 1 bis 3 von 3

Thema: Timer0

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.09.2007
    Beiträge
    211

    Timer0

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,

    Ich möchte 3 Sekunden lang Werte von einem Sensor sammeln und die dann weiter verarbeiten. Ist mein Programm dazu korrekt?

    Code:
    $regfile = "M8def.dat"
    $crystal = 1000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    
    Dim i as Integer
    
    
    '1000000 (Systemtakt) / 1024 (Prescaler) = 976,5625 (Counts)
    Config Timer0 = Timer , Prescale = 1024
    
    '976,5625(Counts) / 256 (8-Bit Timer) = 3,814697265625 (Interrupts die Sekunde)
    On OVF0 On_ovf0
    Enable OVF0
    
    Enable Interrupts
    
    
    Do
       !NOP
    Loop
    
    End
    
    
    
    On_ovf0:
       i = i + 1
       If I = 9 Then
           I = 0
           ' verarbeite Werte
       End If
      
    Return
    Danke!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Soweit siehts richtig aus.
    Nur würde ich die Auswertung _nicht_ in der ISR machen!

    Dort nur eine Variable setzen (z.B. auswerten = 1) und in der Main-Loop, wo eh nur das NOP drin ist, abfragen:
    Code:
    If auswerten = 1 Then
      (auswerten eben)
      auswerten = 0
    End If
    Sollte das Auswerten nämlich mal länger dauern als die Zeit zwischen 2 ISRs, kanns Stress geben.
    #ifndef MfG
    #define MfG

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Probier mal sowas (nicht geprüft):

    Code:
    $regfile = "M8def.dat"
    $crystal = 1000000
    $hwstack = 100
    $swstack = 100
    $framesize = 100
    
    Dim I As Word
    Dim Messen_an As Byte
    
    Config Timer0 = Timer , Prescale = 8
    Const Startwert = 138                             'Für 1 ms
    Timer0 = Startwert
    On Timer0 Tim0_isr
    Enable Interrupts
    
    Messen_an = False
    I = 0
    
    Do
       'Messung für 3 Sek. starten:
       I = 0
       Messen_an = True
    
       While Messen_an = True
          'Messwerte aufnehmen
       Wend
    
       'Messwerte verarbeiten
       'Z.B. 10 s warten auf nächste Messung:
       Wait 10
    
    Loop
    End
    
    
    
    Tim0_isr:                                         '1000 Hz (1 ms)
    Timer0 = Startwert
    I = I + 1
    If I > 3000 Then                                  'nach 3 Sek.
       Messen_an = False
    End If
    Return
    Gruß Dirk

Berechtigungen

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