Forum: Mikrocontroller und Digitale Elektronik Stromstoßschaltung mit mega8515


von Dennis B. (danrulz81)


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?

von I. L. (Gast)


Lesenswert?

> Bin ich da auf dem richtigen Weg?

- jo das passt



Gruß Knut

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?

Wenn Taster 1 erneut gedrückt wurde dann
  LED_Port = LED_Port EXOR LED_Bit

von Dennis B. (danrulz81)


Lesenswert?

Brauch ich das Exclusiv Oder wirklich? Das kann ich doch auch mit Und - 
Abfragen machen, oder nicht?

von Kluchscheißernder N. (kluchscheisser)


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.

von Dennis B. (danrulz81)


Lesenswert?

O.k., das klingt plausibel.

von Dennis B. (danrulz81)


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?

von Kluchscheißernder N. (kluchscheisser)


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.

von Kluchscheißernder N. (kluchscheisser)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.