Guten Morgen liebe Gemeinde, Habe eine LED von +5 über einen PNP Transistor an den uC angeschlossen (Basis über Widerstand auf PORTB0). Das DDR-Bit 0 von PORTB ist auf 1 und PORTB0 ist auf 0 gesetzt. Wenn ich nun mit einem Multimeter die Spannung am PORTB0 messe liegen da trotzdem noch 2.95 Volt an. Irgendwelche Hinweise, warum dies so sein könnte? Besten Dank im Voraus
Pascal E. schrieb: > Basis über Widerstand Wie groß ist der Widerstand denn? Und hat die LED auch einen Vorwiderstand? Mal doch kurz ein Schema und zeig uns das.
Ist doch klar, Du hast mit deinem DMM mit Ri = ? eine Strompfand von Vcc zu GND ermöglicht und misst die LED und die B-E Spannung des PNP Transistors.
Ist es absicht dass du da einen pnp Transistor verwendest? Wenn ja, aus welchem Grund?
Zwei Möglichkeiten: - Am falschen Pin gemessen oder - Das Programm ist anders als von dir gedacht (zeig doch mal den Code).
Uwe S. schrieb: > Du hast mit deinem DMM mit Ri = ? eine Strompfand von Vcc zu GND > ermöglicht und misst die LED und die B-E Spannung des PNP Transistors. Deshalb muss der Port-Pin dennoch auf etwa GND gehen.
Uwe S. schrieb: > Ist doch klar, > > Du hast mit deinem DMM mit Ri = ? eine Strompfand von Vcc zu GND > ermöglicht und misst die LED und die B-E Spannung des PNP Transistors. Dass ich mit dem DMM in die Schaltung eingreife ist mir bewusst. Wenn ich jedoch testweise den DDRB0 auf 0 setze und dann PORTB0 hart auf Masse ziehe funktioniert das ganze wie gewollt. Meine Frage ist dementsprechend, warum zieht der Attiny PORTB nicht vollständig auf Masse (resp. 0.2V laut Datenblatt)? Zur Frage warum kein NPN: Die anderen beiden LED's werden auch über eine Sink (anderer Baustein) angesprochen. Dort funktioniert das ganze wunderbar. Weil ich dort auch zwei PNP's gebraucht habe, wollte ich gleich auf der PNP-Schiene bleiben. Kann dann eine Position bei der Bestellung einsparen :-)
Georg G. schrieb: > Deshalb muss der Port-Pin dennoch auf etwa GND gehen. Genau das dachte ich mir auch. Wurde am richtigen Pin gemessen. Und testhalber hab ich mein Programm extrem gekürzt :-) int main(void) { DDRB |= (1<<DDB0); while(1) { //TODO:: Please write your application code } }
demacus schrieb: > Das macht Sinn... > > Deine pullups sind alle aus? Pullups wirken doch nur, wenn der PIN als Input definiert wurde?
Hallo, und nun fehlt noch die Anweisung mit PORTB = PORTB & ~(1<<DB0); .. auf LOW gesetzt wird.
Uwe S. schrieb: > Hallo, > > und nun fehlt noch die Anweisung mit PORTB = PORTB & ~(1<<DB0); .. auf > LOW gesetzt wird. PORTB0 ist standartmässig auf Low, wenn das Register DDRB0 nach einem Reset gesetzt wird.
Karl Heinz Buchegger schrieb: > Auf welcher Seite des R33 misst du? PORTB0 gegen Masse, aber das mit dem Messen ist ja eigentlich egal. Fakt ist, dass der uC den Pin nicht auf +/- Masse bringt. Hab das Ding sogar ersetzt, da der Alte mal einer Minus-VCC Spannung ausgesetzt war.
Pascal E. schrieb: > Pullups wirken doch nur, wenn der PIN als Input definiert wurde? Ich hatte vor kurzem ein ähnliches Problem mit einem tiny24, da hat es geholfen Daten- und Portregister komplett zu setzen.
So liebe Gemeinde, ich danke euch für die zahlreichen Tipps und Überlegungen. Weil es ja wirklich ein sehr komisches Problem war, schaute ich nochmals auf die Hardware. Und siehe da. Da wurde bei der GND-Fläche das uC-Ground nicht migeroutet. Erklärt ja wohl alles. GND verbunden und alles Friede, Freude Eierkuchen. Euch allen einen sonnigen Tag!
Pascal E. schrieb: > PORTB0 ist standartmässig auf Low, wenn das Register DDRB0 nach einem > Reset gesetzt wird. Was hälst du (nur probehalber) von Gürtel plus Hosenträger? Und nur der Vollständigkeit halber: Als Takt verwendest du den internen RC-Oszillator und hast auch die Fuses entsprechend gesetzt?
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.