Hallo zusammen!
Ich habe hier einen kleinen Hirnverdreher :-)
Und zwar möchte ich 4 5x7DotMatrix Displays an einen AVR anschließen.
Jedes diser Displays braucht 12 Anschlüsse (5 um die zu beleuchtende
Spalte auszuwählen, 7 für die Zeile). Ist ja logisch ;-)
Weil der AVR aber nicht 4 x 12 = 48 Anschlüsse hat, habe ich mir
überlegt alle Displays parallel zu schalten. Dann zeigen natürlich auch
erstmal alle die selben Daten an... die Schaltung dazu habe ich mal oben
angehängt (jaja, ich weiß: das ist nicht standardkonform, aber ist auch
nur ne schnelle PaintBrush-Skizze) ;-)
Mein Problem ist nun das folgende:
Mit 4 weiteren Pins vom AVR möchte ich steuern, welches Display die
gerade anliegenden Daten anzeigt (also multiplexen). So dass
schlussendlich jedes Display etwas anderes darstellen kann.
Aber wie mach ich das am sinnvollsten???
Die einzige Lösung die mir einfällt wäre 20 weitere Transistoren
einzubauen, nämlich vor alle Spalten-Eingänge an den Displays. Und die
könnten dann jeweils in 5er Gruppen mit einem Pin vom AVR gesteuert
werden.
Das ist natürlich enorm (löt-)aufwendig. Geht das nicht einfacher???
Vielen Dank für eure Ideen!!!
>Mit 4 weiteren Pins vom AVR möchte ich steuern, welches Display die>gerade anliegenden Daten anzeigt (also multiplexen).
Da drängt sich sofort die Frage auf: Was soll das bringen?
deine matritzen sind, wenn ich das richtig sehe alle parallel geschaltet
- wie willst du da einen punkt erreichen, wenn du leitungen beschaltest,
dann leuchten immer 4 punkte....
vielleicht noch etwas ausgehender mit dem multiplexing/charlieplexing
von led matritzen nachdenken...
maddin
maddin wrote:
> vielleicht noch etwas ausgehender mit dem multiplexing/charlieplexing> von led matritzen nachdenken...
Um das Nachdenken zu Beschleunigen:
LED-Matrix
Sinnvoll wär ein 1:7 Multiplexing über die Zeilen, und jede Menge
Schiebe-Register über die Spalten.
Wenn Du die einzelnen Displays auch noch nacheinander schaltest, würde
jede leuchtende LED nur noch für ein achtunzwanzigstel der Zeit Strom
kriegen, wär also recht dunkel...
/Ernst
Hallo Lukas,
das kannst du wie folgt lösen:
Die 5 Leitungen für die Spalten, schließt du nicht direkt an alle 4
Anzeigen, sondern schaltest davor 3 x 74138 3zu8 Decoder/Demultiplexer.
Mit diesen Decodern (74138) schaltetst du immer nur einen Ausgang.
Somit musst du um ein komplettes Bild darzustellen, 20 mal eine Adresse
und die zugehörigen 7 Reihen anzeigen.
Für die Spalten Anschaltung brauchst du 3 Bits (A, B, C)
und 3 Freigabe Bits für je einen 74138.
Macht zusammen 6 Bits.
Viel Spaß beim bauen
Vielen Dank an die letzten drei Poster :-)
Allerdings bin ich mir nicht ganz sicher, ob es nicht doch einfacher und
billiger wäre der Schaltung einen zusätzlichen ATMega16 zu spendieren,
der nur für die Displaysteuerung zuständig ist...
eieiei, ist das schwierig ^^
Statt einzelner Transistoren kann du auch Darlington-Arrays benutzen.
Ein bisschen weniger Lötarbeit und viel weniger gefriemel.
Dann würde ich die Spalten direkt über 20 (4 * 5) Pins am Atmega16
ansteuern/versorgen.
Die 7 reihen der Displays alle parallel schließen und über 7 pins am
Atmega so die jeweilige Reihe auswählen die von angesteuert werden soll.
(Darlington array und evtl. noch den demultiplexer dazwischen)
Die Vorwiderstände für die LED-Displays sollten an den 20 Spalten-pins
sein. Das sind zwar 20 Widerstände aber so ist garantiert dass pro
Widerstand immer nur eine LED in serie liegt.
Weitere Vorteile der Schaltung sind
- ein aktiver Pixel auf dem Display ist immerhin 1/7 der Zeit wirklich
an
- jeder Ausgangspin am uC wird durch nur eine LED belastet der ganze uC
durch höchstens 20 auf einmal
- nur 7 Transistoren!!!
Für das ganze müssen natürlich die Reihen deiner Displays die Kathoden
der LEDs sein.
Ich hab das so für ein 8x8 Display gelöst und es geht prima.
Vorwiederstände sind bei mir 100 Ohm, der Demultiplexer ist der 74HC238,
das Darlington array ist ULN2803.
Hi, noch was kleines zum hinzufügen..
Ich hab mal das Datenblatt vom ATmega16 angeschaut.
Da steht drin dass alle Ausgangspins zusammen nicht mehr als 200mA
liefern sollten (bei PDIP bauform). Und auch noch ein paar andere
Limitierungen, was das angeht. (Seite 294)
Naja.. bei 20 pins macht das 10 mA pro LED, was von der helligkeit her,
gerade so ok ist. Bei mir sind es bei den 100 Ohm Vorwiderstand 15mA pro
LED.
Ich würde das aber einfach mal ignorieren und checken ob der uC nicht zu
warm wird. Die Pixel sind ja normalweise auch nicht alle gleichzeitig
an. Allerdings hab ich keine Erfahrung ob das dann die Lebensdauer von
dem uC beeinflusst. Vielleicht kann hier jemand anderes weiterhelfen.
@ Lukas
>ngs bin ich mir nicht ganz sicher, ob es nicht doch einfacher und>billiger wäre der Schaltung einen zusätzlichen ATMega16 zu spendieren,>der nur für die Displaysteuerung zuständig ist...
Nein, ist es nicht. Ausserdem langeweilt der sich dann zu Tode. Für
deine vier 5x7 Matritzen brauchst du 7 + 4*5 = 27 Pins. Wie bereits von
anderen geschrieben musst du sinnvoillerweise ein 7:1 MUX bauen, welche
20 Bit (4x5) pro Zeile ansteuert. wenn dir die 20 Pins zu viel sind,
nimm drei 74HC595, und mach eine Porterweiterung per SPI, dann brauchst
du nur 7 + 3 Pins, wobei dann allerdings der Controller ein wenig mehr
zu tun hat. Sollte aber nciht ins Gewicht fallen.
http://www.mikrocontroller.net/articles/Porterweiterung_mit_SPI>eieiei, ist das schwierig ^^
Nöö, immer wieder das Gleiche.
Und bevor ich es vergesse. Ja, du musst noch Leistungstreiber einsetzen,
normale Digital-ICs können die Ströme nicht schalten.
MfG
Falk