-
        

Ergebnis 1 bis 6 von 6

Thema: Pin Zustandsänderung überwachen ?

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    28.09.2005
    Beiträge
    32

    Pin Zustandsänderung überwachen ?

    Anzeige

    Hallo Leute ich brauch mal wieder eure Hilfe.
    An einem Pin befindet sich ein Schalter ( kein Taster)der im geschlossenen Zustand auf Masse liegt. Wenn sich der Zustand des Schalters ändert soll ein Befehl (Print An) gesendet werden. Aber nur 1 mal auch wenn der Schalter weiter diesen Zustand hat. Das selbe dann auch für Print aus.

    Mein Code funktioniert recht unzuverlässig. Gibt es eine andere Methode ? oder hat vieleicht jemand von euch ein anderes Beispiel ?

    Do
    If Pind.2 = 0 And Status = 0 Then
    Print "an"
    Status = 1
    End If

    If Pind.2 = 1 And Status = 1 Then
    Print "aus"
    Status = 0
    End If
    Loop

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    35
    Beiträge
    1.987
    Über deine Methode wär's machbar, zuverlässiger gehts aber über Interrupts.
    Ein Interrupt wird beim Pegelwechsel ausgelöst (z.B. INT0) und führt dann eine definierte Aktion aus. Hat den Vorteil, dass es auch dann funktioniert, wenn das Programm nicht gerade bei "If Pind.2 = 0 And Status = 0 Then " ist.
    #ifndef MfG
    #define MfG

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    1.892
    Ichwürde es auch über Interrupts machen wollen.
    Allerdings sollte man dran denken, den Schalter zu entprellen.

    Ich würde im Interrupt nur ein Flag setzen und den eigentlichen Print auftrag in der Hauptroutine starten.

    In die Interruptroutine sollte dann eine Abfrage mit rein, die nach einer Aktivierung für 10..20ms kein neues Setzen des "Print" Flags erlaubt.

    Dadurch wird die Interruptroutine schön kurz und nicht durch wait's oder debounce blockiert.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Einen externen Interrupt für einen Schalter abzufragen, ist allerdings schon ein wenig Ressourcen Verschwendung. Ein Schalter ist ja als noch träger anzusehen als ein Taster. Und prellen tun die Dinger meist ohne Ende. Ein Interrupt löst da bestimmt öfter als einmal aus. Um das zu verhindern ist auch etwas Aufwand nötig.
    So etwas Langsames (der kann ja nicht im Millisekunden Bereich wieder öffnen) wie einen Schalter, würde ich immer mit einem Debounce direkt aus der Main Loop abfragen.

    Gruß

    Rolf

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    28.09.2005
    Beiträge
    32
    Das hört sich alles super an. Aber kann denn mal jemand von euch ein Beispiel posten ?

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von Looser
    Das hört sich alles super an. Aber kann denn mal jemand von euch ein Beispiel posten ?
    Der Debounce Befehl ist in der Hilfe mit Beispiel erklärt.
    Für die Interrupts kannst du hier mal nach "externer interrupt" oder "Int0" oder "Int1" suchen.

    Gruß

    Rolf

Berechtigungen

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