PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere Fnktion mit nur einer Taste



Cybererror
03.08.2009, 21:16
Hallo

Wollte mal wissen wie ich das Machen kann das ich zB eine 16Kanal lauflicht haben.
und ih eine Taste habe. Wenn ich Sie betätige soll das Lauflicht laufen. Noch mal drücke sollen aller Leuchten und noch mal Drücke sollen Sie schnell blitzen.

Wie bekomme ich das hin? Mit dem Tasten wechsel?

stefan_Z
04.08.2009, 10:18
Das geht so:
Wenn deine Taste erkannt wird, dann zählt eine Variable hoch, die du dann wieder auswertest. (Select Case...)
Je nach Wert kommt dann hat ein anderes GoSub.

Per If Then kannst du beim Hochzählen einen Maximalwert festlegen (max. Programmnummer) - bei einem Überlauf geht er dann wieder auf das 1. Programm.

Wichtig ist, dass du die Taste entprellst, weil du sonst 100x die Sekunde schaltest.

Am saubersten wird es mit einem Interrupt für die Taste, dann muss er sie nur abfragen, falls sie auch wirklich gedrückt wird.

Cybererror
04.08.2009, 17:16
will das per Interrupt machen. Wie soll das ungefähr aussehen?

CPU_Heizer
05.08.2009, 12:42
On Int0 int0_isr
Config Int0 = Falling 'Interrupt bei fallender Flanke
Enable Int0 'INT0 einschalten
Enable Interrupts 'Interrupts global einschalten.



int0_isr: 'Int0-Prozedur
Disable Int0
Waitms 100 'entprellen

'Hier kommt deine Select-Case Abfrage, so wie es stefan_Z beschrieben hat

Enable Int0
Return


Dieser Code springt bei fallender Flanke an INT0 zu "int0_isr".

Das ist aber alles recht gut in der Bascom-Hilfe beschrieben.

stefan_Z
05.08.2009, 13:03
Also da kann man verschiedene INTs nehmen...
Wenns nur eine oder zwei Tasten sind und du eh die INT frei hast, nimm die, ist am einfachsten. Ich nutze immer die internen Pullups, dann musst du allerdings zwangsläufig per Schalter auf GND schalten.
CONFIG INTx ist das Schlagwort in der Anleitung.

Oder du nutzt PinChange-Interrupts - haben aber nicht alle AVRs.
Da legst du mit einer Bitmaske fest, welche Pins eines Ports auf was reagieren. Damit lassen sich dann z.B. Matrix-Tastaturen realisieren.
Suchwort wäre PCINT

Wenn der Pin selber keinen INT hat, dann kannst du immer noch einen Timer-Interrupt verwenden, der zyklisch den entsprechenden Eingang abfragt.

Das Entprellen musst du bei Interrupts manuell machen, also z.B. mit einer Zählvariable und einer IF/THEN Abfrage.