Forum: Mikrocontroller und Digitale Elektronik Leistungsproblem am Pin


von Lukas D. (lukdi)


Lesenswert?

Hallo,

ich habe einen ATmega168 und will, weil ich es kann, alle Pins des Port 
D blinken lassen. Habe den µC dementsprechend eingestellt, alles gut. 
LED's hab ich aber nur an PD6 und PD7 angeschlossen, aus bequemlichkeit. 
Wenn ich das Programm laufen lasse leuchtet PD7 um einiges schwächer als 
PD6????!!! Habe als ersten Schritt die PD7-LED an PD5 angeschlossen und 
PD6 gelassen wie er/sie/es:-) ist. Resultat: LED's leuten gleich hell!
Hat der µC einen Defekt oder gibt es dafür eine Erklärung?
Über etwaige Erfahrungsberichte wäre ich dankbar!

Grüße,
Luaks

von Fabian (Gast)


Lesenswert?

Wieviel Strom entnimmst Du dem Pin? Wie groß ist dein Vorwiderstand?

von >_ pr0 (Gast)


Lesenswert?

Würd auch mal gern Pins zum leuchten bringen..

von Harald W. (wilhelms)


Lesenswert?

>_ pr0 schrieb:

> Würd auch mal gern Pins zum leuchten bringen..

Mit entsprechend grossem Strom ist das kein Problem.
Allerdings funktioniert das nur kurze Zeit.

von Lukas D. (lukdi)


Lesenswert?

Habe die Baugleichen LED's verwendet und jeweils 1K vorgeschaltet. Strom 
am PD5/6 beträgt 2,5mA. Am PD7 messe ich mitlerweile gar nichts mehr. 
Scheint so als ob sich PD7 langsam aber stetig verabschiedet hat! Die 
frage ist nur warum?

von H.Joachim S. (crazyhorse)


Lesenswert?

Lukas D. schrieb:
> und will, weil ich es kann, alle Pins des Port
> D blinken lassen. Habe den µC dementsprechend eingestellt,

Dann zeig mal, was du so gekonnt hast.
Und wie du den MC "eingestellt" hast.

von Lukas D. (lukdi)


Lesenswert?

// Pin configuration
  DDRD = 0b1111111;
  PORTD = 0b1111111;
Mit DDRD gebe ich die Richtung vor --> Output!
Mit PORTD setze ich alle D-Pins auf high.

Das steht dazu im Datenblatt:

Each port pin consists of three register bits: DDxn, PORTxn, and PINxn. 
As shown in “Register description” on page 87, the DDxn bits are 
accessed at the DDRx I/O address, the PORTxn bits at the PORTx I/O 
address, and the PINxn bits at the PINx I/O address.
The DDxn bit in the DDRx Register selects the direction of this pin. If 
DDxn is written logic one, Pxn is configured as an output pin. If DDxn 
is written logic zero, Pxn is configured as an input
pin.
If PORTxn is written logic one when the pin is configured as an input 
pin, the pull-up resistor is activated. To switch the pull-up resistor 
off, PORTxn has to be written logic zero or the pin has to be configured 
as an output pin. The port pins are tri-stated when reset condition 
becomes active, even if no clocks are running.
If PORTxn is written logic one when the pin is configured as an output 
pin, the port pin is driven high (one). If PORTxn is written logic zero 
when the pin is configured as an output pin, the port pin is driven low 
(zero).

von H.Joachim S. (crazyhorse)


Lesenswert?

Ich habs geahnt...
Zähle nochmal die Einsen und erkenne gleichzeitig den Nachteil dieser 
Schreibweise :-)

von Lukas D. (lukdi)


Lesenswert?

Dankeschön! Dem Anfänger sei's verziehen!

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Sich selber verzeihen ist zumindest ein Anfang :)

Als Erklärung für die nachfolgenden Leser:
Die Bitangabe zu DDRD und PortD wurden nur 7-stellig eingetragen.
Somit ist der höchste Pin am Port D immer noch ein IN (da Dessen 
DDRD-Bit immer noch auf 0 steht).
Wenn nun im Programm PortD zwischen 0 und 255 wechselt (alle Bits 0 und 
alle Bits 1), werden bei den Bits 0-6 die Ausgnänge auf High/Low 
geschaltet, bei Bit7 aber 'nur' der PullUp ein/ausgeschaltet.
Das erhöht zwar auch die Spannung, aber der mögliche Strom ist um 
Einiges geringer (meine, 50k wäre der PullUp).
Somit haben die LEDs an PD0-PD6 1kΩ und PD7 51kΩ Vorwiderstand - die LED 
an PD7 ist dabei (deutlich) dunkler.

MfG

PS: Ich sehe gerade bei der Binären Eingabe den Vorteil, daß man die 
'Bitposition' recht genau ersehen kann.
Klar ist Das bei 0 und 255 eher unwichtig, bei anderen Mustern aber 
durchaus sinnvoll.

von a.s (Gast)


Lesenswert?

Patrick J. schrieb:
> bei anderen Mustern aber durchaus sinnvoll

aber auch nur für Anfänger, einfach weil mehr als 5 Stellen keiner mehr 
erfasst. In Hex sollte man irgendwann die Einzel-Bits (1,2,4,8) und 
Füllbits (1,3,7,f) kennen, den (seltenen) Rest mach man mit seiner 
favorisierten Bitrepräsentation, z.B. (ohne persönliche Wertung):

a) BIT0   | BIT7
b) (1<<0) | (1<<7)
c) BIT(1) | BIT(7)
d) BITS_2(0,7)
e) XY.bit0 = 1; XY.bit7 =1;
f) X______X

f ähnelt der b-Schreibweise zur scheinbar und wird häufig für 
Grafikelemente (z.B. Character-Fonts) verwendet. Der Vorteil gegenüber 
b10000001 ist die fixe Große (den Fehler des UP hätten Compiler/Linker 
angezeigt) und die besserer Visualisierung im Quelltext.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Hatte hier einen Leidgenossen getroffen, Der, ähnlich wie ich auch, bei 
'c' und 'd' so Seine Probleme hatte.
Null bis 'B' gehen leicht von der Hand und von Oben 'F' bis 'E' ist auch 
nicht schwer.
Bei C und D musste ich bisher immer 'zählen'.

Jedes Nibble repräsentiert ja eine Hex-Ziffer.
0000 0
...
1001 9
1010 A
1011 B
1100 C (Cwölf ... Zwölf)
1101 D (Dreizehn)
1110 E
1111 F

Dadurch lässt sich recht einfach von Bin <-> Hex 'umrechnen'
0b11011001 - 1101(Dreizehn) 1001(neun) -> D 9 -> 0xD9

0xC8 -> C(Cwölf) 8(acht) -> 1100(zwölf) 1000 -> 0b11001000

MfG

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Letztlich ist es nur eine Frage der Übung und Anwendung. Wenn mir einer 
eine Hexzahl sagt, sehe ich ein Bitmuster... ?

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.