Ich habe gerade ein Programm geschrieben, bei dem ich mit Taster 1 ---> Led rot einschalte Taster 2 ---> Led gelb einschalte Poti ---> Led grün einschalte Wenn ich alle Eingänge und Ausgänge Auf den Port B lege. Leuchtet keine der Leds. also die Taster auf B.0 bis B.2 und die Leds auf B.3 bis B.5 Wenn ich aber die Taster wie zuvor, aber die Leds auf Port C lege C.0 bis C.3 dann funktioniert mein Programm. Warum funktioniert es nicht wenn ich alles mit Port B machen möchte?????
Arduino F. schrieb: > Meine Glaskugel sagt: > Weil du die Pullups wieder abschaltest! Sorry aber wie müsste ich es dann machen??? Und was heißt "wieder" bezüglich der Pullups wurde doch nichts verändert.. Ich würde mich freuen wenn du noch es etwas konkreter sagst.
Ich habe keine Lust deine Bilder abzuschreiben. Das darfst du nicht erwarten! Tipp 1: Wenn die Outputs auf 3,4,5 liegen, dann solltest du diese Bits, in der Schleife, auch setzen, und nicht 0,1,2 Tipp 2: Wenn du das PortB Register mit 0 beschreibst, werden die Pullups, welche du vorher so schön aktiviert hast, sofort wieder abgeschaltet
Nächstes mal bitte den Quelltext bereitstellen, nicht Screenshots. Jetzt muss ich nämlich mühsam abschreiben. Du hast Glück dass ich gerade Zeit und Lust dafür habe. Hier schaltest du die Pull-Up Widerstände ein: SBI PORTB,1 SBI PORTB,0 SBI PORTB,2 Und hier überschreibst du Dir das, so dass immer nur ein einzige Eingang einen Pull-Up Widerstand hat. ldi r16,0x0000001 ; oder ldi r16,0x0000010 ; oder ldi r16,0x0000100 out PORTB,r16 Du änderst hier die falschen Bits. Deine Ausgänge sind Bit 3, 4 und 5 außerdem solltest du die Pull-Ups an allen drei Eingängen eingeschaltet lassen. Also so: ldi r16,0x0001111 ; oder ldi r16,0x0010111 ; oder ldi r16,0x0100111 out PORTB,r16
Stefan U. schrieb: > Nächstes mal bitte den Quelltext bereitstellen, nicht Screenshots. Das wäre das Mindeste, was man verlangen kann... > Hier schaltest du die Pull-Up Widerstände ein: [...] Und wenn man dann noch ein paar sinnvolle Symbole verwendet, wird die Sache irgendwann sogar richtig lesbar. Also irgendwie sowas in der Art: .equ Tast1Bit = PORTB0 .equ Tast1Msk = 1<<Tast1Bit .equ Tast2Bit = PORTB1 .equ Tast2Msk = 1<<Tast2Bit .equ PotiBit = PORTB2 .equ PotiMsk = 1<<PotiBit ;.equ Pullups = Tast1Msk | Tast2Msk | PotiMsk ;warum muß eigentlich der Poti-Eingang einen Pullup kriegen? Braucht er ;nicht! Also sinnvoller: .equ Pullups = Tast1Msk | Tast2Msk .equ RotMsk = 1<<PORTB3 .equ GelbMsk = 1<<PORTB4 .equ GruenMsk = 1<<PORTB5 .equ Outputs = RotMsk | GelbMask | GruenMsk ;Stack initialisieren kann man sich schenken, in dem Mini-Programm gibt's ;ja weder Interrupts noch Unterprogramm-Aufrufe... ldi R16,Pullups out PORTB,R16 ldi R16,Outputs out DDRB,R16 main: ldi R16,Pullups sbis PINB,Tast1Bit sbr R16,RotMsk sbis PINB,Tast2Bit sbr R16,GelbMsk sbis PINB,PotiBit sbr R16,GruenMsk out PORTB,R16 rjmp main
c-hater schrieb: > Stefan U. schrieb: > >> Nächstes mal bitte den Quelltext bereitstellen, nicht Screenshots. > > Das wäre das Mindeste, was man verlangen kann... > ok. wie kann ich das machen? einfach den Code hier ins Textfeld einfügen? > ;warum muß eigentlich der Poti-Eingang einen Pullup kriegen? Braucht er > ;nicht! Also sinnvoller: das ist das 2 te Programm dass ich gemacht habe. Daher habe ich abolut keine Ahnung ...von dem was ich da tue... : ) Ich lerne noch...
Stefan U. schrieb: Also so: > > ldi r16,0x0001111 ; oder > ldi r16,0x0010111 ; oder > ldi r16,0x0100111 > out PORTB,r16 DANKE! Ich habe es verstanden. Eine Frage noch...warum funktionierte es dann trotzdem, als ich über den PortC programmiert hatte??? Denn die Pullups sind ja in beiden Versionen ausgeschaltet gewesen...... HAT SICH ERLEDIGT...Es sind dann ja in C die andere Positionen...
:
Bearbeitet durch User
> einfach den Code hier ins Textfeld einfügen? Lies die Hilfe, die direkt über dem Text-Editor verlinkt ist: https://www.mikrocontroller.net/articles/Formatierung_im_Forum > warum funktionierte es dann trotzdem, als ich über den > PortC programmiert hatte??? Weil Port C ein anderer Port ist. Da kannst du hinschreiben, was immer du willst, ohne dass es deine Eingänge auf Port B beinflusst.
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.