PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Flankenauswertung mit BASCOM



Lebi
04.12.2006, 16:06
Moin!
Gibt es einen Befehl mit dem ich positive oder negative Flanke vom Eingangssignal auswerten kann? Danke!

PicNick
04.12.2006, 16:45
Ich denk, das ist sowas wie "Pulsein"
https://www.roboternetz.de/wissen/index.php/Bascom_Inside-Code#PULSEIN
lies mal nach, ob es das ist, was du brauchst.

Lebi
04.12.2006, 17:19
Danke für deine Antwort, PicNick. Aber das ist leider nicht der richtige befehl.

badamtam
04.12.2006, 20:45
Hallo!

Vielleicht geht es so in der Art: (habs nicht probiert)


if eingang and not eingang_m then
flanke = 1
eingang_m = 1
end_if

if not eingang then
eingang_m = 0
end_if


(* Folgendes ans Programmende: *)

flanke = 0

recycle
04.12.2006, 20:59
Keine Ahnung, was du genau machen willst.
Wenn auf eine Flanke reagiert werden soll, macht man das häufig über einen Interrupt und da kannst du dann angeben ob der bei steigender (raising) oder fallender (falling) Flanke ausgelöst wird.

badamtam
04.12.2006, 21:19
Keine Ahnung, was du genau machen willst.
Wenn auf eine Flanke reagiert werden soll, macht man das häufig über einen Interrupt und da kannst du dann angeben ob der bei steigender (raising) oder fallender (falling) Flanke ausgelöst wird.

Interrupts stehen einem ja nicht unbegrenzt zur Verfügung. Beim Messen/Steuern/Regeln muss man ja oftmals auf Flanken an mehreren Eingangspins reagieren. Bei einer SPS gibts dafür praktischeTriggerbausteine.

Lebi
05.12.2006, 00:18
Die Aufgabe ist, die Drehrichtung einer Welle mittels 2 Sensoren (taster) zu bestimmen. Ich kenne das von SPS, mit Flankenauswertung, da gibt es extra Befehle für. Nun möchte ich wissen ob es eine fertige Lösung dafür im bascom gibt. Man kann es natürlich durch Umwege mit Boolischer Logik programmieren... Möchte ich aber nur ungern tun.

recycle
05.12.2006, 01:27
Interrupts stehen einem ja nicht unbegrenzt zur Verfügung.

Stimmt. Aber ob er noch Interrupts frei hat oder nicht, kann ich nicht riechen. Kommt wohl auch drauf an, welchen Controller er verwendet.
Beim ATmega168 ist z.B. soweit ich weiss jeder Eingang interrupt-fähig.




Beim Messen/Steuern/Regeln muss man ja oftmals auf Flanken an mehreren Eingangspins reagieren.


Vielleicht habe ich jetz ja ein Brett vorm Kopf, aber momentan fallen mir nur 2 Möglichkeiten ein:

a) ich verende einen Interruppt um mitzubekommen, dass es eine Flanke gab
b) ich merke mir den Zusatnd des Eingangs und frage den Eingang dann regelmässig ab. Wenn er seinen Zustand geändert hat weiss ich, dass es eine Flanke gab. Wenn ich den aktuellen Zustand kenne, weiss ich allerdings zwangsläufig auch, ob der mit einer steigenden oder einer fallenden Flanke erreicht wurde.



Bei einer SPS gibts dafür praktischeTriggerbausteine.

Und beim Microcontroller gibt es dafür halt die praktischen Interrupts ;-)

Lebi
05.12.2006, 23:35
Moin!
recycle hat Recht. Man kann bei den interrupst festlegen ob die durch eine bestimmte Flanke oder auch anderswie ausgelöst werden. Und zwar mit dem Befehl CONFIG INTx = FALLING/ RISING/ LOW LEWEL / CHANGE

gund
07.12.2006, 15:30
warum nehm ihr nicht debounce ? wenn du nicht willst das er die 25 ms ablaufen müssen, damit er auslößt, kannst du das mit conifg debounce = 0 "ausschalten"

Lebi
07.12.2006, 22:09
Ich glaub DEBOUNCE hat mit Flankenauswertung nicht viel zu tun...

gund
07.12.2006, 22:58
na aber sicher! lese dir mal die hilfe dazu durch: When DEBOUNCE is executed again, the state of the switch must have gone back in the original position before it can perform another branch. So if you are waiting for a pin to go low, and the pin goes low, the pin must change to high, before a new low level will result in another branch. Ist für mich eine flanken auswerteung, habe ich auch in meinen programmen schon umgesetzt und es funtioniert ohne prob´s.

mfg e-gund

Lebi
08.12.2006, 07:00
Hm... Da miss ich dir Recht geben :wink:

gund
08.12.2006, 12:57
wär sonst ja eigentlich ziemliche verschwendung der interupt pins. hat ja nicht jeder mc so viele.

mfg e-gund