Forum: Analoge Elektronik und Schaltungstechnik transistor schalten mit AT89C2051


von Carsten (Gast)


Lesenswert?

Hallo,
ich hab mal ne dumme frage, ich möchte gerne mit einem AT89C2051
einen NPN Transistor schalten weiß aber nicht wie, da der Atmel ja mit

0 schaltet und der Strom, des Controller bei 1 den Ausgang verlässt ja
nicht besonders hoch ist. ( ist mein ersten Atmel projekt)


danke schon mal

Carsten

von Benedikt (Gast)


Lesenswert?

Was für ein Transistor ? Was hängt an dem dran (LED, 100W Motor usw.) ?

von Rahul (Gast)


Lesenswert?

"Mikrocontroller Kochbuch" von Andreas Roth...
Normalerweise nimmt man einen Vorwiderstand mit 1000 Ohm, verbindet die
eine Seite mit der Basis eines NPN-Transistors (zB. BC548), die andere
mit dem Ausgang des Mikrocontrollers. Den Emitter des Transistors legt
man auf Masse, an den Kollektor wird der Verbraucher angeschlossen, und
auf der anderen Seite des Verbrauchers wird der postive Pol der
Versorgung angeschlossen.
Wo ist da ds Problem?

Wieso werden hier eigetlich immer diese Pippifax-Grundlagen gefragt?
Gruß Rahul

von edi.edi (Gast)


Lesenswert?

hi Rahul,

wenn du schon entruestet ueber die pippimaxfragen humpelst,warum dann
nicht gleich den 1000 ohm widerstand weglassen.....wie bei Roth
gezeigt?

ich wuerde eher den freund darauf aufmerksam machen,dass er beim
einschalten des MC sofort einen durchgeschalteten transistor hat!
...also darueber nachdenken ob nicht etwa ein zweiter TR sinnvoll
ist....oder PNP einsetzen....

ciao
ed

von Sebastian (Gast)


Lesenswert?

> wenn du schon entruestet ueber die pippimaxfragen humpelst,warum
> dann nicht gleich den 1000 ohm widerstand weglassen.....

Weil es ein Schutz für deinen µC ist? Wenn einmal 2A aus deinem Portpin
geflossen sind, weisst du, dass sich die Investition eines
2-Cent-Widerstandes lohnt. ;-)

von crazy horse (Gast)


Lesenswert?

bleibt das Problem, dass der 2051 wie alle 8051er keinen nenenswerten
Strom bei H-Pegel liefern können. Für eine LED oder ein kleines Relais
reicht der Basisstrom aus, für grössere Lasten aber nicht, es sei denn,
man nimmt einen Darlington-Transistor (womit man sich allerdings wieder
andere Nachteile einhandelt).
Lösungsmöglichkeiten:
-pnp-Transistor nehmen und mit L-Pegel einschalten (geht aber nur, wenn
die Last an der gleichen Spannung wie der MC betrieben wird)
-2stufiges Design
-bei kleinen Schaltfreqenzen logic-level-Mosefet
-fertige Treiberbausteine, möglichst mit L-aktivem Eingang, UDN2595 ist
dafür ideal, hatte ich mal auf einer Motorsteuerkarte.

Wird mit H-Pegel eingeschaltet, sind meist zusätzliche Massnahmen
erforderlich, um das Einschalten aller Ausgänge im Reset-Zustand zu
verhindern.

Insofern ist die Frage durchaus nicht pille-palle.

von BKD (Gast)


Lesenswert?

Hallo ,

ohne Vorwiderstand und einfach an die basis nen Pullup von 2k2-4k7

von Sascha K. (sascha2)


Lesenswert?

Hallo,

Ich greife dieses Thema noch mal auf, da ich an 6 Ausgängen jeweils 2 
LEDs betreiben möchte (bis zu 6 LEDs an 3 Ausgängen wären gleichzeitig 
aktiv).

Gibt es eine Alternative zum UDN2595, da dieser scheinbar nur noch bei 
Ebay in China erhältlich ist? Das Problem ist der relativ niedrige 
H-Pegel des AT89C2051. Es sollte auch ein invertierender Chip sein, da 
sonst alle LEDs bei Reset kurz aufleuchten würden.

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Sascha K. schrieb:
> Das Problem ist der relativ niedrige
> H-Pegel des AT89C2051.

Der Pegel des 89C2051 ist nicht niedrig, sondern bricht nur bei 
Belastung etwas mehr ein als ein echter Push-Pull Ausgang. Das Problem 
kann man aber mit externen Pullups recht leicht lösen, denn 'pulldown' 
kann der MC gut.

Sascha K. schrieb:
> Es sollte auch ein invertierender Chip sein, da
> sonst alle LEDs bei Reset kurz aufleuchten würden.
Der UDN2595 ist aber nun ausgerechnet ein nicht-invertierender Treiber. 
Wenn du einen invertierenden haben möchtest, bieten sich, abgesehen von 
der Darlington Endstufe und der minimal anderen Pinbelegung z.B. der 
ULN2003 oder der ULN2803 an.

von Peter D. (peda)


Lesenswert?

Der neuere AT89LP2052 kann auch high treiben.

von Michael B. (laberkopp)


Lesenswert?

Carsten schrieb:
> Hallo,
> ich hab mal ne dumme frage, ich möchte gerne mit einem AT89C2051
> einen NPN Transistor schalten weiß aber nicht wie, da der Atmel ja mit
>
> 0 schaltet und der Strom, des Controller bei 1 den Ausgang verlässt ja
> nicht besonders hoch ist. ( ist mein ersten Atmel projekt)
>
> danke schon mal
>
> Carsten

Ja, der AT89C2051 ist als 8051-Derivat blöd.

Eigentlich
1
    VCC
2
     |
3
    1k  Last
4
     |   |
5
uC---+--|< NPN
6
         |E
7
        GND
aber dann wird der Transistor auch beim Einschalten der 
Versorgungsspannung des uC eingeschaltet und erst ausgeschaltet, wenn 
man den uC-Ausgang auf LOW setzt. Das stört oft.

Sauberer ist (eingeschaltet wird bei LOW)
1
         VCC
2
          |E
3
uC--4k7--|< PNP
4
          |   
5
         1k  Last
6
          |   |
7
          +--|< NPN
8
          |   |E
9
         10k  |
10
          |   |
11
         GND GND
aber das ist natürlich aufwändger. Also doch besser gleich mit dem PNP 
schalten. Die meisten Leute lieben es ja auch, plus zu schalten und 
bekommen bei NPN eher Gedankenprobleme.
1
        VCC
2
         |E
3
uC--1k--|< PNP
4
         |   
5
        Last

: Bearbeitet durch User
von Sascha K. (sascha2)


Lesenswert?

Vielen Dank schon mal bis hier hin.

Matthias S. schrieb:
> Der UDN2595 ist aber nun ausgerechnet ein nicht-invertierender Treiber.
> Wenn du einen invertierenden haben möchtest, bieten sich, abgesehen von
> der Darlington Endstufe und der minimal anderen Pinbelegung z.B. der
> ULN2003 oder der ULN2803 an.

Ich habe bei Reichelt einen ULN 2003 A gefunden. Kann man den auch 
verwenden?

Ich verstehe die Schaltung noch nicht ganz. Wenn der 
Microcontrollerausgang auf 1 steht, sollten die beiden NPN-Transitoren 
im IC doch schalten? D.h. wenn ich zwischen Out und + der Stromquelle 
die LEDs anschließe, sind sie immer dann an, wenn der Ausgang des 
Microcontrollers auf 1 steht. Vielleicht habe ich den Begriff 
"invertierend" falsch verwendet. Ich meine damit, dass die LEDs dann an 
sind, wenn am Microcontrollerausgang 0 geschaltet ist.

Wozu ist Pin 9, der mit allen Ausgängen über eine Diode verbunden ist? 
Wenn man dort + anschließen würde, dann würden die Dioden sperren und 
bei - wären die LEDs am Ausgang immer an.

von Michael B. (laberkopp)


Lesenswert?

Sascha K. schrieb:
> Ich habe bei Reichelt einen ULN 2003 A gefunden. Kann man den auch
> verwenden?

Die pull up des AT89C2051 liefern nur 80uA, alle ULN2003,2003A,2803 
wollen aber 0.5mA haben. Alle sind also nicht ohne Sondermassnahme 
brauchbar.

Damit das funktioniert, muss ein zusätzlicher pull up Widerstand an 
jeden Ausgang
1
            +5V              +5V
2
             |                |
3
            4k7              100R
4
             |           LED  |
5
uC-Ausagng --+--ULN2x03--|<|--+
mit dem Nachteil, daß der ULN die LEDs erst mal einschaltet, bis der uC 
den Ausgang auf 0 setzt.

> Ich verstehe die Schaltung noch nicht ganz. Wenn der
> Microcontrollerausgang auf 1 steht, sollten die beiden NPN-Transitoren
> im IC doch schalten? D.h. wenn ich zwischen Out und + der Stromquelle
> die LEDs anschließe, sind sie immer dann an, wenn der Ausgang des
> Microcontrollers auf 1 steht.

So wäre es, wenn der uC genug Strom liefern könnte, wie es ein AVR tun 
würde, oder eben wenn der externe pull up spendiert wird.

> Vielleicht habe ich den Begriff
> "invertierend" falsch verwendet. Ich meine damit, dass die LEDs dann an
> sind, wenn am Microcontrollerausgang 0 geschaltet ist.

Da der ULN2x03 noch mal invertiert, sind die LEDs an, wenn der 
uC-Ausgang auf 1 steht, also ein Eingang ist, obwohl die LEDs mit + 
verbunden sind.

> Wozu ist Pin 9, der mit allen Ausgängen über eine Diode verbunden ist?

Für induktive Lasten. Darf bei LEDs offen bleiben.

> Wenn man dort + anschließen würde, dann würden die Dioden sperren

Richtig.

> und bei - wären die LEDs am Ausgang immer an.

Richtig. Lamp test :-)

von Sascha K. (sascha2)


Lesenswert?

Hallo Michael,

vielen Dank für die ausführliche Antwort,

Michael B. schrieb:

> Die pull up des AT89C2051 liefern nur 80uA, alle ULN2003,2003A,2803
> wollen aber 0.5mA haben. Alle sind also nicht ohne Sondermassnahme
> brauchbar.
>
> Damit das funktioniert, muss ein zusätzlicher pull up Widerstand an
> jeden Ausgang
>
1
>             +5V              +5V
2
>              |                |
3
>             4k7              100R
4
>              |           LED  |
5
> uC-Ausagng --+--ULN2x03--|<|--+
6
>
> mit dem Nachteil, daß der ULN die LEDs erst mal einschaltet, bis der uC
> den Ausgang auf 0 setzt.
Ok diesen Effekt wollte ich eigentlich verhindern, indem ich bei 0 
schalte.

> Da der ULN2x03 noch mal invertiert, sind die LEDs an, wenn der
> uC-Ausgang auf 1 steht, also ein Eingang ist, obwohl die LEDs mit +
> verbunden sind.
Ich habe das bisher so verstanden, dass die Ausgänge nach dem Reset alle 
auf 1 gesetzt sind (also eine Spannung anliegt) und bei 0 Masse anliegt. 
Ich verstehe noch nicht ganz, warum der Ausgang bei 1 ein Eingang ist.

Würde der Ausgang nicht durch den Widerstand geschaltet?

von MaWin (Gast)


Lesenswert?

Sascha K. schrieb:
> Ich verstehe noch nicht ganz, warum der Ausgang bei 1 ein Eingang ist.

Weil ein 51er seine Pins gar nicht zwischen Ein- und Ausgang umscgalten 
kann. Ist es wirklich unzumutbar, sich das Datrnbkatt von dem IC den man 
verwendet virher mal durchzulesen ?

Entweder der Pin ist über einen hochohmigen internen Pull Up mit 5V 
verbunden, also HIGH und kann extern für LOW auf Masse gezogen werden, 
oder intern schaltet ihn ein Transistor an Masse, dann ist er ein 
Ausgang auf LOW.

Sascha K. schrieb:
> Ok diesen Effekt wollte ich eigentlich verhindern

Daher wurden bereits sinnvollere Schaltungen gezeigt, die du aber 
ignorierst.

von Sascha K. (sascha2)


Lesenswert?

MaWin schrieb:
> Sascha K. schrieb:
>> Ich verstehe noch nicht ganz, warum der Ausgang bei 1 ein Eingang ist.
>
> Weil ein 51er seine Pins gar nicht zwischen Ein- und Ausgang umscgalten
> kann. Ist es wirklich unzumutbar, sich das Datrnbkatt von dem IC den man
> verwendet virher mal durchzulesen ?
Nein das ist nicht unzumutbar. Es ist auch klar, dass es keine 
Umschaltung gibt. Das steht ja bidirektional und dass Pin P1.0 und P1.1 
einen externen Pullup benötigt.
> Entweder der Pin ist über einen hochohmigen internen Pull Up mit 5V
> verbunden, also HIGH und kann extern für LOW auf Masse gezogen werden,
> oder intern schaltet ihn ein Transistor an Masse, dann ist er ein
> Ausgang auf LOW.
Ok danke verstanden.

>> Ok diesen Effekt wollte ich eigentlich verhindern
> Daher wurden bereits sinnvollere Schaltungen gezeigt, die du aber
> ignorierst.
Nein ich habe ja diesen etwas ältere Thema wieder aufgegriffen, weil ich 
einen Chip suche.

Die Lösung von Carsten genau das, was ich suche:

         VCC
          |E
uC--4k7--|< PNP
          |
         1k  Last
          |   |
          +--|< NPN
          |   |E
         10k  |
          |   |
         GND GND

Da ich 6 Ausgänge benötige möchte ich ungern 12 Transistoren und 18 
Widerstände verbauen, bevor ich nicht ausgeschlossen habe, das es sowas 
als Chip gibt ;-).

Wie gesagt, habe ich den Begriff invertierend falsch verwendet. Der 
UDN2595, der vorgeschlagen wurde, schaltet ein, wenn am Eingang Low 
anliegt. Im Wesentlichen entspricht er Carstens Schaltung. Leider habe 
ich den Chip nur noch bei Ebay in China gefunden.

von Peter D. (peda)


Lesenswert?

Warum nimmst Du nicht einfach den AT89LP2052?
Der kann 10mA high treiben (Port in Push-Pull Output Mode).

von Michael B. (laberkopp)


Lesenswert?

Peter D. schrieb:
> Warum nimmst Du nicht einfach den AT89LP2052?

...oder AVR.

Weil ein 51er letztlich sogar einfacher ist, denn er hat schon einen 
eingebauten dauernd aktiven pull up.

So braucht man beim MOSFET keinen externen 100k pull down, wie er sonst 
beim AVR nötig ist um den MOSFET nach RESET sicher aus zu halten weil 
der Pin ja zu Beginn auf Eingang geschaltet ist.

Das einzige Problem beim 51er: Man darf nicht nur borniert am NPN 
festhalten und PNP als Teufelswerk einer längst vergangenen 
Germaniumgeneration abtun.

Mit einem LogicLevel P MOSFET wie FDS6975 kann man sogar 12V Lasten 
schalten, OHNE der pull down und trotzdem bleibt der Verbraucher nach 
einem RESET aus.
1
+5V -+---+
2
     |S  |
3
51--|I   | +
4
     |  12V
5
    Last | -
6
     |   |
7
     +---+
Man muss halt bloss etwas flexibel denken können in der Birne. Andere 
kaufen einen AT89C2052.

von Sascha K. (sascha2)


Lesenswert?

Klingt interessant. Da muss ich mal schauen, ob ich einen LogicLevel P 
MOSFET als nicht SMD finde. Schalten möchte ich jedoch nur 2 LEDs pro 
Ausgang, da sind 12V nicht nötig.

Ich habe zwar früher meistens mit NPN-Transistoren experimentiert, aber 
warum sollen denn PNP-Transitoren Teufelswerks sein ;-). Gerade hier 
macht das doch Sinn.

Was ist denn der Unterschied zwischen den beiden Lösungen?

> Sauberer ist (eingeschaltet wird bei LOW)
1
          VCC
2
           |E
3
 uC--4k7--|< PNP
4
           |
5
          1k  Last
6
           |   |
7
           +--|< NPN
8
           |   |E
9
          10k  |
10
           |   |
11
          GND GND
> aber das ist natürlich aufwändger. Also doch besser gleich mit dem PNP
> schalten. Die meisten Leute lieben es ja auch, plus zu schalten und
> bekommen bei NPN eher Gedankenprobleme.
1
         VCC
2
          |E
3
 uC--1k--|< PNP
4
          |
5
         Last

Was könnte man hier für Transitortypen verwenden? Ich werde 
wahrscheinlich pro Ausgang je 2 LEDs mit Vorwiderstand für 5V parallel 
schalten. Eine LED braucht 13mA laut Reichelt.

Am Wochenende werde ich die ganze Schaltung mal zeichnen.

Ich möchte in diesem Fall gerne den AT89C2051 verbauen ;-). Da gibt es 
jedoch keine logische Erklärung für :-).

: Bearbeitet durch User
von MaWin (Gast)


Lesenswert?

Sascha K. schrieb:
> Was ist denn der Unterschied zwischen den beiden Lösungen?

Die eine ist einfacher als die andere.

Beide schalte die LED bei 0 ein.

Sascha K. schrieb:
> Was könnte man hier für Transitortypen verwenden? Ich werde
> wahrscheinlich pro Ausgang je 2 LEDs mit Vorwiderstand für 5V parallel
> schalten. Eine LED braucht 13mA laut Reichelt.

BC557, BC857

von Sascha K. (sascha2)


Angehängte Dateien:

Lesenswert?

Ich habe die Schaltung mal gezeichnet (meine erste Zeichnung mit Target 
3001). Die Vorwiderstände zu den LEDs haben keinen Wert, weil ich da 
LEDs mit Vorwiderstand für 5V verwenden möchte. Ausgang P1.0 und P1.1 
habe ich übersprungen, weil diese Ausgänge laut Datenblatt externe 
Pull-Up-Widerstände benötigen. Als Stromquelle ist ein 9V Block oder 
Netzteil vorgesehen.

Die Frage wäre noch, ob 1K-Ohm vor der Basis der Transistoren ausreicht?

von Route_66 H. (route_66)


Lesenswert?

Hallo!
Ich setze bei den 8051ern immer, ohne groß zu überlegen, ein 8x10k 
Widerstandsarray an den Port1. Nur in den Fällen, wo ich den Komparator 
benötige, ist das anders.

Sascha K. schrieb:
> Die Frage wäre noch, ob 1K-Ohm vor der Basis der Transistoren ausreicht?

Funktioniert.

von Michael B. (laberkopp)


Lesenswert?

Sascha K. schrieb:
> Ausgang P1.0 und P1.1
> habe ich übersprungen, weil diese Ausgänge laut Datenblatt externe
> Pull-Up-Widerstände benötigen.

Vernünftig.

> Als Stromquelle ist ein 9V Block oder Netzteil vorgesehen.

Ein 9V Block liefert aber keine 9V, sondern nur wenn er randvoll ist, 
sonst geht es herunter bis 5.4V (Entladung mit Kapazität laut 
Datzenblatt). Dafür taugt ein 7805 nicht, der will mindestens 7.5V 
sehen, nimm einen low drop Regler.

> Die Frage wäre noch, ob 1K-Ohm vor der Basis der Transistoren ausreicht?

Macht 4.3mA Basisstrom, bei üblichen 1:10 bis 1:20 Stromverstärkung im 
gesättigten Schaltbetreib kann man damit also 86mA (100mA) schalten. 
Wenn du nicht so viel schalten willst, kannst du den Ansteuerstrom 
kleiner machen, bei 20mA z.B. 4k3 (oder 4k7).

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


Lesenswert?

Sascha K. schrieb:
> schaltung.png

Das sollte klappen, du darfst aber nicht vergessen, Abblockkondensatoren 
vor und hinter den 3-Bein Regler zu schalten. Ausserdem sollte dicht am 
MC ein C mit etwa 100nF-470nF die Versorgung abblocken (also von Vcc 
nach GND).
Da du LED hart schaltest, könnte es evtl. sinnvoll werden, in die 
Versorgung zu denen eine Drossel und nochmal ein Abblock-C zu legen. Das 
wäre in die Leitung zu den Emittern der BC557. Zugegeben, ich liebe 
Drosseln...

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Sascha K. schrieb:
> Die Frage wäre noch, ob 1K-Ohm vor der Basis der Transistoren ausreicht?

Völlig übersteuert. Der BC557C hat eine Verstärkung <400.
10k reichen dicke aus.

von Sascha K. (sascha2)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die Hinweise.

Matthias S. schrieb:
> Das sollte klappen, du darfst aber nicht vergessen, Abblockkondensatoren
> vor und hinter den 3-Bein Regler zu schalten. Ausserdem sollte dicht am
> MC ein C mit etwa 100nF-470nF die Versorgung abblocken (also von Vcc
> nach GND).
Die Kondensatoren habe ich eingeplant. (Für den 470nF und 330nF 
Tantal-Kondensatoren. Ich hoffe die passen.)

> Da du LED hart schaltest, könnte es evtl. sinnvoll werden, in die
> Versorgung zu denen eine Drossel und nochmal ein Abblock-C zu legen. Das
> wäre in die Leitung zu den Emittern der BC557. Zugegeben, ich liebe
> Drosseln...
Wie würde man Drossel und Kondensator schalten und welche Werte sind da 
sinnvoll? Einmal zwischen + und alle Emitter?

Bezüglich des Transistors und des Vorwiderstandes bin ich mir noch 
unsicher, da es verschiedene Aussagen gibt. Schalten möchte ich etwa 
26mA (2 x 13mA LED).  Sollte man besser den BC557C anstatt BC557A 
verwenden? Der hat ja eine höhere Verstärkungsleistung (DC Current Gain 
ist die Verstärkungsleistung?)

Danke für den Tipp mit dem Low Drop Spannungsregler. Ich habe einen 
einen LM 1117 T5,0 gefunden. Dann sollten die Abblockkondensatoren 
jedoch 10 µF laut Datenblatt betragen. Ich muß morgen noch einmal 
genauer ins das Datenblatt schauen.

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.