Ich habe die Pins 3-0 vom Port D mit 4 Tastern (+Pul-ups) verbunden.
Und die Pins 3-0 vom Port B mit 4 LEDs (+Widerstände).
Dazu habe ich folgendes Programm laufen:
1
ldi r16, 0xff
2
out DDRB, r16
3
4
ldi r16, 0x00
5
out DDRD, r16
6
7
8
loop:
9
in r16, PIND
10
;andi r16, 0b11111110 ; nur für Testzwecke
11
out PORTB, r16
12
rjmp loop
Problem ist, dass Pin 0 vom Port B ununterbrochen leuchtet, aber die
anderen 3 LEDs nur, wenn ich die jeweiligen Schalter drücke.
Ich habe bereits den Taster ausgetauscht, sowie den Pull-up Widerstand,
neu verkabelt, und auch einmal den Jumper vom Pin 0 aus Port D entfernt.
Alles scheint nicht zu helfen.
Dann habe ich den Pin 0 aus Port D mal vom Code aus deaktiviert was
geholfen hat.
Kann ich davon ausgehen, dass der Pin im uC kaputt ist?
Danke
Hatte int 21h schrieb im Beitrag #5652042 angegeben:
> (Atmega328p)Thomas O. schrieb:> um welchen µC handelt es sich? Wenns einer der größeren mit JTAG,> kannst> du in deinem Programm das JTAG disable Bit setzen.
Wahnsinn.
Die ÜBERSCHRIFT lautet:
"PD0 leuchtet ununterbrochen (Atmega328p)"
Thomas O. schrieb:> um welchen µC handelt es sich?
Da denkt man doch automatisch an einen Z80 mit PIO, oder nicht?
Ich habe Schwierigkeiten, Dir zu folgen.
Die Led ist an PB0 angeschlossen, aber PD0 (wo der Taster angeschlossen
ist) soll ständig leuchten. Das passt nicht zusammen.
Beim Arduino Uno/Nano ist PD0 mit dem USB-UART Chip verbunden und wird
von diesem im Ruhezustand auf High gezogen.
Aber auch das passt nicht zu deiner Beschreibung, denn du schreibst
etwas von Pull-Up Widerständen, die diesen Pin ebenfalls auf High ziehen
würden. Als sollte ein High Pegel nicht überraschen.
Kann also nur sein, dass der Pin PD0 immer auf Low liegt, dieser Pegel
vom Programm nach PB0 übertragen wird und die LED so an PB0
angeschlossen ist, dass sie bei Low leuchtet.
Das wiederum passt nicht zu deine rauskommentierten Code-Zeile, welche
die LED angeblich aus schaltet.
Es wird dringend Zeit für einen Schaltplan und eine neue korrekte
Problembeschreibung.
@Stefanus
Danke für deine Korrektur, es war mir leider entgangen.
Natürlich meine ich, dass Pin 0 aus Port B permanent leuchtet.
Die Beschaltung ist aber genau die selbe wie bei den anderen 3 Pins!
Und mit Pull up meine ich, das die Eingänge (PortD) mit GND über einen
10k Widerstand verbunden sind.
Der Rest funktioniert ja auch.
int 21h schrieb:> Und mit Pull up meine ich, das die Eingänge (PortD) mit GND über einen> 10k Widerstand verbunden sind.
Nennt sich dann Pull-DOWN, weil nach UNTEN (gegen GND) gezogen wird) und
nicht Pull-UP, der nach OBEN (gegen VCC) gezogen wird.
> Natürlich meine ich, dass Pin 0 aus Port B permanent leuchtet.
Was heißt das denn technisch: High oder Low Pegel?
Welche Spannung hat PB0 und welche hat PD0 (relativ zu GND)?
Benutzt du die serielle Schnittstelle? Handelt es sich um ein Arduino
Board oder ein anderes, wo der serielle Port irgendwie belegt ist?
Arbeitest du immer noch ohne Schaltplan? Für eine einfache
Bleistiftzeichnung sollte Zeit sein, sonst fühle ich mich von Dir nicht
ernst genommen. Hilfst du mir, dann helfe ich Dir.
Stefanus F. schrieb:> Arbeitest du immer noch ohne Schaltplan? Für eine einfache> Bleistiftzeichnung sollte Zeit sein, sonst fühle ich mich von Dir nicht> ernst genommen. Hilfst du mir, dann helfe ich Dir.
Hier habe ich mal den (gekürzten) Schaltplan skizziert. (Es sind
natürlich nicht nur 1 Taster, sondern 4 beteiligt ebenso mit den LEDs).
Stefanus F. schrieb:> Benutzt du die serielle Schnittstelle? Handelt es sich um ein Arduino> Board oder ein anderes, wo der serielle Port irgendwie belegt ist?
Ja, es handelt sich um einen Arduino Uno rev3 Board (Siehe Anhang).
Stefanus F. schrieb:> Welche Spannung hat PB0 und welche hat PD0 (relativ zu GND)?
An PB0 messe ich ~5V und an PD0 messe ich ~4.5V was irgendwie keinen
Sinn macht oder XD
int 21h schrieb:> Edit: ohne Pull-Down, also wenn ich direkt an den Pin halte, sind> es> sogar 5V.> Wieso ist der Pin dann als Ausgang geschaltet...hä?
Ok, das scheint bei allen Pins der Fall zu sein
int 21h schrieb:> Natürlich meine ich, dass Pin 0 aus Port B permanent leuchtet.> Die Beschaltung ist aber genau die selbe wie bei den anderen 3 Pins!
Und wie hast du die CKOUT Fuse programmiert?
(s. Datenblatt 14.3.1 "Alternate Functions of Port B")
int 21h schrieb:> Hier habe ich mal den (gekürzten) Schaltplan skizziert.
Na also, geht doch.
Jetzt ist endlich klar, dass du Pull-Down Widerstände verwendest, dass
die LEDs bei High Pegel leuchten und was wo angeschlossen ist.
> Ja, es handelt sich um einen Arduino Uno rev3 Board
Bei diesem Board wird PD0 vom USB-UART Chip auf High gezogen. Das ist
bei seriellen Schnittstelen der Ruhepegel. Wenn du den USB Anschluss
nicht brauchst, kannst du deinen Pull-Down Widerstand auf 100 Ohm
verringern, dann wird es funktionieren.
> an PD0 messe ich ~4.5V was irgendwie keinen Sinn macht oder XD
Doch tut es, soagr zu 100%. Schau Dir mal deinen Schaltplan zusammen mit
dem Schaltplan des Arduino Boarrdes an:
1
USB-UART 1k 10k
2
High 5V o----[===]---+---[===]---| GND
3
|
4
o
5
PD0
5V / 11000Ω = 0,45mA
10kΩ * 0,45mA = 4,5V
Verstanden? Tausche jetzt die 10kΩ durch 100Ω aus und rechne nochmal.
Wolfgang schrieb:> Und wie hast du die CKOUT Fuse programmiert?> (s. Datenblatt 14.3.1 "Alternate Functions of Port B")
Spielt hier keine Rolle, der Port B funktioniert:
> Dann habe ich den Pin 0 aus Port B mal vom Code aus> deaktiviert was geholfen hat.> andi r16, 0b11111110 ; nur für Testzwecke> out PORTB, r16
(ich habe in diesem Zitat einen wesentlichen Rechtschreibfehler
korrigiert)
@int 21h (Gast)
Zur Zusammenfassung hier nochmal die zwei Fehler, die du gemacht hast:
1. du verwendest einen auf einem Board verbauten µC, ohne dir Gedanken
darüber zu machen, wie dessen Pins bereits auf dem Board beschaltet
sind. Das geht so nicht. Steck entweder einen nackten µC auf dein
Breadboard, dann weißt du, daß du die komplette Beschaltung der Pins
siehst. Oder besorg dir den Schaltplan des Boards und verwende (erstmal)
nur Pins, die nicht bereits anderweitig in Verwendung sind.
2. du stellst eine Frage, ohne auch nur eine Andeutung über die
verwendete Hardware zu geben. Daß das ein ATmega328 auf einem
Arduino-Board ist, hätte direkt in den Eröffnungspost gehört. Und
zusätzlich die Information, wie genau du Taster und LED angeschlossen
hast. Taster nach Vcc mit Pulldown nach GND sind z.B. total unüblich.
LED sieht man auch öfter nach Vcc geschaltet (leuchten also bei Ausgang
auf L) als umgekehrt.