PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 7 Segmentansteuerung mit Atmega



mollyman
03.06.2013, 16:46
Hallo zusammen

ich habe ein kleines Problem und vielleicht kann mri einer Helfen.

Ich möchte eine Anzeige mit 7 Segementanzeigen aufbauen.

Die Anzeige besteht aus 12 blöcken a 9 St 7Segmenten
sowie 3 Blöcken a 6 St 7Segmenten

jeden block muss ich einzeln ansteuern können.
Dazu hatte ich mir gedacht, dass ich je Block eine entsprechende Anzahl Schieberegister verwenden.

Soweit ich das verstanden habe, benötige ich 3 Ausgänge pro Block, ( Data, Clock, Strobe)
Das würde bedeuten ich benötige eine Atmega der mir 45 Ausgänge bietet.

Allerdings gibt es ein KO Kriterium, es darf kein Bauteil mit SMD Löttechnik sein !!

Der einzige Ansatz der mir einfallen würde, ist es die Anzeigen auf 2 AVR aufzuteilen. Das finde ich aber nicht glücklich.

Hat einer zufällig eine Idee ?

for_ro
03.06.2013, 18:56
Hallo mollyman,
ich weiss nicht, welche Schieberegister du im Auge hast, aber alle sollten einen Enable Eingang haben.
Dann kannst du alle Gruppen parallel an deine Ausgänge hängen. Die ganzen Enable dann entweder separat auf jeweils einen Pin oder noch einen BCD zu DEC oder Hex Decoder dazwischen. Dann kommst du im besten Fall mit vielleicht 10 Leitungen aus.
Schreiben kannst du ja sowieso immer nur in eine Schieberegister Reihe.

BMS
03.06.2013, 20:26
Hallo,
das wird sicher ein größeres Projekt :D Das sind immerhin 126 Siebensegmentanzeigen ;)
Um den Aufwand einschätzen zu können : Unter folgendem Link hat jemand 64 alphanumerische Anzeigen realisiert http://www.fritzler-avr.de/HP/ledscreen.php .
Dort wurden die Anzeigen mit Multiplexing betrieben.
Der Stromverbrauch ist schon beachtlich.

Es gibt Treiber, die direkt Siebensegmentanzeigen ansteuern können und über I2C angesprochen werden. Z.B. kann SAA1064 kann 4 Stellen direkt ansteuern (ca. 2€).
Ist aber auch sicher eine Frage des Aufwands und der Kosten. Schieberegister sind deutlich günstiger als die SAA1064, auch wird es wohl nicht genug I2C-Adressen geben.

Es kommt auch darauf an, was du genau darstellen möchtest. Falls nur Zahlen nötig sind, kann man evtl mit BCD-Siebensegmentwandlern (7447) oder Zählern mit Siebensegmentausgang etwas erreichen(?).

Grüße, Bernhard

mollyman
03.06.2013, 21:11
Hi

ich wollte 74HC4094 nehmen, die haben einen enable´.
Habe ich das richtig verstanden, dass wenn der enable gesetzt ist, die Ausgänge seine Stellung behalten, solange kenen neuen Daten kommen, selbst wenn es einen neuen Strobe und /oder Clock gibt?

Das Thema mit dem BCD bringt mich auf die idee die Clock und die Strobe über eigene Schieberegisterblöcke anzusteuern. da könnte ich dann für " beleibig" viele SR das Clock mit 3 Ausgängen steuern und das gleiche mit dem Strobe.
oder habe ich da einen Denkfehler.

Danke im voraus

gruß Martin

- - - Aktualisiert - - -


Hallo,
das wird sicher ein größeres Projekt :D Das sind immerhin 126 Siebensegmentanzeigen ;)


Ja definitiv, da jede 7 Segmentanzeige auch 12*8 cm groß ist wird sie rund 2 m hoch und 1 m breit


Um den Aufwand einschätzen zu können : Unter folgendem Link hat jemand 64 alphanumerische Anzeigen realisiert http://www.fritzler-avr.de/HP/ledscreen.php .
Dort wurden die Anzeigen mit Multiplexing betrieben.
Der Stromverbrauch ist schon beachtlich.

Ich schaue mir das morgen mal an, wobei es beim Multiplexing ein helligkeitsthema gibt , so habe ich es zumindest mehrfach gelesen.
Da die Anzeige draußen steht, ist so etwas wenn es stimmt ein KO kriterium



Es gibt Treiber, die direkt Siebensegmentanzeigen ansteuern können und über I2C angesprochen werden. Z.B. kann SAA1064 kann 4 Stellen direkt ansteuern (ca. 2€).
Ist aber auch sicher eine Frage des Aufwands und der Kosten. Schieberegister sind deutlich günstiger als die SAA1064, auch wird es wohl nicht genug I2C-Adressen geben.

Es kommt auch darauf an, was du genau darstellen möchtest. Falls nur Zahlen nötig sind, kann man evtl mit BCD-Siebensegmentwandlern (7447) oder Zählern mit Siebensegmentausgang etwas erreichen(?).


Aufgrund der hohen Anzahl wirken sich schon kleine Preisunterschiede massiv aus.
ich glaube das Thema BCD muss ich mir mal näher ansehen,da es wirklich nur um Zahlen geht.

Danke

Martin
Grüße, Bernhard[/QUOTE]

Klebwax
04.06.2013, 19:53
Ja definitiv, da jede 7 Segmentanzeige auch 12*8 cm groß ist wird sie rund 2 m hoch und 1 m breit

Erzähl doch mal, wieviel Strom ein solches Segment haben will und bei welcher Spannung. Ich möchte wetten, Schieberegister mit LED-Treiber kommen da nicht infrage. Die können weder den Strom noch die Spannung.



Ich schaue mir das morgen mal an, wobei es beim Multiplexing ein helligkeitsthema gibt , so habe ich es zumindest mehrfach gelesen. Da die Anzeige draußen steht, ist so etwas wenn es stimmt ein KO kriterium


Das ist doch logisch. Beim Multiplexen werden Segmente nacheinder angeschaltet, und zwar so schnell, daß man das nicht sieht. Da sie nicht die ganze Zeit leuchten, wirken sie dunkler. Daher müssen sie mit mehr Strom betrieben werden, als im statischen Betrieb. Dabei darf man die Maximalwerte nicht überschreiten, sonst ist die Freude nur kurz. Wie gut man deine LEDs bei hellem Sonnenlicht überhaupt sehen kann, mußt du mal ausprobieren.

MfG Klebwax

mollyman
06.06.2013, 06:40
Ich habe jetzt noch einiges recherchiert

@ Klebwax
Das Thema Strom und Spannung für die Segmente ist abhängig von den verwendeten LED.
Bei Tankstellenanzeigen weden LED mit 3000 MCD verwendet. Daher habe ich mich für folgende Entschieden.
LED 5 mm rot 1,8-2,1 V 20 mA 4000-5000MCD und 140-160 Grad habe ich bei Ebay 1000 Stck für 12 $
Bei der Recherche habe ich ebenfalls erfahren ich muss etwas größer werden, mindestens 14 cm.

Somit soll ein Segment aus 6 in Reihe geschalteten LEDs bestehen. Angeschlossen an 15 V Betriebsspannung.
So ergeben sich pro Segment 15 V und max 140 mA.

Ursprünglich hatte ich vor Schiebregister (4094)mit einem Darlington Array (ULN 2803A) zu nutzen.

@for_ro udn BMS
Die Möglichkeit alle Schiebregister nur über ein enable schalten habe ich entweder nicht richtig verstanden oder geht bei mir nicht.
die Anzeige besteht aus insgesamt 15 Blöcken jeden Block muss ich separat ansteuern können, da die Daten die angezeigt werden jeweils pro Block über den UART an den ATMEGA angeliefert werden.

trotzdem war der Hinweis mit dem BCD echt klasse.
Folgendes habe ich ins Auge gefasst.
An die Ausgänge des Atmega hänge ich die Schieberegister 4094 jeweils mit Data und Clock. Output enable und Strobe permanent auf High.
An je ein Schiebregister kommen dann 2 BCD Bausteine (4511) die können bis 15 V und bis 25 mA pro Ausgang somit kann ich meine LED direkt mit einem 120 Ohm Widerstand daran hängen ohne Leistungsstufe Die BCD Treiber wallte ich dann auch dezentral bei den jeweiligen Segmenten setzen, was dann auch einiges an Kabeln einspart. Problematisch könnte werden, das beim Schieberegister das OE immer auf Hi ist und auch das Store am BCD immer auf Hi ist, somit werden bei jedem Clock die Daten ausgegeben, auch wenn sie noch nicht an der richtigen Stellen sind, das könnte dazu führen das während des stellens des Block wirre Zeichen angezeigt werden. Da ein Block aber maximal aus 7 Segmenten besteht würde dieses aber nur die Dauer von 28 Clocks haben. Da ich nicht weiß mit welcher Taktfrequenz der Atmega die Signale ausgibt, hoffe ich, dass er schnell genug ausgibt, um das man es nicht sieht. Bei unerlaubten Zeichen würde dazu der BCD die Segmente ausschalten.
Allerdings hätte ich gerne somit habe ich einen Eingang und 30 Ausgänge (=15 Blöcke) was ich aber leider dann nicht mehr habe sind Eingänge um über Dipschalter Konfigurationen zu ändern.

Irgendwie habe ich das Gefühl ich brauch ein BUS-System.

- - - Aktualisiert - - -

nur wenn Strobe high ist werden ja die Daten in den Speicher und von dort aus wenn OE high ist an die Ausgänge gegeben.
Wenn ich alle 15 Schiebregister mit Clock und Data Parallel hänge, OE auf permanent high lege und den Strobe separat für jeden Block mit einem Port am Atmega verbinde, müsste ich mit deutlich weniger auskommen. oder habe ich hier einen Denkfehler ?

for_ro
06.06.2013, 19:10
Wenn ich alle 15 Schiebregister mit Clock und Data Parallel hänge, OE auf permanent high lege und den Strobe separat für jeden Block mit einem Port am Atmega verbinde, müsste ich mit deutlich weniger auskommen. oder habe ich hier einen Denkfehler ?
Hatte ich das nicht gesagt?

JoeM1978
06.06.2013, 20:11
Öhm.... mal so ein kleiner einwurf...
Schau dir mal das Datenblatt an vom "MAX7219cng".
der kann "je" 8Stk 7-Segmentanzeigen ansteuern und ist Kaskadierbar. ;-)
und... die gesamte Kaskade wird nur über 3 Drähte angesteuert (Data IN / Load Data / Clock)
Für Bascom gabs da glaub ich sogar schon ein vorgefertigtes Komando fürs senden der daten.
(... müsste aber mal nachschauen in meinen alten projekten)

Hubert.G
06.06.2013, 20:38
Ich habe jetzt noch einiges recherchiert

Somit soll ein Segment aus 6 in Reihe geschalteten LEDs bestehen. Angeschlossen an 15 V Betriebsspannung.
So ergeben sich pro Segment 15 V und max 140 mA.



Wenn man sechs LEDs in Reihe schaltet, sind es pro Segment immer noch 20mA und nicht 140.

Klebwax
06.06.2013, 23:00
Wenn man sechs LEDs in Reihe schaltet, sind es pro Segment immer noch 20mA und nicht 140.

Das die 140mA pro Digit gemeint sind, ist doch klar.


Schau dir mal das Datenblatt an vom "MAX7219cng".

Das die mit max. 5,5V die 6 LEDs in Reihe nicht schalten können, ist auch ebenso klar.

Ubd ebenso klar ist, daß man selbstverständlich eine (ziemlich) lange Kette von Schieberegistern bauen kann, die ohne Glitch am Ausgang komplett neu geladen werden können. Insbesondere, wenn es sich um solche

The 74HC/HCT4094 are 8-stage serial shift registers having a storage latch
handelt.

Es geht hier um 126 Digits, wenn man Dezimalpunkte mit einrechnet, um 1008 Segmente. Eine Kette von Schieberegistern mit ca. 1000 Taps kann man bei 1 MHz (und die Schieberegister in HCMos können leicht das fünfzigfache) tausend mal in der Sekunde neu beschreiben.

Ich würde die Idee mit den BCD Decodern knicken. Ich würde mich auch nicht darauf verlassen, daß ich mit 20mA bei 12V bis 15V auskomme, bevor ich nicht ein Digit als Prototyp aufgebaut und bei vollem Sonnenlicht getestet hätte.

Mein Vorschlag wäre:

ein Schieberegister pro Digit (egal ob 4094 oder 595, aber HC an 5V) und einen ULN2803 als Treiber. Da ist sowohl beim Strom (kann in Summe, also pro Digit, 500mA und mehr) als auch bei der Spannung (50V) ausreichend Reserve. So kann man auf jedem Digit-Display nicht nur Zahlen, sondern alles anzeigen, was sich aus den Segmenten darstellen läßt.

Für die 126 Digits wird im RAM des µC ein Array aus 126 Bytes aufgebaut. Wenn immer sich dort etwas geändert hat, wird es (das Array) komplett per Bitbanging oder per SPI in die Schieberegister übertragen und am Ende gelatched. Dazu braucht man drei Signale: Clock, Daten und CS#/Latch.

Das ganze ist für kleines Geld zu realisieren. 74HCwas_auch_immer und ULN2803 kosten nicht viel. Der 7-Segment Decoder wird in Software realisiert.

Was man noch überlegen könnte, wäre die drei Signale wegen der Leitungslänge zu jedem Displayblock über RS422 Treiber zu führen.

My 2¢,

MfG Klebwax

mollyman
10.06.2013, 15:56
Hatte ich das nicht gesagt?
Möglich, nur hatte ich es nicht so verstanden bzw. das englische Datenblatt hat etwas Verwirrung gestifftet

- - - Aktualisiert - - -


Öhm.... mal so ein kleiner einwurf...
Schau dir mal das Datenblatt an vom "MAX7219cng".
der kann "je" 8Stk 7-Segmentanzeigen ansteuern und ist Kaskadierbar. ;-)
und... die gesamte Kaskade wird nur über 3 Drähte angesteuert (Data IN / Load Data / Clock)
Für Bascom gabs da glaub ich sogar schon ein vorgefertigtes Komando fürs senden der daten.
(... müsste aber mal nachschauen in meinen alten projekten)
Das hört sich fachlich recht interessant an, ich habe mir mal die Datenblatt dazu angeschaut, und es ist mir dabei zwar noch einiges Unklar, allerdings ist die Lösung mit rund 70 € für die Bausteine recht teuer, dazu kann der chip nur 5,5 Volt udn ich brauche mindestens 12 wahrscheinlich sogar 15 oder 24 V. Auch der Strom mit 40 mA Pro Digit ( 7 Segmente) ist viel zu klein, hier brauche ich mindestens 20 mA pro Segment, also 140 mA pro Digit. Damit fällt er leider aus.

- - - Aktualisiert - - -



Ich würde die Idee mit den BCD Decodern knicken. Ich würde mich auch nicht darauf verlassen, daß ich mit 20mA bei 12V bis 15V auskomme, bevor ich nicht ein Digit als Prototyp aufgebaut und bei vollem Sonnenlicht getestet hätte.

Das ist auch mein Vorhaben. Ich habe mir 100 LEDs bestellt, um sowohl die Anordnung, die Größe ( es sind immerhin 75m Sicht zu ermöglichen und natürlich die Helligkeit bei verschiedenen Lichtverhältnissen.



Mein Vorschlag wäre:

ein Schieberegister pro Digit (egal ob 4094 oder 595, aber HC an 5V) und einen ULN2803 als Treiber. Da ist sowohl beim Strom (kann in Summe, also pro Digit, 500mA und mehr) als auch bei der Spannung (50V) ausreichend Reserve. So kann man auf jedem Digit-Display nicht nur Zahlen, sondern alles anzeigen, was sich aus den Segmenten darstellen läßt.

Für die 126 Digits wird im RAM des µC ein Array aus 126 Bytes aufgebaut. Wenn immer sich dort etwas geändert hat, wird es (das Array) komplett per Bitbanging oder per SPI in die Schieberegister übertragen und am Ende gelatched. Dazu braucht man drei Signale: Clock, Daten und CS#/Latch.

Das ganze ist für kleines Geld zu realisieren. 74HCwas_auch_immer und ULN2803 kosten nicht viel. Der 7-Segment Decoder wird in Software realisiert.

Was man noch überlegen könnte, wäre die drei Signale wegen der Leitungslänge zu jedem Displayblock über RS422 Treiber zu führen.

My 2¢,

MfG Klebwax

Das Thema BCD hat den Charme, das man einige Bauteile einspart und weniger Kabel benötigt.
Allerdings ist das Thema Strom und Spannung eines was mich etwas unwohl sein lässt. Die LEDS sollen 20 mA haben der BDC kann aber nur 25 mA. Da ist nicht viel Sicherheit drin.
Gestern war ich zu dem Vorort um mal Referenzen bezüglich der Größe und breite zu bekommen. Die Ziffern werden mind 12 cm wenn nicht sogar 14 cm hoch sein müssen. Ob da 6 LED pro Segment reichen um eine ausreichende Höhe und Dicke zu bekommen, habe ich leichte Zweifel. Wenn nicht muss ich eh mit der Spannung hoch und dann fällt der BCD sowieso wieder aus. Derzeit glaube ich eher an 10 LED pro Segment.
Die Punkte sind kein Thema. Ich benötige nur 10 Punkte die fest an einer Stelle sind, und die wollte ich aus 4 LEDs fest auf Plus legen.
Die 4 Doppelpunkte die ich brauche sollen ebenso beschaltet werden.

Was das Thema angeht, wo lege ich welche Bausteine hin ( auf die Grundplatine oder zu den Segmenten), bin ich mir da bezüglich einer guten Lösung nicht sicher. mit BCD war meine Idee nur die BCDs an die Segmente zu bringen, was 4 Adern pro Ziffer eingespart hätte.
Die Datenblätter zum MC1488 und MC1489 die ich auf der Reichelt Seite finde, sind für mich aber nicht aufschlussreich genug, könnte aber eine Idee sein, um ordentlich Kabel einsparen zu können.

Für das erste werde ich mal einen kleinen Testschaltplan für 4 Digit auf 2 Reihen machen um eine Testgrundlage zu haben.

Danke an Euch für euer Feedback

gruß Martin

- - - Aktualisiert - - -

Hier mal meine Testschaltung

der SWS003 dient für 3 Einstellungen, die Manuell machbar sein sollen, z.B. die Baudrate soll zwischen 2 Werten auswählbar sein.
IC 1 ist mein RS485 eingang
IC 3 soll später über Relais mit Freilaufdiode 5 Lampen Schalten.
Das andere dient dann um 2 x 2 Digits anzusteuern.

Wenn die Bauteile da sind werde ich sie aufbauen. Über ein Feedback vorab, sprich Hinweise auf mögliche Fehler würde ich mich freuen.

Hubert.G
10.06.2013, 16:13
ULN2003 schalten nach GND und sind daher so für dich nicht geeignet.
Wenn du so einen Treiber verwenden willst, dann einen UDN2981 nehmen.

mollyman
10.06.2013, 17:02
ULN2003 schalten nach GND und sind daher so für dich nicht geeignet.
Wenn du so einen Treiber verwenden willst, dann einen UDN2981 nehmen.

Mist nicht daran gedacht, danke für den hinweis ich vergesse immer das bei den Verstärkerschaltungen.

Jetzt müsste es stimmen.

Hubert.G
10.06.2013, 19:36
Hast du die OE-Eingänge der 4094 absichtlich auf +15V gelegt?
Ich denke nicht das das gut ist.

mollyman
11.06.2013, 09:56
Vielleicht ein Gedankenfehler.
der OE soll ja permanent auf HIGH stehen, daher war der Gedanke die Versorgungsspannung als permanentes HIGH zu verwenden.
Da ich nichts gefunden hatte, das als high nur ein TTL level verwendet werden darf, hielt ich es für unproblematisch.

Ich habe es auf +5 V geändert, damit sollte es zumidnest nicht zuviel sein

Hubert.G
11.06.2013, 13:44
Es kommt darauf an wie du den 4094 versorgst. Es sollte kein Input höhere Spannung aufweisen als VCC ist.
Wenn du den 4094 mit 15V versorgst, dann solltest du das Datenblatt des ULN2003 ansehen, der ist für TTL-Pegel. Für höhere Eingangsspannungen ist der ULN2004 vorgesehen.

mollyman
13.06.2013, 04:21
vielen Dank für den Hinweis.

Ich hatte mich die Angabe der Eingangsspannung falsch verstanden.