Ausgänge getrennt schalten

Gast #19895
Lesenswert?

Hallo,

wer hat enie Idee wie ich den 4333 z.B. als Lichtschalter programmieren 
kann. Mit den 6 Tastern sollen die Ausgänge beschaltet werden, jeder 
Taster soll die entsprechenden Ausgang getrennt einschalten und nur nach 
nochmaliger betätigung wieder ausschalten.

Wer hat eine Idee, das Programm was ich habe hält die Zustände  hält.

Vielen Dank

Jürgen

.include "4433def.inc"     ;bzw. 2333def.inc

         ldi r16, 0xFF
         out DDRB, r16     ;Port B durch Ausgabe von 0xFF ins
                           ;Richtungsregister DDRB als Ausgang 
konfigurieren
         ldi r16, 0x00
         out DDRD, r16     ;Port D durch Ausgabe von 0x00 ins
                           ;Richtungsregister DDRD als Eingang 
konfigurieren
loop:
         in r16, PIND      ;an Port D anliegende Werte (Taster) nach r16 
einlesen
         out PORTB, r16    ;Inhalt von r16 an Port B ausgeben
         rjmp loop         ;Sprung zu "loop:" -> Endlosschleife
Gast #19896
Lesenswert?

Hallo,

im Anhang ein Asm-Programm, mit dem es evtl. gehen könnte.
Der Zustand der Ausgänge wird dabei zwischengespeichert und mit den 
Eingängen xor-verknüpft.
Was man noch beachten müsste: Problem bei mehr als zwei Taster (fast) 
gleichzeitig gedrückt und Entprellung der Taster.

Gruß
Thomas
Angehängte Dateien:
Gast #19899
Lesenswert?

Ich habe so etwas in meiner Wohnung realisiert - die wird von einem 
80535 gesteuert.
Leider hilft es Dir nichts, wenn ich ein Code-Segment poste, da die 
Taster-Funktion mit einem Logik-Interpreter verwoben ist.

Knackpunkt: Du mußt an Deinen Eingängen Flanken erkennen. Das heißt, daß 
z.B. nur bei einem 0->1 Übergang ein Ereignis ausgelöst wird. Hierzu 
löse ich alles auf Bit-Ebene auf, somit geht mir auch ein gleichzeitiger 
Tastendruck nicht verloren. Wird nun ein Eingangs-Ereignis (Flanke) 
erkannt, wird der ensprechende Ausgang getoggelt (xor-Verknüpfung).
Entprellen ist ganz einfach: Die Eingänge mit 50 Hz im Interrupt 
abfragen, da braucht man sich um entprellen keine Gedanken mehr machen, 
kein Kontakt prellt 20ms lang...
Gast #19902
Lesenswert?

Lad dir die Kostenlos Bascom Version runter.

Und dann machst du grob das hier:

Start:
Entprelle Taster1->Out1
Entprelle Taster2->Out2
...
Springe zu Start

Out1:
Toggle Ausgang1
Springe zu Start

Out2:
Toggle Ausgang2
Springe zu Start

...

Mit dem "grob" Programm geht es auf jeden Fall mit Entprellung und 
allem.

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