Forum: Mikrocontroller und Digitale Elektronik PD0 leuchtet ununterbrochen (Atmega328p)


von int 21h (Gast)


Lesenswert?

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

von Thomas (kosmos)


Lesenswert?

um welchen µC handelt es sich? Wenns einer der größeren mit JTAG, kannst 
du in deinem Programm das JTAG disable Bit setzen.

von Karl M. (Gast)


Lesenswert?

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.

von Defensiver Mittelfeld-Akteur (Gast)


Lesenswert?

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?

von Hubert G. (hubertg)


Lesenswert?

Schon mal die Spannung gemessen was auf den Pin tatsächlich drauf ist.

von Stefan F. (Gast)


Lesenswert?

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.

von int 21h (Gast)


Lesenswert?

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

von Oleg (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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

von int 21h (Gast)


Angehängte Dateien:

Lesenswert?

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

von int 21h (Gast)


Lesenswert?

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ä?

von Julian B. (int_21h)


Lesenswert?

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

von Wolfgang (Gast)


Lesenswert?

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")

von Stefan F. (Gast)


Lesenswert?

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.

von Stefan F. (Gast)


Lesenswert?

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)

von int 21h (Gast)


Lesenswert?

Stefanus F. schrieb:
> Verstanden? Tausche jetzt die 10kΩ durch 100Ω aus und rechne nochmal.

Jup verstanden, danke sehr

von Axel S. (a-za-z0-9)


Lesenswert?

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

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.