Forum: Mikrocontroller und Digitale Elektronik Ausgänge getrennt schalten


von Jürgen (Gast)


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

von Thomas F. (Gast)


Angehängte Dateien:

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

von Jürgen (Gast)


Lesenswert?

Hallo,

vielen Dank für die Antwort!!!

Bei mir funktioniert nur leider das Programm auch nicht es leuchtet 
immer nur Bit0, die Taster ändern den Zustand nicht.

Vielen Dank im vorraus

Jürgen

von Michael (Gast)


Lesenswert?

Wirf vielleicht einen Blick in die Codesammlung hier.

Michael

von thkaiser (Gast)


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...

von Jürgen (Gast)


Lesenswert?

Hallo,

ich hab es herausgefunden

sbr r24,1

Danke für die Mühe

Jürgen

von thkaiser (Gast)


Lesenswert?

Hmm, nur dieser eine Befehl löst das Problem aber nicht ?

von Daniel Kaufmann (Gast)


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.

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.