Hallo! Ich möchte eine Uhr mit vier 7 Segment LED Anzeigen und einem ATTiny2313 realisieren. Dazu habe ich das Tutorial durchgelesen http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige (vielen Dank!). Jetzt habe ich folgendes gefunden: http://www.avr-tutorials.com/projects/atmega16-based-digital-clock Hier werden keine Vorwiderstände und auch keine Transistoren verwendet, was ich ziemlich elegant finde. Was sagt Ihr dazu? Unter welchen Umständen ist dieser Weg gangbar? Es freut sich der mikrocontroller.net-Forenneuling Johannes
Datenblattkonform ist das bestimmt nicht...
TBI schrieb: > Datenblattkonform ist das bestimmt nicht... Ist die Frage, welche Flussspannung die LEDs in den Displays haben. Prinzipiell ist die Ausgangsstufe eines AVR natürlich einigermaßen eine Konstantstromquelle.
Hallo, ich habe das Thema schon "durch" und diese kleine serielle LED-Anzeige und mehr fach in Betrieb. Die Beiträge waren sehr hilfreich, so dass die aktuelle Schaltung in einem HF-Umfeld - mit HF Messköpfen nur sehr geringe Störungen verursachen. ~ -80dBm Beitrag "4 stellige 7 Segment im Multiplexing" Im Gegensatz zum Schaltbild verwende ich nun als Vorwiderstände jeweils 270 Ohm. Die Behauptung, dass eine serielle Kommunikation mit 9600 bit/s nicht funktioniert, kann ich nicht bestätigen ! Die Bitzeit beträgt ja gut 104µs das reicht für so einen Hardwareuart aus. Im Atmel AVR Datenblatt ist etwas mehr zum Sampeln des RX Pin nachzulesen.
:
Bearbeitet durch User
Uwe S. schrieb: > Die Beiträge waren sehr hilfreich, so dass die aktuelle Schaltung in > einem HF-Umfeld - mit HF Messköpfen nur sehr geringe Störungen > verursachen. > ~ -80dBm Wer hat danach gefragt? Uwe S. schrieb: > Im Gegensatz zum Schaltbild verwende ich nun als Vorwiderstände jeweils > 270 Ohm. Das ist vernünftig. Uwe S. schrieb: > Die Behauptung, dass eine serielle Kommunikation mit 9600 bit/s nicht > funktioniert, kann ich nicht bestätigen ! Hat wer behauptet? Uwe S. schrieb: > Die Bitzeit beträgt ja gut 104µs das reicht für so einen Hardwareuart > aus. > Im Atmel AVR Datenblatt ist etwas mehr zum Sampeln des RX Pin > nachzulesen. Hä? Völlig offtopic. Mag es sein, dass du das falsche Fenster erwischt hast?
Woher kommt das mit den 20mA? In meinem Datenblatt vom Tiny2313 lese ich da 40mA/Pin max. Desweiteren der max. Gesamtausgangsstrom des t2313: 60mA vs. 7Segx20mA=140mA. Paßt irgendwie nix. Das mit der Konstantstromquelle hab ich auch nicht verstanden. Hängt der Strom nicht von Spannung und Last ab?
Kleine Korrektur: Gesamtstromlimit t2313 liegt bei 200mA, da man auf die Pegel pfeift.
Johannes Jörg S. schrieb: > Hier werden keine Vorwiderstände und auch keine Transistoren verwendet, > was ich ziemlich elegant finde. > Was sagt Ihr dazu? Unter welchen Umständen ist dieser Weg gangbar? Gangbar ist er unter folgenden Bedingungen: 1) Die Displays sind sehr eng toleriert bezüglich der Flussspannungen der einzelnen LEDs und auch bezüglich der Helligkeitsabweichungen bei gleichem Strom. 2) Die Versorgungsspannung der ganzen Sache wird passend zur Flussspannung der LEDs so gewählt, dass sich für den AVR Ausgangsströme im erlaubten Bereich ergeben. Schlecht ist die Lösung aber auch dann noch.
Wenn Du Dein Programm so schreibst, dass immer nur 1 LED pro Zeiteinheit eingeschaltet ist, dann fließt immer nur der Strom durch Controller und Pin, der sich aus Versorgungsspannung minus LED-Flussspannung, dividiert durch den Kanalwiderstand des Ausgangs (etwa 80 Ohm bei 3V Versorgung) ergibt. Damit bist Du immer im Limit. Allerdings könnte Deine Anzeige durch den geringeren Tastgrad der einzelnen LEDs (also durch das Multiplexing) recht dunkel werden. Wenn die Anzeige aber eine hohe Effizienz besitzt, könnte das schon klappen.
Schaut doch mal in den Schaltplan vom 2. Link. Da hängt in der Versorgungsleitung schon ein 1k Widerstand der den Strom begrenzt. Jetzt hätte ich gerne nur noch eine Erklärung warum man das macht, da der µC ja so keine konstante Versorgungsspannung je nach Schaltzustand hat.
Hallo, um zu zeigen, daß man mit einem Mega16 eine Uhr bauen könnte, so wie es der Schaltplan zeigt, kann man die Schaltung nehmen. "Uhr bauen könnte" weil - der AVR wird im Prinzip mit der Flußspannung der LEDs betrieben. bei grünen LEDs also wohl irgendwo um 3V rum, weil der Spannungsabfall der Ausgangstreiber des Ports dazukommt. Gut möglich, daß er damit stabil läuft, due AVR sind recht großzügig. - 4MHz interner Oszillator und Uhr mit Sekundenanzeige ist zumindest ein Garant dafür, die Zhr oft geneu zu stellen, die Sekudnen hätte ich da leiber weggelassen. - 1k bei vermutlich ca. 2V Spannungsabfall sind 2mA LED-Strom für die komplette Anzeige, es müssen also wohl sehr helle Anzigen sein. Daß der Mega16 selbst ohne Abblockkondensator an Vcc und nicht angeschlossener AVcc spielt, halte ich durchaus für möglich. Er wird so auch keinen Schaden nehmen, die Ströme sind gering genug. Es wird eben alles ins Netz gestellt, was irgendwie mal gespielt hat. Die Entscheidung, es so zu nutzen, wie man es finden, blebt letztlich immer bei dem, der es nachbaut. Gruß aus Berlin Michael
Johannes Jörg S. schrieb: > Jetzt habe ich folgendes gefunden: > http://www.avr-tutorials.com/projects/atmega16-based-digital-clock > > Hier werden keine Vorwiderstände und auch keine Transistoren verwendet, > was ich ziemlich elegant finde. Nicht einmal ein Abblockkondensator wurde verschwendet. Offensichtlich ein Projekt für sehr hohe Stückzahlen :-) > Was sagt Ihr dazu? Unter welchen Umständen ist dieser Weg gangbar? Diese Schaltung taugt nichts, nimm die aus dem Tutorial mit Digit-Treibern und Vorwiderständen und einem Abblockkondensator mit >= 47 µF + 100 nF. Wenn es dann noch eine Uhr werden soll, ist ein stabiler Quarztakt erforderlich. Jörg W. schrieb: > Prinzipiell ist die Ausgangsstufe eines AVR natürlich einigermaßen > eine Konstantstromquelle. Nur liegen diese Ströme im 'destruktiven' Bereich, weil sie viel zu hoch sind.
Johannes Jörg S. schrieb: > Hier werden keine Vorwiderstände und auch keine Transistoren verwendet, > was ich ziemlich elegant finde. Ungefähr so elegant, wie ein Auto ohne Gummireifen das nur auf der Felge fährt, schon braucht man keine Sommer- und Winterreifen mehr. Man hat was gespart, aber die schlechteste Qualität und irgendwann geht was kaputt. Da der Digit-Ausgang zwischen 20 und 40 mA am Strom begrenzen ist, teilen sich die mA auf die Anzahl der Segmente auf, eine 1 hat 2 hellere Segmente als die 7 Segmente einer 8, und den Murks sieht man. Ausserdem wird der uC heiss. Es gab hier im Form mal ein Bild von so einem Pfusch.
Radler schrieb: > Schaut doch mal in den Schaltplan vom 2. Link. Da hängt in der > Versorgungsleitung schon ein 1k Widerstand der den Strom begrenzt. > > Jetzt hätte ich gerne nur noch eine Erklärung warum man das macht, da > der µC ja so keine konstante Versorgungsspannung je nach Schaltzustand > hat. Ist der größte "Mist" den ich je gesehen habe. Bei 2mA durch die LEDs fallen an dem Widerstand schon 2V ab. Und das dann auch noch multiplexen .... vom 20mA wollen wir da garnicht reden. Wird hat eine Nachtuhr für Neumondmächte :) Die Webpage gibt schon kein Impressum an wer dafür zuständig ist. Warum wohl ...
Hier mal ein Bild: https://www.mikrocontroller.net/attachment/93262/224-2405_IMG.JPG Man sieht sehr schön, wie der '-' völlig überstrahlt und die '8' deutlich dunkler ist, als die '7'.
m.n. schrieb: >> Prinzipiell ist die Ausgangsstufe eines AVR natürlich einigermaßen >> eine Konstantstromquelle. > > Nur liegen diese Ströme im 'destruktiven' Bereich, weil sie viel zu hoch > sind. Hängt von der Betriebsspannung ab. Bei 5 V gebe ich dir Recht, bei 2,7 V gibt es Kurven im Datenblatt, da sättigt ein ATmega16 schon bei ca. 25 mA. Mit seinem Nachfolger ATmega164 sollte man das jedoch nicht mehr machen. ;-)
Deswegen der Vorschlag, zu einer Zeit nur eine LED leuchten zu lassen. Das Tastverhältnis ist in dem Fall 1/Anzahl der LEDs. Macht die Anzeige zwar nicht heller, aber die Ungleichmäßigkeiten wie im o.g. Bild gibt es dann nicht, da alle LEDs immer den gleichen Kanalwiderstand sehen und die gleiche "Ein"-Zeit haben. Funktioniert aber nur mit superhellen / effizienten LED-Anzeigen. Hat man die nicht, sind Transistoren und Vorwiderstände zwingend.
Jörg W. schrieb: > Hängt von der Betriebsspannung ab. Bei 5 V gebe ich dir Recht, bei > 2,7 V gibt es Kurven im Datenblatt, da sättigt ein ATmega16 schon > bei ca. 25 mA. Mag so sein. Mein letztes Datenblatt vom ATmega16 ist von 2003 und da stehen noch keine typischen Kurven. Ein neueres Datenblatt brauche ich nicht mehr ;-) Mit dem ATtiny2313 sind ja schon modernere Zeiten angebrochen, da nimmt man dann halt acht Widerstände, auch wenn diese ein kleines Vermögen kosten ;-) Abweichend zu der im Tutorial gezeigten Schaltung, ist es besser, BC327 in Emitterschaltung zu verwenden. Man spart dadurch die vier 1 kOhm Widerstände (so wird man Millionär!) und fährt die Transistoren nicht in die Sättigung. Als Erfahrungswert ergibt das über den Segmentwiderständen einen Spannungsabfall von ca. 1,7 V bei 5 V Versorgungsspannung. Bei 100 Ohm und 4-fach Multiplex erhält man einen Segmentstrom von 4,3 mA, was bei aktuellen 7-Segmentanzeigen schon fast zu hell ist. Aber gut, dunkler bekommt man die Anzeigen immer. (Dies nur als Hinweis für Neulinge.)
Knut B. schrieb: > Deswegen der Vorschlag, zu einer Zeit nur eine LED leuchten zu > lassen. > Das Tastverhältnis ist in dem Fall 1/Anzahl der LEDs. Macht die Anzeige > zwar nicht heller, aber die Ungleichmäßigkeiten wie im o.g. Bild gibt es > dann nicht, da alle LEDs immer den gleichen Kanalwiderstand sehen und > die gleiche "Ein"-Zeit haben. Funktioniert aber nur mit superhellen / > effizienten LED-Anzeigen. Hat man die nicht, sind Transistoren und > Vorwiderstände zwingend. Heller wirds und trotzdem gleichmäßig, wenn man je eine ganze Ziffer schaltet und deren Leuchtzeit nach der Anzahl der jeweils aktiven Segmente bestimmt. Also z.B. eine "8" leuchtet 7x so lange wie ein "-". Das wär was für die Billig-Chinesen. :-)
batman schrieb: > Also z.B. eine "8" leuchtet 7x so lange wie ein "-". Wird nicht funktionieren, denn die Sache ist nichtlinear. Wenn du acht Segmente einschaltest, leuchten die nicht mit 1/8 der Stärke eines einzelnen Segments. Aber was in der Art könnte man machen, wenn man denn partout die Widerstände einsparen will. ;-)
Jörg W. schrieb: > Wird nicht funktionieren, denn die Sache ist nichtlinear. Richtig. Das geht nur, wenn eine LED leuchtet, da die Stromaufnahme einer LED im System immer (annähernd) gleich ist und einen AVR-Ausgang nicht überlastet.
Muß ja auch nicht linear sein, war nur ein Bsp. aber es gibt sicher eine feste Beziehung zwischen Segmentzahl und Leuchtdauer, die man simpel in einer Ziffern-Tabelle ablegen und damit den Multiplexer timen könnte.
Das Problem ist nicht die Nichtlinearität an sich, sondern die Überlastung der Ausgänge, weswegen die LEDs in der Leuchthelligkeit einbrechen. Damit heizt Du den AVR.
Ja, entweder warm oder dunkel. Wie es beliebt.
Knut B. schrieb: > Damit heizt Du den AVR. Naja, sonst heizt du die Umwelt halt direkt über die Vorwiderstände, bleibt sich einigermaßen gleich.
Den Widerständen ist es aber relativ egal ;-)
Knut B. schrieb: > Den Widerständen ist es aber relativ egal ;-) Der Controller brennt da auch nicht gleich ab. Wie gesagt, bei den alten AVRs, die sind nicht so sehr stromergiebig. Mit einem neueren würde ich es nicht tun. Aber um mal den alten Spruch zu zitieren: „Klar kannste das so machen, aber dann isses eben Kacke.“
:
Bearbeitet durch Moderator
Echt grausig, welcher Mist im Netz als "Tutorial" verkauft wird - und dem unbedarften Neuling, der sich an von vermeintlichen Fachkundigen veröffentlichten Anleitungen orientieren will, erscheint es "elegant", weil so schön minimalistisch!
m.n. schrieb: > Abweichend zu der im Tutorial gezeigten Schaltung, ist es besser, BC327 > in Emitterschaltung zu verwenden. Man spart dadurch die vier 1 kOhm > Widerstände Sicher? Meinst Du nicht Kollektorschaltung bzw. Emitterfolger? ...
Hannes L. schrieb: > Sicher? > > Meinst Du nicht Kollektorschaltung bzw. Emitterfolger? Flascher Irrtum - natürlich Emitterfolger!
batman schrieb: > jo, und statt BC327 meint er sicher einen NPN, so rum wird ein Schuh > draus Und natürlich auch das: BC337 Heute war wohl Fön.
Er nutzt die unterschiedlichen Programmlaufzeiten für das Multiplexing. SegDataPort = DigitTo7SegEncoder(seconds%10,1); SegCntrlPort = ~0x01; SegDataPort = DigitTo7SegEncoder(seconds/10,1); SegCntrlPort = ~0x02; SegDataPort = DigitTo7SegEncoder(minutes%10,1); SegCntrlPort = ~0x04; ... seconds%10 geht schneller als seconds/10 . Eigentlich müsste damit die erste Ziffer heller erscheinen als die Zweite? Und der Compiler sollte doch minutes%10 und die (Inline)Funktion so weit optimieren, dass man die paar Takte zwischen SegDataPort= und SegCntrlPort= nicht ignorieren darf.
Noch einer schrieb: > seconds%10 geht schneller als seconds/10 Wie kommst du darauf? Sowohl Quotient als auch Rest sind beides die Ergebnisse einer Divisionsoperation. Daher gibt es ja auch eine Funktion div(), mit der man sich beide Teilergebnisse auf einmal zurückgeben lassen kann.
Liebe Diskussionsteilnehmer, einen großen Dank für Eure zahlreichen und fundierten Antworten! Ich habe jetzt verstanden, dass eine solche Schaltung grundsätzlich möglich ist, aber gravierende Nachteile hat. Hierbei wird der Mikrocontroller mit der Flussspannung der LEDs betrieben (zB. 1.8V) und der Strom über einen gemeinsamen Widerstand begrenzt. Es gibt eine Beschränkung in der Belastbarkeit der einzelnen Ausgänge des atTiny2313 (40mA), wie auch ein Gesamtstromlimit (200mA). Das ist für viele Anzeigen zu wenig. Die gemeinsame Strombegrenzung hat zudem eine ungleichmäßige Helligkeit der Ziffern zur Folge, je nachdem, wie viele Segmente zur Darstellung der Ziffer benötigt werden (eine Eins strahlt heller als eine Acht). Das kann durch einen geeigneten Algorithmus korrigiert werden, der die Leuchtdauer variiert. In meinem konkreten Fall werde ich die Transistoren und separate Widerstände verwenden, weil ich eine größtmögliche Helligkeit brauche und mir Spielraum bei der Wahl der Anzeigen erhalten möchte. Auch wird die Verminderung der Komplexität im Schaltungsdesign durch den Mehraufwand auf der Softwareseite zunichte gemacht, was die Lösung mit gemeinsamer Stromversorgung zumindest bei geringen Stückzahlen unwirtschaftlich macht. Eine ergiebige Diskussion! Viele Grüße von Johannes
Johannes Jörg S. schrieb: > weil ich eine größtmögliche Helligkeit brauche Dann wäre zu überlegen, ob Du die LEDs nicht besser mit DC betreibst, also nicht multiplexen, sondern mit jweils 100% Einschaltdauer. Denn beim Multiplexen wird jede LED mit x-fachem Strom bei 1/x Einschaltdauer betrieben, wodurch die Effizienz der LED sinkt. Statt einfacher Transistoren könnte man je ein 8-Bit Latch pro Anzeigestelle verwenden, so daß man nicht so viele IOs am Controller braucht.
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.