-
        

Ergebnis 1 bis 3 von 3

Thema: Tachosignal ohne Timer

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beiträge
    67

    Tachosignal ohne Timer

    Anzeige

    Hallo Forum,

    ich habe hier einen Lüfter, welcher ein drehzahlabhängiges TTL-Signal ausgibt.
    Je höher die Drehzahl, umso höher die Frequenz des Tachosignals.

    Da ich im ATMEGA 128 die Timer 0-3 bereits verwende, möchte ich die Drehzahl über den INT5-Interrupt ermitteln.


    folgenden Codeauszug wollte ich dazu verwenden:

    Code:
    Onint5:
       Toggle Flanke                                            'INT5 - Interruptroutine
       Toggle Testpin
    Return
    
    
    Function Tacho() As Long
    'bei Lüfter-PWM-Wert=40 ergeben sich ca. 27ms
    Local Periodendauer As Long
       Periodendauer = 0
       If Ocr0 >= 100 Then
          Flanke = 0
          Bitwait Flanke , Set                                  'auf 1. Flanke warten
          Print "weiter geht's"
          'Do : Incr Periodendauer : Loop Until Flanke = 0
       End If
       Reset Testpin
       Disable Int5
       Tacho = Periodendauer
    End Function

    das enable INT5 erfolgt 30ms vorher, da mir auffiel, wenn ich es erst in o. a. Function ausführe, ich keine Signale am Testpin erhalte.

    Am Oszilloskop sehe ich, dass bei erlaubtem INT5-Interrupt der Testpin toggelt.
    Wird OCR0 (Lüfter-PWM) nun > 100 wartet sich die Bitwait-Anweisung zu tode und mein Controller steht still.
    Nichtmal die INT5-Serviceroutine wird noch ausgeführt.

    Warum wird die Bitwait-Schleife nie beendet? Ein Ersatz gegen ein
    Do : Loop until Flanke = 1 ändert ebenfalls nichts an dem Problem.
    Gebe ich testhalber den Wert von Flanke in der Serviceroutine aus, erhalte ich ebenfalls nullen und einsen.

    Wo ist der Haken?


    mfG BoGe-Ro

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wenn du "Bitwait" verwendest, ist ein Interrupt eigentlich sinnlos.
    das Toggeln im Interrupt und das Flanke=0 in der SUB sind ja nicht synchronisiert.
    Frag' doch das INT5-Bit selbst ab oder mit "PULSEIN" (--> type "help" for help)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    19.02.2010
    Beiträge
    67
    Hallo,

    das Flanke=0 soll ja der Synchronisation - ich warte auf eine Flanke, da die Funktion ja unsynchron zur auszuwertenden Periode beginnt, setze Flanke auf 0 und beginne danach die Ausmessung der folgenden Periode. So zumindest mein Plan

    Den Fehler hab ich mitlerweile auch gefunden - das direkte Abfragen von OCR0 führte zum Absturz.
    Umladen während SREG.7=0 in eine Variable, anschließende Auswertung dieser Variable führte dann zum Erfolg.

    Ich werd aber deinen Vorschlag mal testen und es mit PULSEIN versuchen - und danach mal die Ergebnisse gegenüberstellen

Berechtigungen

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