PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Picaxe aufeinander folgende flanken am eingang erkennen



gast mirco13
10.01.2006, 10:02
Hallo Leute.

Ich möchte am picaxe 08M an einem Eingang 3 aufeinander folgende Flanken erkennen. Wenn nach der ersten Flanke weitere ausbleiben, soll das programm aber wieder an den Anfang zurückspringen.

Kann mir da mal jemand ne Hilfestellung bieten?
hatte es bisher so versucht um erstmal die 3 Flanken zu erkennen. Wenn es dann klappen würde, würd ich mich daran machen bei Ausbleiben folgender Pulse zurück zum Anfang zu springen. Ergibt aber bisher nicht meine Anforderung:


loop1:
b1 =0 `setze b1 auf 0 zurueck
goto loop

loop:
readadc 4,b0 `lese den Analogwert in b0
if b0 < 50 then goto zaehlen `wenn der Wert in b0 kleiner 50 ist gehe zu zaehlen
goto loop


zaehlen:
for b1 = 1 to 3 `vom 1. bis zum 3. Takt
pause 1000 `(Pause 1sec)
goto loop `springe zurück zu loop
next b1 `b1 +1
goto timer `wenn 3 Takte eingegangen sind gehe zu timer



timer:

high 1
wait 5
low 1
goto loop1

Hat einer von Euch schonmal etwas ähnliches gemacht und kann mir Tipps geben? Vielleicht bin ich ja auch voll auf dem falschen Weg. Denn momentan scheiter ich noch an der Erkennung der 3 Pulse ;-)

zardoz
10.01.2006, 13:52
Hi Mirco,

wie sieht's denn mit Deinem IR-Sender aus?

In diesem Fall wäre es vielleicht sinnvoller, den Interrupt zu nutzen. Außerdem dürfen bei einem PICAXE die Flanken natürlich nicht zu schnell aufeinander folgen ... Du weißt ja jetzt, wie lange die Abarbeitung eines Basicbefehls in etwa dauert ... O:)

Nice week,
Zardoz

mirco13
11.01.2006, 10:44
Den Ir Sender habe ich leider noch immer nicht hinbekommen (Den RC5 Code).

Das Problem mit den aufeinander folgenden Flanken habe ich gelöst:


loop:
readadc 4,b0 `lese den Analogwert in b0
if b0 < 150 then goto takt2 `wenn der Wert in b0 kleiner 150 (ca kleiner 3 Volt) ist gehe zu zaehler 2
goto loop


takt2:
Wait 4 `warte 4 sec


`4 Mal pruefen im 500ms Takt ob ein neues Signal ankommt wenn nicht, zurück zu loop

readadc 4,b0 `lese den Analogwert in b0
if b0 < 150 then goto timer `wenn der Wert in b0 kleiner 150 (ca kleiner 3 Volt) ist gehe zu zaehler 2
pause 500
readadc 4,b0
if b0 < 150 then goto timer `wenn der Wert in b0 kleiner 150 (ca kleiner 3 Volt) ist gehe zu zaehler 2
pause 500
readadc 4,b0
if b0 < 150 then goto timer `wenn der Wert in b0 kleiner 150 (ca kleiner 3 Volt) ist gehe zu zaehler 2
pause 500
readadc 4,b0
if b0 < 150 then goto timer `wenn der Wert in b0 kleiner 150 (ca kleiner 3 Volt) ist gehe zu zaehler 2
pause 500

readadc 4,b0
if b0 > 205 then goto loop `wenn der Wert in b0 groesser 205 (ca 4 Volt) ist gehe zurueck zu loop


timer:

high 1
wait 3
low 1
wait 3
goto loop

Problem ist also damit gelößt.