Liebe Foristen
habe die in der Spezifikation rot markierte Siebensegmentanzeige mit 4
Digits, gemeinsamer Kathode und insg. 7 Anoden für die 7 Segmente. Jede
Zahl wird über einen Transistor mit Basenwiderstand 1kOhm in rascher
Folge an 0/5V an der Kathode angeschlossen und so die jeweils gewünschte
Zahl dargestellt (Multiplexing?). Jedes Segment versorgt somit
gleichzeitig immer nur ein Digit, daher stellen die Grenzen des Digital
Output des Arduino (5V u. 40mA) und die Spezifikationen der Leuchtdioden
(2V u. 10mA) kein Problem dar. Der Vorwiderstand ist bei 5V
Versorgungsspannung entsprechend U=R*I => 5-2V=3V=U, I=10mA ==>
R=U/I=3V/10mA=300Ohm. oberes Limit liegt bei 15mA bei den Dioden, daher
liege ich mit 187Ohm unter 3V/15mA=200Ohm und muss hier also auf
200-300Ohm gehen. Jedoch steht im Datenblatt auch, dass maximal 60mA bei
einer Pulsbreite von 1ms und Duty (Cycle) von 1/5 akzeptabel sind, das
würde ja bedeuten, dass meine ~16mA (3V/187Ohm) bei einem Delay von 1ms
und 3-4 Digits also einem Duty Cycle von 1/3 bis 1/4 vermutlich kein
Problem darstellen?
Hoffe ich habe die Ohm-Zahl richtig gelesen, habe 1500 im Set gekauft,
da sind teilweise etwas seltsame Werte dabei (siehe Anhang).
Wenn ich alle 4 Digits parallel anschalte, dann erhalte ich ja bei 10mA
* 4 parallel =40mA Gesamstrom an jedem Digitalausgang und bin hier schon
im kritischen Bereich des Arduino. Wenn ich eine Anzeige mit gemeinsamer
Anode verwenden würde, dann bestünde dieses (theoretische) Problem
nicht, da ich dann als Spannungslieferant den 5V Ausgang des Arduino
nutze, der ~200mA liefern könnte, korrekt?
Was spricht eigentlich prinzipiell dagegen die gemeinsamen Kathoden der
Ziffern statt über Digital Pin > Basis des Transistor direkt über
DigitalPins anzusteuern (0V/5V)?
Vielen Dank, beschäftige mich jetzt seit rund einer Woche mit dem Thema
Arduino + Schaltkreise und frische etwas die noch begrenzt vorhandenen
Physik LK Kentnisse auf, bitte also darum meinen bescheidenen
Wissensstand zu entschuldigen :)
Wäre super, wenn mir jemand meine Überlegungen bestätigen oder
widerlegen + erklären könnte. Bei Fritzing ist die Schaltung
exemplarisch für 2 Digits dargestellt. Der laufende Code:
http://codepad.org/XW81ImLn
Falls jemand einen Tipp hat wie ich evtl. das schwache Leuchten eigtl.
nicht aktiver Segmente vermeiden kann, wäre dankbar :)
Felix
Beim Multiplexen wird die Stelle im 1-aus-4-Takt geschaltet, hier über
Transistoren. Im worst case sind sieben Segmente aktiv, 70mA je Stelle,
damit wäre der Digitalausgang ohne Transistorhilfe überlastet.
Beim Segmentstrom sind die Segmente im worst case (8888 als Anzeige) bei
allen vier Stellen aktiv, der Digitalausgang verträgt die 40mA gerade.
Problem wird dann der Gesamtstromverbrauch des Kontrollers (280mA).
Bei Wechsel auf gemeinsame Anode ändert sich das Problem nicht, außer
die pins vertragen einen stärkeren sink- als einen source-Strom.
Bessere Lösung wäre, die Vorwiderstände für einen kleineren Strom zu
bemessen. Falls die Helligkeit dann nicht ausreicht, wäre der nächste
Schritt die Wahl eines Display mit besonders gutem Wirkungsgrad.
Das schwache Leuchten der nicht aktiven Segmente dürfte wohl an der
Software liegen. Entweder sind die internen pull-ups noch aktiv. Oder es
besteht ein Programmfehler: Prinzipiell muss nach der Aktivzeit einer
Stelle Alles auf dunkel geschaltet werden und erst nach Anlegen der
richtigen Segmentspannung darf die folgende Stelle eingeschaltet werden.
btw: Ich liebe diese mehrstelligen Anzeigen. Sie vereinfachen den
Druckstockentwurf gegenüber Einzelstellen erheblich. Nur bekommt man sie
oft mit exotischer Verschaltung, besonders die Dezimalpunkte sind sehr
individuell ausgelegt.
Felix schrieb:> Jede Zahl wird über einen Transistor mit Basenwiderstand 1kOhm in rascher> Folge an 0/5V an der Kathode angeschlossen und so die jeweils gewünschte> Zahl dargestellt (Multiplexing?).
Ja sollte so funktionieren. Wirst so auch keine Probleme mti dem Strom
haben. So was habe ich auch schon gemacht. Warum kein FET? Da kannst du
dir den Basiswiderstand sparen.
Felix schrieb:> Wenn ich alle 4 Digits parallel anschalte, dann erhalte ich ja bei 10mA> * 4 parallel =40mA Gesamstrom an jedem Digitalausgang und bin hier schon> im kritischen Bereich des Arduino. Wenn ich eine Anzeige mit gemeinsamer> Anode verwenden würde, dann bestünde dieses (theoretische) Problem> nicht, da ich dann als Spannungslieferant den 5V Ausgang des Arduino> nutze, der ~200mA liefern könnte, korrekt?
Bei jeder anderen Zahl musst du Multiplexen. Ich würde daher immer
multiplexen, so umgehst du dieses Problem. Das kannst du nur machen,
wenn alle Segmente den gleichen Wert haben. Daher würde ich es
weglassen. Macht auch den Code nur noch komplizierter.
Dass der Adruino 200mA liefert glaub ich nicht. Hier müsstest du auch
einen PNP Transistor einsetzen.
Felix schrieb:> Was spricht eigentlich prinzipiell dagegen die gemeinsamen Kathoden der> Ziffern statt über Digital Pin > Basis des Transistor direkt über> DigitalPins anzusteuern (0V/5V)?
Würd ich nicht machen, da du sonst im Schlechtesten Fall 10mA * 7
Segmente = 70mA hast und das übersteigt wahrscheinlich die Spezifikation
des Adrunio. Das solltest du aber besser wissen, da du damit arbeitest.
Erstmal vielen Dank für die schnellen Antworten!
Wieso ich den Transistor nutzen muss um auf 5V/0V schalten zu können
habe ich jetzt verstanden, da 70mA > 40mA.
Dass insgesamt 70mA*4=280mA > sind als die 200mA, die der Arduino
liefern kann, ist jetzt auch angekommen, hier müsste dann gegebenenfalls
eine extra Stromquelle heran, die dann von dem Arduino nur über
Transistoren oder ähnliches gesteuert wird, korrekt? Sehe gerade, dass
evtl. doch bis zu 800mA max möglich sind, aber wohl jeweils aufgeteilt
auf verschiedene Pingruppen.
http://playground.arduino.cc/Main/ArduinoPinCurrentLimitations; dennoch
iwie alles recht knapp bemessen für mehr als 40 DigitalPins.
Vielen dank für die Bemerkung bzgl. sink/source, eigtl. logisch dass das
Limit für den Strom in beide Richtungen gilt, dass war auch der Grund
für meinen Denkfehler evtl. die Digits direkt an einen DigitalPin
anzuschließen.
Wieso keine FET? :) War mir als Bauteil nicht bekannt, da kann man den
Vorwiderstand weglassen und direkt mit 5V/0V an die Basis? Werde es mir
gleich mal anschauen :)
Bzgl. des Leuchtens (zahl==-1 => alle Segmente werden ausgeschaltet),
eigentlich werden immer alle entsprechenden Digits
angeschaltet/ausgeschaltet, habe auch versucht hier ein Delay
einzubauen, keine Besserung, eine Idee?
Felix schrieb:> Bzgl. des Leuchtens (zahl==-1 => alle Segmente werden ausgeschaltet),> eigentlich werden immer alle entsprechenden Digits> angeschaltet/ausgeschaltet, habe auch versucht hier ein Delay> einzubauen, keine Besserung, eine Idee?
Delay ist der falsche Weg.
Multiplexing läuft immer über Timer und zugehöriger Interrupt Routine
(und somit im Hintergrund der eigentlichen Anwendung)
du schaltest die Einerstelle frei und gibst dann das Muster aus.
Danach schaltest du um auf die Zehnerstelle.
Aber!
Deswegen liegt ja immer noch das Muster aus der Einerstelle an! D.h. für
ganz kurze Zeit zeigt die Zehnerstelle das LED-Muster der Einerstelle
an.
Und genau das siehst du in Form dieses Geisterleuchtens.
d.h. deine Reihenfolge muss sein
* sicherstellen dass nichts leuchtet und auch nicht leuchten kann
(alle Transistorpins auf 'aus' schalten)
* Muster ändern
* die zugehörige Stelle einschalten
Aber wie gesagt: das alles macht man nicht so, sondern in einem
Timer-Interrupt, so dass reihum bei jedem Interrupt Aufruf die nächste
Stelle eingestellt und angezeigt wird. Dieses Stelle leuchtet dann so
lange, bis der nächste Interrupt Aufruf kommt, in dem dann auf die
jeweils nächste Stelle weitergeschaltet wird.
-> du musst dich damit beschäftigen, wie man im Arduino System Timer
benutzt und eine Interrupt Service Routine an sie bindet.
>Womit zegeigt wird, das auch hackaday und Co. die Weisheit nicht gerade>mit Löffeln gefressen haben. LED ohne Vorwiderstand ist NIE eine gute>Idee.
Dazu fällt mir folgendes ein:
Nichts auf der Welt ist so gerecht verteilt wie der Verstand Denn
jedermann ist überzeugt, daß er genug davon habe (Rene Descartes )
Dein Beitrag hier war äusserst hilfreich für mich und mein Vorhaben,
da auch ich zunächst angenommen hatte daß solche
mehrstelligen LED 7 Segmentdisplays per Digital I/O Pin des Arduino (in
meinem Fall der MEGA 2560 in der Rev- 3.0)
durchaus über nur einem dieser I/O Pins des Arduino
ansteuerbar wären.
Allerdings verstehe ich zur Zeit immer noch nicht alles !
(denn auch das von mir verwendete 4 stellig 7 Segmentdisplay),
entspricht exakt dem LED-Display hier
http://www.pollin.de/shop/dt/OTUxOTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LED_Anzeige_ROHM_LC_204VL_4_stellig_rot.html
Ich habe diesbezüglichst einen weiteren Beitrag hier erstellt, und es
wäre nett insofern du dir diesen einmal durchlesen würdest und mir so
eventuell einige Tips posten könntest,
da ich der vollkommene NEWBIE in Sachen Schaltungsplanung bin.
Mittlerweile lese ich auf nachfolgender Webseite allerdings,
wie man die unterschiedlichen NPN oder PNP-Transistoren im Normalfall,
einsetzen soll und so langsam wird mir
das Schaltungsprinzip auch allmählich klar.
Ich lasse den Link hier mal, welcher das Schaltungsprinzip der
unterschiedlichen Transistoren erläutert.
https://www.elektronik-kompendium.de/sites/slt/0208031.htm
Für mich wäre es auch interessant zu wissen, in wie weit dieses Projekt
im allgemeinen vorgeschritten ist, denn somit könnte ich mein
Wissenspektrum
erweitern, zumal ich das gleiche Led-Display, verwende.
Zum Schluss hier noch der weitere von mir erstellte Post, insofern mal
diese Posts zusammen legen möchte.
Beitrag "7 Segmentanzeige (4stellig) am Arduino Mega 2560 Rev.3"
Gruss:
Lapster