Forum: Mikrocontroller und Digitale Elektronik Attiny44 PORTB0 als sink


von Pascal E. (nimmzwei)


Lesenswert?

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

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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.

von Pascal E. (nimmzwei)


Angehängte Dateien:

Lesenswert?

Anbei der relevante Ausschnitt aus der Beschaltung.

von Uwe (de0508)


Lesenswert?

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.

von demacus (Gast)


Lesenswert?

Ist es absicht dass du da einen pnp Transistor verwendest? Wenn ja, aus 
welchem Grund?

von Georg G. (df2au)


Lesenswert?

Zwei Möglichkeiten:
- Am falschen Pin gemessen oder
- Das Programm ist anders als von dir gedacht (zeig doch mal den Code).

von Georg G. (df2au)


Lesenswert?

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.

von Pascal E. (nimmzwei)


Lesenswert?

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 :-)

von Pascal E. (nimmzwei)


Lesenswert?

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
    }
}

von demacus (Gast)


Lesenswert?

Das macht Sinn...

Deine pullups sind alle aus?

von Pascal E. (nimmzwei)


Lesenswert?

demacus schrieb:
> Das macht Sinn...
>
> Deine pullups sind alle aus?

Pullups wirken doch nur, wenn der PIN als Input definiert wurde?

von Uwe (de0508)


Lesenswert?

Hallo,

und nun fehlt noch die Anweisung mit PORTB = PORTB & ~(1<<DB0); .. auf 
LOW gesetzt wird.

von Karl H. (kbuchegg)


Lesenswert?

Auf welcher Seite des R33 misst du?

von Pascal E. (nimmzwei)


Lesenswert?

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.

von Pascal E. (nimmzwei)


Lesenswert?

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.

von demacus (Gast)


Lesenswert?

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.

von Pascal E. (nimmzwei)


Lesenswert?

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!

von Georg G. (df2au)


Lesenswert?

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
Noch kein Account? Hier anmelden.