• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

Transistoransteuerung mit unterschiedlichen Potentialen

Kappler

Geowizard
Ich plane, für eine Station eine "reaktive 7-Segment-Anzeige" zu verbauen:
Bei Beleuchtung mit der Taschenlampe soll das Reaktivlicht also nicht blinken, sondern auf der Anzeige eine Ziffernfolge anzeigen...

Mir schwebt vor, hierfür eine extragroße Anzeige (100mm Ziffernhöhe) zu verwenden.

Das Problem bei dieser großen Anzeige ist, dass pro Segment intern mehrere LEDs in Serie (und auch parallel) geschaltet sind, womit die Durchflussspannung eines einzelnen Segments 7,4 Volt beträgt.
Zu viel für den Tiny. Den möchte ich auch aus Energiespargründen lediglich mit 3 Volt betreiben.

Ich dachte jetzt daran, eine 9-Volt-Blockbatterie zu zerlegen (6*1,5V) und diese Batterie-Serienschaltung bei 3 Volt zur Tiny-Versorgung anzuzapfen.
Die 9 Volt der gesamten Serienschaltung sollen über einen Transistor auf die Anzeigen-Segmente geschaltet werden (im Bild ist mal nur ein einzelnes Segment dargestellt).

Meine Frage ist nun: Funktioniert das? Oder sind durch die unterschiedlichen Potentiale (3 Volt bzw. 9 Volt) an Basis und Kollektor des Transistors irgendwelche Probleme zu erwarten?

Schaltplan.jpg
 

radioscout

Geoking
Ich nehme an, daß Dein Display eine gemeinsame Kathode hat.
Sonst könntest Du die Transistoren in Emitterschaltung betreiben.
Die Kollectorschaltung ist ein Stromverstärker (Spannungsfolger), das wird AFAIK so nicht funktionieren.
Du mußt PNP-Transistoren verwenden.
 

Dr.Schmock

Geocacher
Kappler schrieb:
Meine Frage ist nun: Funktioniert das? Oder sind durch die unterschiedlichen Potentiale (3 Volt bzw. 9 Volt) an Basis und Kollektor des Transistors irgendwelche Probleme zu erwarten?

Du hast recht, es gibt da Probleme, da der transistor im Status "aus" an Basis und Emitter das gleiche Potential haben muss. Du solltest also in deiner Schaltung die Position von Transistor und LEDs+R verstauschen, also den Transistor gegen GND und den R gegen 9V schalten.

PS: Mal nebenbei: Wie programmierst du den ATTiny24? Ponyprog und andere funktionieren bei dem ja nicht. Hast du den neuen MK2-Programmer? Hab nämlich ein paar Tiny24 voreilig gekauft und bin jetzt am Überlegen, wie ich das machen werde, da ich sonst immer mit LPT-Port und Ponyprog programmiert hab.
 

movie_fan

Geoguru
Jetzt mal so ganz andere Frage...

Wenn die Schaltung mal ne Weile gelaufen ist, dann kann es sein, das die Tiny Batterien etwas schwächer sind und womöglich die Spannung einbricht, wenn die LEDs voll leuchten. Nicht das dir dann dein Tiny ausgeht.
 

thomas_st

Geowizard
Dr.Schmock schrieb:
PS: Mal nebenbei: Wie programmierst du den ATTiny24? Ponyprog und andere funktionieren bei dem ja nicht. Hast du den neuen MK2-Programmer? Hab nämlich ein paar Tiny24 voreilig gekauft und bin jetzt am Überlegen, wie ich das machen werde, da ich sonst immer mit LPT-Port und Ponyprog programmiert hab.
Warum geht das mit Ponyprog nicht? Kennt das den Tiny 24 noch nicht? Würde mich jetzt nicht wundern, da schon älter ist. Aber in diesem Fall könnte man auf die Kommandozeile ausweichen und avrdude nehmen - das kennt den Tiny 24 und eine Vielzahl an Programmern.

Ansonsten frage ich mich gerade, warum ich die Frage des OP mit einer Kombination von PNP und NPN-Transistor lösen wollte, wenn es so einfach ist :???:

Viele Grüße,
Thomas(_st)
 

gomerffm

Geocacher
Kappler schrieb:
Ich plane, für eine Station eine "reaktive 7-Segment-Anzeige" zu verbauen:
Bei Beleuchtung mit der Taschenlampe soll das Reaktivlicht also nicht blinken, sondern auf der Anzeige eine Ziffernfolge anzeigen...

Mir schwebt vor, hierfür eine extragroße Anzeige (100mm Ziffernhöhe) zu verwenden.

Das Problem bei dieser großen Anzeige ist, dass pro Segment intern mehrere LEDs in Serie (und auch parallel) geschaltet sind, womit die Durchflussspannung eines einzelnen Segments 7,4 Volt beträgt.
Zu viel für den Tiny. Den möchte ich auch aus Energiespargründen lediglich mit 3 Volt betreiben.

Ich dachte jetzt daran, eine 9-Volt-Blockbatterie zu zerlegen (6*1,5V) und diese Batterie-Serienschaltung bei 3 Volt zur Tiny-Versorgung anzuzapfen.
Die 9 Volt der gesamten Serienschaltung sollen über einen Transistor auf die Anzeigen-Segmente geschaltet werden (im Bild ist mal nur ein einzelnes Segment dargestellt).

Meine Frage ist nun: Funktioniert das? Oder sind durch die unterschiedlichen Potentiale (3 Volt bzw. 9 Volt) an Basis und Kollektor des Transistors irgendwelche Probleme zu erwarten?

Also grundsätzlich ist die Idee schon umsetzbar.
Kardinalfrage ist: Hat dein Display eine gemeinsame Anode oder eine gemeinsame Kathode.
Der erste Fall ist eindeutig der günstigere. Die Segmente kannst du dann über jeweils einen NPN Transistor (E an Minus, C zum Segment und B über nen Vorwiderstand zum Tiny-Port) schalten.
Bei gemeinsamer Kathode, wirds etwas aufwändiger. Könnte sich überlegen dafür OP-Amps oder Analogschalter?zu verwenden. Möglich wäre natürlich auch pro Segment je eine Treiberstufe aus einen NPN und einem PNP Transistor und erforderlichen Widerständen zu verwenden.
Ein anderes Problem sehe ich in der Verwendung des 9V-Blocks. Jedes Segment nimmt (so wie du die Schaltung gezeichnet hast) bis zu 40 mA auf. Würde, falls der Platz es zulässt, eher eine Stromversorgung aus 6 AAA oder 6 AA Zellen Wählen. Bei Verwendung eines komerziellen Batteriehalters ist dort auch das Anzapfen bei 3V problemlos möglich, vor allem gestaltet sich aber der Batteriewechsel vor Ort deutlich einfacher.

Grüße
gomerffm
 

chrysophylax

Geomaster
Bei gemeinsamer Kathode, wirds etwas aufwändiger. Könnte sich überlegen dafür OP-Amps oder Analogschalter?zu verwenden. Möglich wäre natürlich auch pro Segment je eine Treiberstufe aus einen NPN und einem PNP Transistor und erforderlichen Widerständen zu verwenden.

Ganz so viel Aufwand muß es dann doch nicht sein, man kommt auch mit einem PNP-Transistor und einer Kombi aus 2x Widerstand und 1x Zenerdiode pro Segment hin, aber die Lösung mit der gemeinsamen Anode bleibt definitiv vorzuziehen weil deutlich einfacher zu realisieren.... Die PNP-Lösung hat außerdem den Nachteil temperaturabhäniger Leckströme durch die Clamping-Dioden des Microcontrollers (die dir dann eventuell die Batterie leerlutschen) - also am Besten wirklich die Anzeige mit gemeinsamer Anode nehmen.

chrysophylax.
 
OP
Kappler

Kappler

Geowizard
So, entschuldigung, das ich mich jetzt erst rückmelde...
Zunächst mal Danke für die vielen Antworten. Ich dachte mir schon, dass es nicht ganz so einfach geht...

So wie ich es gezeichnet habe, handelt es sich um eine Anzeige mit gemeinsamer Kathode. Ich dachte, das bei Reichelt so gesehen zu haben...

Jetzt habe ich noch mal nachgeschaut und es gibt diese Anzeige nur mit gemeinsamer Anode. Also wird die Ansteuerung wohl einfacher.

Ich habe beim weiteren Forschen einen Treiberbaustein (ULN 2803) gefunden, der die gesamte Ansteuerung übernehmen könnte. Und die Lötarbeit noch mal ordentlich reduziert. Der besteht aus 8 Darlington-Transistoren (NPN) die im Prinzip genau so geschaltet sind wie beschrieben: Die Pins auf dem Kollektor des Transistors und der Emitter nach Masse geschaltet. Damit könnte man sogar Relais schalten, da die Freilaufdiode bereits mit integriert ist... Wenn ich das schon früher gewusst hätte, wäre mir bei anderen Projekten auch schon viel Löterei erspart geblieben...
Und die 8 Treiber sind wie geschaffen für eine 7-Segment-Anzeige: 7 Segmente plus Punkt...
Nach diesem Schaltplan sollte das dann hoffentlich funktionieren:
Schaltplan.png

Ich werde es erst mal mit den 6 AAAA-Zellen aus einem 9-Volt-Block versuchen. Die Segmente fressen ja nur bei Betrieb Strom und bei uns in der Gegend sind die Cacher nicht ganz so aktiv wie wohl anderswo. Ich denke, mehr als 30-40 mal pro Jahr wird der Cache nicht aufgesucht werden.
Ausserdem möchte ich die Anzeige über PWM "dimmen", was nochmal Strom einspart.
Und ein jährlicher Batteriewechsel in Verbindung mit einer Cachekontrolle sollte schon drin sein. Insbesondere, da der Cache in gemütlicher Fahrradentfernung hängen wird.

Ich programmieren den Tiny24 übrigens mit Bascom über ein mySmartUSB von myAVR. Das geht problemlos...
 

thomas_st

Geowizard
Kappler schrieb:
Ich habe beim weiteren Forschen einen Treiberbaustein (ULN 2803) gefunden, der die gesamte Ansteuerung übernehmen könnte.
Wenn Du den Dezimalpunkt nicht brauchst, und daher mit 7 Treibern auskommst, kannst Du auch den ULN2003 nehmen. Mach nicht den Fehler wie ich, und kaufe (zum experimentieren zum Glück) den ULN 2x02; der ist für PMOS ausgelegt und schaltet erst bei einer Eingangspannung > 10 V :eek:ps:

Genutzt habe ich den ULN2803 für eine 8x8 LED Matrix - funktioniert wunderbar und ist preiswerter als 8 Treibertransistoren + 8 Basisvorwiderstände (die man beim ULN 2803 nicht braucht, da im Schaltkreis integriert).

Viele Grüße,
Thomas(_st)
 

stonewood

Geowizard
thomas_st schrieb:
Dr.Schmock schrieb:
PS: Mal nebenbei: Wie programmierst du den ATTiny24? Ponyprog und andere funktionieren bei dem ja nicht. Hast du den neuen MK2-Programmer? Hab nämlich ein paar Tiny24 voreilig gekauft und bin jetzt am Überlegen, wie ich das machen werde, da ich sonst immer mit LPT-Port und Ponyprog programmiert hab.
Warum geht das mit Ponyprog nicht? Kennt das den Tiny 24 noch nicht? Würde mich jetzt nicht wundern, da schon älter ist. Aber in diesem Fall könnte man auf die Kommandozeile ausweichen und avrdude nehmen - das kennt den Tiny 24 und eine Vielzahl an Programmern.
Versteh ich auch nicht. Der Tiny24 hat wie alle (vernünftigen) Tinys die Pins MOSI, MISO, SCK, RESET und läßt sich per LPT-Kabel programmieren. Mit ponyprog hab ich noch nichts probiert, aber avrdude und bascom kennen den.
 

thomas_st

Geowizard
stonewood schrieb:
Versteh ich auch nicht. Der Tiny24 hat wie alle (vernünftigen) Tinys die Pins MOSI, MISO, SCK, RESET und läßt sich per LPT-Kabel programmieren. Mit ponyprog hab ich noch nichts probiert, aber avrdude und bascom kennen den.
Ponyprog, oder die anderen Programmier-Programme müssen den Ziel-AVR kennen. Deutlich wird es bei den Fuse: hier muss das Programm wissen, welches Fuse durch welches Bit repräsentiert wird. So gesehen, könnte der Tiny 24 zu neu sein (ich weiß jetzt nicht wie alt Ponyprog ist, da ich es auf diesem Rechner nicht habe).

Viele Grüße,
Thomas(_st)
 

thomas_st

Geowizard
Kappler schrieb:
Ausserdem möchte ich die Anzeige über PWM "dimmen", was nochmal Strom einspart.
Das ist mir erst im Nachhinein aufgefallen. Eine PWM mit Deiner Schaltung könnte problematisch werden. Der Tiny 24 hat insgesamt 4 Hardware-PWM-Kanäle (die Pins die mit OCxy bezeichnet sind). Dabei werden OC0A und OC0B durch den 8bit-Timer 0 gesteuert und OC1A und OC1B durch den 16bit-Timer 1. Mit Deiner Schaltung müsstest Du aber die einzelnen Segmente der Anzeige separat per PWM dimmen und benötigst hierfür 7 PWM-Kanäle. Da Du nicht ausreichend Hardware-PWM-Kanäle hast, müsstest Du sie per Software realisieren. Das ist prinzipiell möglich - allerdings eigentlich nur, wenn man das Ganze per Interrupt realisieren kann - und hier weiß ich nicht ob das mit Bascom geht (BTW: Ich weiß natürlich auch nicht, ob Bascom entsprechende Funktionen für eine Software-PWM mitbringt). Wenn der AVR mit 8MHz läuft und Du eine Software-PWM mit 100 Hz bei 8bit-Auflösung (256 Stufen) möchtest, müsste Dein Programm innerhalb von etwas mehr als 300 Takten die Pins ein- und ausschalten. Das klingt viel und ist auch eigentlich ausreichend, bedenke aber, dass der AVR auch noch was anderes macht - eine Schleife die länger als ca. 40µs läuft und die PWM ist im Zweifelsfall im Eimer.

Allerdings willst Du ja auch nicht jedes Segment separat dimmen, sondern alle zusammen und in diesem Fall müsstest Du an die gemeinsame Anode ran. ... und damit haben wir wieder das ursprüngliche Problem: Die LEDs hängen zwischen Transistor und Masse. In diesem Fall nimmt man normalerweise einen PNP-Transistor und da das Ganze auf anderem Spannungsniveau liegt würde ich dann doch meine Schaltung mit der Kombination aus NPN- und PNP-Transistor vorschlagen:

Mit den Widerstände war ich eventuell etwas vorsichtig - ich habe jetzt nicht weiter darüber nachgedacht, ob jeder Widerstand notwendig ist und auch nicht welche Größe er haben müsste. Der Anodenzweig funktioniert jetzt so: Wenn die PWM aus ist, und damit PB2 auf Masse liegt, sperrt T2 und der Kollektor von T2 liegt über R4 an der hohen Betriebspannung der LEDs (ich nenne sie mal Vdd). Über R5 liegt damit auch die Basis von T1 an Vdd, so dass dieser ebenfalls sperrt. Wenn die PWM eingeschaltet wird, liegt PB2 auf Vcc und T2 wird über R3 leitend. Damit liegt der Kollektor von T2 an ~ GND und über R5 wird die Basis von T1 ebenfalls auf Masse gezogen. Damit wird dieser leitend und die LEDs leuchten.

HTH und Viele Grüße,
Thomas(_st)
 
OP
Kappler

Kappler

Geowizard
Ich werde das ganze über Software-PWM realisieren, mit Timer-Interrupt. Geht problemlos mit Bascom und ich habe das auch schon mal für 3 Kanäle (RGB-LED) realisiert.
Bei Hardware-PWM habe ich es in Bascom nicht geschafft, einen der PWM-Timer zu starten. Ich weiß jetzt nur nicht mehr, welcher es war. Und direkt die Timerregister zusammenzupfriemeln, dazu war ich zu bequem.

Ich habe es damals mit etwa 25Hz auf einem Tiny13 laufen lassen und da auch noch kein großartiges Flackern festgestellt. Und wenn so eine große Anzeige in 40 Metern Entfernung mitten in einer Steinbruchwand (vorsicht Spoiler!) hängt, dürfte auch ein leichtes Flackern nicht stören...

Und soweit ich das mitverfolgt habe, ist es für ein Reaktivlicht sowieso stromsparender, wenn der Prozessor mit der vollen Taktfrequenz betrieben wird.

Aber auf jeden Fall mal Danke für das Schaltbild, das kann ich bestimmt noch mal für irgendwas brauchen...
 

thomas_st

Geowizard
Kappler schrieb:
Ich werde das ganze über Software-PWM realisieren, mit Timer-Interrupt. Geht problemlos mit Bascom und ich habe das auch schon mal für 3 Kanäle (RGB-LED) realisiert.
Ich wusste nicht, dass man mit Bascom Interrupts programmieren kann: bisher ist mir hier kein Interrupt-Programm mit Bascom aufgefallen und auch auf meine Nachfrage, ob das gehen würde (ist schon ein paar Wochen her) bekam ich keine Rückmeldung => daher meine Vermutung, dass das nicht geht.
Mit Interrupts ist eine Software-PWM kein Problem - das sehe ich auch so, nur ohne ... eher nicht.

Kappler schrieb:
Bei Hardware-PWM habe ich es in Bascom nicht geschafft, einen der PWM-Timer zu starten. Ich weiß jetzt nur nicht mehr, welcher es war. Und direkt die Timerregister zusammenzupfriemeln, dazu war ich zu bequem.
Also in Basic hätte ich ja jetzt ein paar Luxus-Funktionen wie "StartPWM(0A)" und "SetPWM(0A,50%)" erwartet ;)

Kappler schrieb:
Ich habe es damals mit etwa 25Hz auf einem Tiny13 laufen lassen und da auch noch kein großartiges Flackern festgestellt.
Das erstaunt mich - 25Hz ist nämlich schon sehr wenig. Das Ganze kennt man ja noch von den alten Röhrenmonitoren - die wollte man auch mit 80Hz und mehr laufen haben.

Kappler schrieb:
Und soweit ich das mitverfolgt habe, ist es für ein Reaktivlicht sowieso stromsparender, wenn der Prozessor mit der vollen Taktfrequenz betrieben wird.
Das ist richtig :D

Viele Grüße,
Thomas(_st)
 

gomerffm

Geocacher
thomas_st schrieb:
Allerdings willst Du ja auch nicht jedes Segment separat dimmen, sondern alle zusammen und in diesem Fall müsstest Du an die gemeinsame Anode ran. ... und damit haben wir wieder das ursprüngliche Problem: Die LEDs hängen zwischen Transistor und Masse. In diesem Fall nimmt man normalerweise einen PNP-Transistor und da das Ganze auf anderem Spannungsniveau liegt würde ich dann doch meine Schaltung mit der Kombination aus NPN- und PNP-Transistor vorschlagen
Schon mal in Erwägung gezogen die Segmente einzeln einfach zu multiplexen (also nacheinander so schnell anzusteuern, dass das menschliche Auge das gar nicht mitbekommt)? Das erspart zum einen die "Anodenmimik" für PWM zum anderen kann man damit ja auch eine m.E. noch stromsparendere Dimmung erreichen.

Grüße
gomerffm
 

thomas_st

Geowizard
gomerffm schrieb:
Schon mal in Erwägung gezogen die Segmente einzeln einfach zu multiplexen (also nacheinander so schnell anzusteuern, dass das menschliche Auge das gar nicht mitbekommt)?
Nöö, aber Recht hast Du :D

gomerffm schrieb:
Das erspart zum einen die "Anodenmimik" für PWM zum anderen kann man damit ja auch eine m.E. noch stromsparendere Dimmung erreichen.
So wie ich Kappler verstanden habe, wird er es sowieso per Software lösen und sich damit die "Anodenmimik" sowieso sparen.

Viele Grüße,
Thomas(_st)
 

thomas_st

Geowizard
radioscout schrieb:
Es gibt doch sicher einen Treiber mit OE-Pin?
Vermutlich - aber da müsste ich erstmal suchen. Der ULN hat jedenfalls keinen. Obige Schaltung hat den Charme, sehr preiswert zu sein: der ULN liegt bei 30 ct. und auch die Transistoren und Widerstände schlagen nur im unteren ct.-Bereich zu Buche.

Viele Grüße,
Thomas(_st)
 
OP
Kappler

Kappler

Geowizard
gomerffm schrieb:
...zum anderen kann man damit ja auch eine m.E. noch stromsparendere Dimmung erreichen.
Das verstehe ich jetzt nicht so ganz: Auf welche Art kann durch das Multiplexen Strom gespart werden?
Um eine gleichbleibende Helligkeit zu erreichen, muss ja eigntlich der Strom durch die LEDs erhöht werden...

thomas_st schrieb:
Also in Basic hätte ich ja jetzt ein paar Luxus-Funktionen wie "StartPWM(0A)" und "SetPWM(0A,50%)" erwartet
So ähnlich geht es auch:
Code:
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
...
Pwm0a = 128
Nur leider konnte ich auf die Art nur einen der beiden Timer verwenden, beim Anderen hat mir Bascom die Mitarbeit verweigert...
 

thomas_st

Geowizard
Kappler schrieb:
gomerffm schrieb:
...zum anderen kann man damit ja auch eine m.E. noch stromsparendere Dimmung erreichen.
Das verstehe ich jetzt nicht so ganz: Auf welche Art kann durch das Multiplexen Strom gespart werden?
Um eine gleichbleibende Helligkeit zu erreichen, muss ja eigntlich der Strom durch die LEDs erhöht werden...
Wenn man die Helligkeit halt nicht ausgleicht, spart man Strom. Ist im Prinzip wie eine auf 1/7 = 14% eingestellte PWM.

Kappler schrieb:
So ähnlich geht es auch:
Code:
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
...
Pwm0a = 128
Nur leider konnte ich auf die Art nur einen der beiden Timer verwenden, beim Anderen hat mir Bascom die Mitarbeit verweigert...
ich könnte mir nur denken, das der andere Timer von Bascom intern für andere Aufgaben gebraucht wird und damit nicht zur Verfügung steht. Damit würde es vermutlich auch mit dem direkten Zugriff auf die Register nichts werden - Du würdest damit nur andere Funktionen von Bascom durcheinander bringen.

Viele Grüße,
Thomas(_st)
 
Oben