Leistungsproblem am Pin

OP #4998731
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
OP #4998763
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).
#4999032
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.
Gast #4999048
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.
#4999106
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren