-
-
Erfahrener Benutzer
Roboter Genie
Natürlich kennt Bascom die OR Verknüpfung.
Darüber hinaus auch ein Else im If ... Then ... Else ... End If. Also so:
If Eingang = 1 And B < A Then Ausgang = 1
Else Ausgang = 0
End If
Dass hier müsste übrigens auch noch äquivalent sein:
If B < A Then Ausgang = Eingang
Else Ausgang = 0
End If
Nun zum Debounce. Ich hatte mir nicht den ganzen Thread durchgelesen, daher auch nur die übliche Verwendung des Debounce vorgeschlagen.
Wenn du über die externen Interrupts gehen willst, damit die Auswertung sicher sofort geschieht, könntest du verschiedene Wege gehen:
1. Bei Flankenwechsel des INT0 Pins wird die zugehörige ISR angesprungen. Dort könntest du den Debounce Befehl benutzen, um eine Sub aufzurufen, in der dann irgendeine Aktion ausgeführt wird. Allerdings scheint mir das etwas von hinten rum durchs Auge in die Brust zu sein. Hierbei ist noch zu bedenken, dass die Ausführung der Sub um eine gewisse Zeit verzögert wird, falls die Bedingung im Debounce Befehl erfüllt ist. Siehe dazu Config Debounce.
2. Die ISR wird wieder angesprungen, aber nun machst du die Auswertung selber. Selbst wenn der Kontakt jetzt noch prellt, die Aktion kannst du auf jeden Fall schon einmal ausführen. Das Prellen bewirkt aber, dass nach Beendigung der ISR diese sofort wieder aufgerufen wird. Um dies zu vermeiden, könntest du in der ISR einige ms warten und dann die zwischenzeitlich aufgetretenen Interrupt-Flags zu löschen. Damiet verhinderst du, dass die ISR durch das Prellen mehrfach aufgerufen wird. Warten in der ISR klingt zwar etwas frevelhaft, ist aber in diesem Fall ok. Es sei denn, dass du andere Arbeiten in deinem Programm hast, die durch das Warten gestört würden.
Debounce wird eigentlich verwendet, wenn man relativ oft den Pin abfragen kann.
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen