Hallo,
ich habe ein kleines Problem mit einem Schalter, dieser ist über einen
PullUp-Widerstand an die MCU geschaltet. Also für Bit = 0 gedrückt. Dann
soll ein anderer Pin an dem sich eine Diode gegen Vcc befindet auf
Ausgang "low" geschaltet werden. Irgendwie komm ich da nicht wirklich
weiter ich weiß nicht warum die Led nicht aus geht wenn ich die Taste
betätige, vielleicht kann mir ja jemand weiterhelfen. PORTC soll Ausgang
und PORTD Eingang sein.
Danke.
Hier der Code:
ldi r16, 0xFF
out DDRC, r16
out PORTD,r16
ldi r16, 0x00
out DDRD, r16
sbi PINC,2
main: sbic PIND,2
rjmp main
cbi PINC,2
rjmp main
Zur Hardware/Schaltung mag ich nichts sagen, weil mir der Schaltplan oder eine Skizze fehlt. Zur Software:
1 | ; Port C als Ausgang einrichten |
2 | ldi r16, 0xFF |
3 | out DDRC, r16 ; 0xff => alle Pins an Port C auf Ausgang |
4 | |
5 | ; Port D als Eingang einrichten |
6 | out PORTD,r16 ; Port D ist noch vom Reset her Eingang, |
7 | ; diese Zeile schaltet also die internen Pullups ein |
8 | ; möglicherweise Schreibfehler sinnvoller z.B. |
9 | out PORTC,r16 ; alle Pins an Port C HIGH |
10 | |
11 | ldi r16, 0x00 |
12 | out DDRD, r16 ; 0x00 Port D auf Eingang |
13 | |
14 | sbi PINC,2 ; ??? Sinnvoll könnte sein sbi PORTC,2 |
15 | ; um Ausgang PC2 HIGH zu setzen |
16 | |
17 | main: |
18 | sbic PIND,2 ; PD2 abfragen, wenn LOW, dann nächsten |
19 | ; Befehl überspringen |
20 | rjmp main |
21 | cbi PINC,2 ; ??? Sinnvoll könnte sein cbi PORTC,2 |
22 | ; um Ausgang PC2 LOW zu setzen |
23 | rjmp main |
24 | |
25 | ; Alternative: |
26 | main: |
27 | sbis PIND,2 ; PD2 abfragen, wenn HIGH, dann |
28 | cbi PORTC,2 ; diese Zeile überspringen |
29 | rjmp main |
Hallo Phil,
sortiere doch ersteinmal deinen Code, dann wird das ganze vllt auch
etwas leichter zu lesen
Versuch es einmal mit diesem Code und du wirst mehr erfolg haben:
ldi r16, 0xFF
out DDRC, r16
ldi r16, 0x00
out DDRD, r16
main:
sbic PIND,2
rjmp main
an:
ldi r16, 0xff
out PORTC,r16
sbis PIND,2
rjmp an
aus:
sbic PIND,2
rjmp aus
ldi r16, 0x00
out PORTC,r16
loop:
sbis PIND,2
rjmp loop
rjmp main
mit dieser Version solltest du mehr Erfolg haben
Gruß
Dennis
Vielen Dank für die schnellen Antworten. Hat so weit geklappt, glaube auch dass ich das mit der Zuweisung der Ports jetzt begriffen habe, wird sich noch zeigen ;-). Kann mich nur nochmal bedanken ;-) Gruß Phil
Nimm lieber den Code von Dennis. Bei meinem Code (und deinem) wird der Portzustand ja nie zurückgesetzt, auch wenn die Taste losgelassen wird!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.