Forum: Mikrocontroller und Digitale Elektronik ATMEGA8: nur 1,7 V am Outputpin?


von Peter (Gast)


Lesenswert?

Hallo!

Ich habe einen ATMEGA8 in einen Schaltkreis gelötet und wollte einige 
Tests damit machen.
Die LED's die ich ansteuern wollte waren allerdings nur ganz schwach am 
glimmen, daher habe ich mal nachgemessen was der PIN den eigentlich 
rausgibt und habe mit entsetzen am Messgerät ungefähr 1,7V bis 1,8 V 
abgelesen, an einem anderen PIN sogar nur 1,4V.

Der mC ist richtig beschaltet in Hinsicht auf Stromzufuhr etc. Zwischen 
VCC und GND sowie zwischen AVCC und AGND ist jeweils ein 100nF 
Kondensator, es gehen ziemlich genau 5V in den mC.

Da ich zum Ersten mal mit einem mC arbeite bin ich ratlos und möchte 
euch um Hilfe bzw. Ratschläge bitte.

Peter

von (prx) A. K. (prx)


Lesenswert?

Dann machst du was falsch. Was genau ist mangels Info nicht erkennbar, 
höchstens zu erraten.

von Marcus M. (marcus67)


Lesenswert?

Ich würde drauf tippen, daß die Portpins nicht als Ausgang definiert 
sind. Dann aktiviert er nur die Pullups über den Ausgang und mißt am Pin 
die Durchlassspannung der LEDs. Da passen dann die 1,4 - 1,8V je nach 
Farbe.

Gruß, Marcus

von Peter (Gast)


Lesenswert?

So...

hier ist mein Code, mit dem ich den Pin als Ausgangs setze und den Strom 
"anschalte":
1
  DDRC &= ~( ( 0 << PC5 ) );
2
  PORTC |= (1<<PC5);

von Peter (Gast)


Lesenswert?

zunächst den Pin mit
1
DDRC &= ~( ( 0 << PC5 ) );
 als Ausgang setzen und dann mit
1
PORTC |= (1<<PC5);
 den Pin auf high setzen.

von (prx) A. K. (prx)


Lesenswert?

DDR: 1=Ausgang 0=Eingang. Nur PICs arbeiten andersrum.

Wie vermutet betreibst du die LEDs mit dem schwachen Pullup eines 
Eingangs. Der gibt nicht viel her.

von Z8 (Gast)


Lesenswert?

wenn ich mich nicht irre bedeutet eine "1" im DDR-Register -> Ausgang!

von Peter (Gast)


Lesenswert?

JAAAAAAAAA

Ich habs selber rausgefunden:
muss den Pin mit
1
DDRC = ( 1 << PC5 );
 zum Ausgang machen!
Ich bin aber auch ein Dödel

von Nico (Gast)


Lesenswert?

Damit setzt du Ihn aber auf Eingang. ;)

DDRC |= _BV(PC5)

Bit=1 == Ausgang
Bit=0 == Eingang

von Justus S. (jussa)


Lesenswert?

€ nix

von Peter (Gast)


Lesenswert?

Danke

von Johannes M. (johnny-m)


Lesenswert?

Nico wrote:
> Damit setzt du Ihn aber auf Eingang. ;)
Nein, das stimmt so!

> DDRC |= _BV(PC5)
Das macht exakt das selbe wie
> DDRC = ( 1 << PC5 );
außer, dass Du ne ODER-Verknüpfung drin hast, wodurch die anderen Pins 
am Port unberührt bleiben...

Solltest Dir bei Gelegenheit mal die Definition von _BV anschauen...

@Peter:
Artikel Bitmanipulation ist hilfreich...

von Nico (Gast)


Lesenswert?

>> Damit setzt du Ihn aber auf Eingang. ;)
> Nein, das stimmt so!

>> DDRC |= _BV(PC5)
> Das macht exakt das selbe wie
>> DDRC = ( 1 << PC5 );
> außer, dass Du ne ODER-Verknüpfung drin hast, wodurch die anderen Pins
> am Port unberührt bleiben...

Ich bezog mich auch auf seinen vorherigen Code, hab leider nicht 
gequoted.

und was hat das mit _BV zu tun?

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.