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.