-         

Ergebnis 1 bis 5 von 5

Thema: Rechteckiges Signal mit Hilfe eines Interrupts messen

  1. #1

    Rechteckiges Signal mit Hilfe eines Interrupts messen

    Anzeige

    Hallo Leute,

    ich hoffe jemand kann mir bei der Lösung meines Problems helfen. Also
    worum es geht:
    Ich muss mit einem Interrupt ein rechteckiges Signal messen. D.h. ich
    muss die Zeit von Rising bis Reising messen was ich auch geschaft habe,
    aber wie kann ich mit dem selben Innterrupt die Zeit von Rising bis
    Falling messen, dazu muss ich sagen das rechteckige Signal ändert
    anderauernd die Periodendauer, das Signal wird nicht negativ es wird nur
    1 und 0 und da wo es 1 wird, die Zeit muss ich auch mit dem selben
    Interrupt messen das heißt von Rising bis Falling, die Zeit soll man
    einfach bei der Flanke Falling ablessen und als Past in einem Hyper
    Terminal schreiben werden.

    Ich hoffe ich habe mich deutlich ausgedruckt und jemand kann mir helfen,
    und es ist dringend.
    Schöne größe an jeden.
    Hier habe ich das was ich schon selber geschrieben habe:
    Code:
    $regfile = "m8515.dat"
    $crystal = 8000000
    $baud = 4800
    
    
    'Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
    
    
    Config Timer1 = Timer , Prescale = 8
    
    Config Pind.3 = Input
    
    On Int1 Signal_1
    Config Int1 = Rising
    Enable Int1
    Enable Interrupts
    Start Timer1
    Dim Timeus As Long
    
    Do
    
    Print "Signal_1" ; Timeus
    
    Loop
    
    
    'Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
    
    Signal_1:
    Timeus = Timer1
    
    Timer1 = 0
    Return
    
    'Iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii
    Code-Tags eingefügt (PicNick)

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo,
    mit

    Config Int1 = Change

    konfigurierst du den Int so, dass er bei jedem Wechsel von 0->1 und von 1->0 die ISR aufruft.
    Dann überprüfst du in der ISR, ob der Eingang 0 ist, dann war es eine fallende Flanke, bzw. wenn er 1 ist, dann war es eine steigende Flanke.
    Entsprechend speicherst du in den Variablen Signal_High bzw. Signal_Low die Zeit des Timers ab.
    Falls es passieren kann, dass der Timer überläuft, musst du noch eine entsprechende ISR definieren und die Überläufe zählen.

    Gruß

    Rolf

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.11.2003
    Beiträge
    1.111
    Ich kenne mich zwar nicht mit Bascom aus, aber (falls möglich) wäre es einfacher, wenn Du statt dem INT1 den ICP benutzt. Der ist dafür gemacht, möglichst einfach und präziese Zeiten zwischen 2 (einstellbaren) Flanken zu messen.
    Gruß

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    10.06.2006
    Ort
    Duisburg-Rheinhausen
    Alter
    71
    Beiträge
    80
    Hallo
    ich bin auch der meinung das es mit dem ICP wesendlich einfacher ist.
    hier ein kleines Beispiel.
    Code:
    '--------------------------------------
    $regfile = "m32def.dat"
    $crystal = 16000000                                         
    $baud = 115200
    
    Dim Wcount As Word
    
    On Icp1 Oncapture                                           'Interrupt-Routine
    
    Config Timer1 = Timer , Prescale = 256 , Capture Edge = Rising
    
    Enable Icp1                                                 'Capture-Interrupt
    Enable Interrupts                                           'Interrupts global
    
    Main:                                                       'Hauptschleife
    Goto Main
    '--------------------------------------
    Oncapture:                                                  'Timer1-Capture
      Wcount = Timer1                                           'Erst Wert sichern
      Timer1 = 0                                                'Sofort Timer-Reset
                                            
      Print Wcount ; " ";
    Return
    Du brauchst es nur Deinen wuenschen anzupassen
    Gruß raggy

  5. #5
    Erfahrener Benutzer Robotik Visionär
    Registriert seit
    26.11.2005
    Ort
    bei Uelzen (Niedersachsen)
    Beiträge
    7.942
    Wenn man schon den ICP Interrupt nimmt, sollte man auch die ICP Register Auslesen, und nicht den Timer direkt. Der Timer sollte man auch nicht jedes mal zurücksetzen, sondern die Differenz zum vorherigen Wert berechenen.

Berechtigungen

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