PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfänger probleme mit taste



logikbomb
28.12.2004, 21:07
habe eine kleine schaltung geschrieben (Ampelschaltung)
wollte jetzt eine taste nehmen wen die gedrückt wird soll das programm schneller zum anfang gehen da angekommen nach kurzen warten wieder normal weitergehen als tastenport wollte ich wie unten zu sehen Pind.4 nehmen

Code
$regfile = "2313def.dat"
$crystal = 3686400

Config Pind.4 = Input
Config Pinb.0 = Output
Config Pinb.1 = Output
Config Pinb.2 = Output

Do
ab hier sollte das prog normal weitermachen
Set Portb.2
Wait 10
Set Portb.1
Wait 2
Reset Portb.1
Reset Portb.2
Set Portb.0
ab hier sollte es bis zum anfang schneller gehen wenn man die taste drückt
Wait 10
Set Portb.1
Reset Portb.0
Set Portb.1
Wait 4
Reset Portb.1
Loop
End

hoffe jemand kann mir helfen dabei

logikbomb
28.12.2004, 21:37
hatte vergessen
Portb.0 = Grün
Portb.1 = Gelb
Portb.2 = Rot

RCO
28.12.2004, 23:52
Also wenn ich dich richtig vertehe, dann sollten die einzlnen Pausen zwischen


ab hier sollte es bis zum anfang schneller gehen wenn man die taste drückt

und


Loop

Eine Frage hätte ich dann noch, soll die Zeit verkürzt werden, wenn der Taster an der entsprechenden Stelle gedrückt ist, oder auch dann, wenn er z.B. in der 10 sekündigen Pause gedrückt wird?

im 1. Fall ginge das recht einfach.

im 2. Fall müsste man vermutlich ganz anders Programmieren.

Wichtig ist auch, inwieweit die Zeit verkürzt werden soll, halbiert, und was ist dann, wenn die Hälfte der Pause schon um ist?

MFG Moritz

logikbomb
29.12.2004, 11:55
er soll schneller auf rot schalte so wie du meintest im 1. fall
habe aber das problem das ich generel nicht weiß wie man tasten im programmablauf programmiert

RCO
29.12.2004, 13:20
Also da gibt es 2 Möglichkeiten, die erste ist über eine if-Anweisung, was den NAchteil hat, dass du, wenn du keine schnell durchlaufende Schleife hast, nur an einer bestimmten Stelle prüfst, ob die Taste gedrückt ist. Die 2. Möglichkeit wäre ein Interrupt, der ja bekanntermaßen sofort anspringt, allerdings ist es dann etwas schwerer von der Interruptroutine Bezug auf das laufende Programm zu nehmen.

Den Taster würde ich im 1. Fall (if-Anweisung) gegen Masse un an einen beliebigen Pin schließen. AUßerdem muss an dem Pin, nehmen wir mal PinD.4 der Pullup aktiviert werden, denn wenn der Taster nicht gedrückt ist, liegt ja kein Signal an und das ist bei Eingängen garnicht gut.

config Pind.4=input
Portd.4=1 'Beim Setzen im Port!

Nun ist der Taster quasi schon konfiguriert.
Jetzt die If-Anweisung:

If Pind.4=0 then 'Wenn Taster gedrückt, dann
'Tue dies
else
'Tue das
End if

Man könnte jetzt in der If-Anweisung z.B. die Pausen verkürzen, wenn man diese vorher zu Variablen gemacht hätte. Der NAchteil ist halt, dass nur vor der 10 Sek. langen Pause geprüft wird ob ein Taster gedrückt ist, wird er zu spät, also während der Pause gedrükt, dann reagiert das Programm nciht daruaf.

Hier müsste man dann mit Interrupts arbeiten, allerdings dann auch die Pausen z.B. durch SChleifen ersetzen, die Besser verändert werden können.

MFG Moritz

logikbomb
29.12.2004, 16:49
das programm läuft nur ca.30 sek da ist das nicht so schlimm wenn es nicht sofort reagiert hab ja zeit werde es mal so versuchen und wenn es funktioniert oder nicht werde ich dan posten
MFG Mario