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
Dann machst du was falsch. Was genau ist mangels Info nicht erkennbar, höchstens zu erraten.
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
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); |
zunächst den Pin mit
1 | DDRC &= ~( ( 0 << PC5 ) ); |
als Ausgang setzen und dann mit
1 | PORTC |= (1<<PC5); |
den Pin auf high setzen.
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.
wenn ich mich nicht irre bedeutet eine "1" im DDR-Register -> Ausgang!
JAAAAAAAAA Ich habs selber rausgefunden: muss den Pin mit
1 | DDRC = ( 1 << PC5 ); |
zum Ausgang machen! Ich bin aber auch ein Dödel
Damit setzt du Ihn aber auf Eingang. ;) DDRC |= _BV(PC5) Bit=1 == Ausgang Bit=0 == Eingang
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...
>> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.