Stromstoßschaltung mit mega8515

OP #1679087
Lesenswert?

Hallo zusammen,

ich überlege gerade, wie ich eine Stromstoßschaltung mit meinem µC 
realisieren kann. Ich möchte mit dem Taster 1 die LED einschalten, und 
beim nächsten drücken soll sie aus gehen. Mein Gedankengang liegt 
momentan so:
1
Wenn Taster 1 gedrückt und LED 1 aus
2
      dann LED 1 an
3
      ansonsten LED 1 aus
4
Wenn Taster 1 gerückt und LED 1 an
5
      dann LED 1 aus
6
      ansonsten LED 1 an
7
und wiederholen
Bin ich da auf dem richtigen Weg?
#1679171
Lesenswert?

Dennis Brenzel schrieb:
> Brauch ich das Exclusiv Oder wirklich? Das kann ich doch auch mit Und -
> Abfragen machen, oder nicht?

Man kann das EXOR auch mit NAND nachbilden.

Da ich aber (aufgrund edes Betreffs) davon ausging, dass Du es auf einem 
AVR realisieren willst, erinnerte ich halt an den einfacheren Weg. Der 
sieht etwa so aus:

- Eine ordentliche Tastenentprellung mit Flankenerkennung detektiert den 
neuen Tastendruck. Dadurch ist sichergestellt, dass die Taste 
zwischendurch losgelassen wurde. Einzelheiten dazu gibt es im Artikel 
Entprellung.

- Danach wird der LED-Port eingelesen, mit Key_Press EXOR verknüpft, zum 
LED-Port zurückgeschrieben und die Bits in Key_Press wieder gelöscht, da 
die Arbeit ja getan ist.

Das Ganze funktioniert dann mit 8 Bits (8 Taster, 8 LEDs) gleichzeitig 
und braucht im Timer-Interrupt (Aufruf alle etwa 20 ms) nur um die 20 
CPU-Takte Rechenzeit. Mit anderen logischen Verknüpfungen wird das 
unzuverlässiger und komplizierter.
OP #1679301
Lesenswert?

Wenn ich bei einer EOR Verknüpfung 0 bekomme, wird doch das Z-Flag 
gesetzt. Wenn ich bei einer AND-Verknüpfung 0 bekommen, wird auch das 
Z-Flag gesetzt.
Mit einer BREQ-Abfrage springt er an eine Marke, wenn das Z-Flag gesetzt 
wird, ansonsten wird der Befehl übersprungen. Und wenn ich eine 
BRNE-Abfrage mache, springt er an eine Marke, wenn das Z-Flag nicht 
gesetzt ist, ansonsten wird der Befehl übersprungen. Hab ich das so 
richtig verstanden?
#1679315
Lesenswert?

Dennis Brenzel schrieb:
> Wenn ich bei einer EOR Verknüpfung 0 bekomme, wird doch das Z-Flag
> gesetzt. Wenn ich bei einer AND-Verknüpfung 0 bekommen, wird auch das
> Z-Flag gesetzt.
> Mit einer BREQ-Abfrage springt er an eine Marke, wenn das Z-Flag gesetzt
> wird, ansonsten wird der Befehl übersprungen. Und wenn ich eine
> BRNE-Abfrage mache, springt er an eine Marke, wenn das Z-Flag nicht
> gesetzt ist, ansonsten wird der Befehl übersprungen. Hab ich das so
> richtig verstanden?

Ja, das ist richtig...

Aber:

Man macht logische Verknüpfungen nicht nur, um Flags im SREG zu 
beeinflussen (und dann bedingt zu verzweigen), sondern manchmal auch, um 
das Ergebnis weiter zu nutzen ohne sich um das SREG zu kümmern. 
Letzteres ist hier der Fall.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren