Hallo zusammen, ich möchte gerne drei 7-Segment-Anzeigen über einen ATMega8 und über einen 7-Segment-Treiber ansteuern. Wenn Beispielsweise der Port auf 00000000 steht, soll in den 3 Anzeigen "000" stehen, und wenn der Port auf 11111111 steht, soll die Anzeige "255" wiedergeben. Wie geht sowas? Ich finde nirgends einen Chip der sowas kann. Oder kann man 3 Chips, die die 7 Segment Anzeigen ansteuern, kombinieren? Christian
Max 7219 wäre für Dich geeignet! Jedoch nicht Parallel sondern seriell mit 3 Leitungen Gruß Peter
Nimm doch Charlieplexing, dann geht das alles ohne zweites IC. mfg mf
Das einfachste: nimm einen MC und programmier ihn dafür: - 8 Pins als Eingang - 7 Pins für die Segmente (mit Vorwiderstand) - 3 Pins für die Digits (über Treibertransistoren) Paßt z.B. ein ATtiny2313 oder ATmega48 (5 IOs frei). Die paar Bytes Code sind schnell geschrieben (in C). Peter
Charlieplexing? Wie geht sowas vor sich? Ein C-Codebeispiel wäre da sehr sehr hilfreich, wie ich die 8-Bit breite Portausgabe auf 3 unterschiedliche 7-Segment-Anzeigen verteile. Ist das sowas wie Multiplexing mit 3 Transistoren zum zeitversetzten Ansteuern der Anzeigen? EDIT: Danke Peter. Bitte C-Code Beispiele, wie ich 11111111 auf 3 Displays aufteile! Danke :-)))))))))
Christian W. schrieb: > Wie geht sowas? Ich finde nirgends einen Chip der sowas kann. Naja, das geht schon. Ist aber ziemlich, ziemlich sinnlos, weil du viel Logik verbrätst, während sich dein Mikrocontroller langweilt. Bau dir lieber eine ordentliche Routine in Software, die 3 Anzeigen an einem Port verwaltet. Beispiel: PC0-PC3: Daten, die an einem Segment angezeigt werden sollen. PC4,5,6: Latch-Eingang für je ein Segment. void dsp_char(unsigned char char2display) { /* set MSB digit */ PORTC = (PORTC & 0xf0) | (char2display / 100); /* latch to 7seg driver */ PORTC |= (1<<PC4); PORTC &= ~(1<<PC4); /* set mid digit */ PORTC = (PORTC & 0xf0) | ((char2display % 100)/10); /* latch to 7seg driver */ PORTC |= (1<<PC5); PORTC &= ~(1<<PC5); /* set LSB digit */ PORTC = (PORTC & 0xf0) | ((char2display % 10); /* latch to 7seg driver */ PORTC |= (1<<PC6); PORTC &= ~(1<<PC6); } Als Treiber-IC: 74HC4543
Danke, klingt perfekt. Speziell an dem C-Code ist es noch gescheitert. War mir nicht klar, wie ich im AVR Studio eine 3 stellige int-Zahl so zersäge, dass sie auf 3 Displays ausgegeben werden kann. Also ich brauche praktisch dann 3 mal den 74HC4543? Christian
Christian W. schrieb: > Speziell an dem C-Code ist es noch gescheitert. War mir nicht klar, wie > ich im AVR Studio eine 3 stellige int-Zahl so zersäge, dass sie auf 3 > Displays ausgegeben werden kann. Verstehst du denn den Code oben? > Also ich brauche praktisch dann 3 mal den 74HC4543? Ja.
Michael H. schrieb: > Verstehst du denn den Code oben? Zum Großteil ja ;) Es wird aus der gelieferten Zahl zunächst die 100er oder 10er oder 1er Stelle errechnet, und dann je nachdem auf Display 1, 2 oder 3 ausgegeben. Stimmts so? Aber warum ist der PIN nur sehr sehr kurz ein? PORTC |= (1<<PC4); PORTC &= ~(1<<PC4);
Christian W. schrieb: > Stimmts so? Ja. > Aber warum ist der PIN nur sehr sehr kurz ein? Anhang. Das IC übernimmt und speichert (=latcht) die Daten an seinen 4 Datenbits D0-D4 genau dann, wenn an LD eine steigende Flanke kommt. Sind die Daten übernommen und LD wieder low, kann an den Datenbits Beliebiges anliegen ohne dass es den 744543 oder die Anzeigen interessiert.
> Ich finde nirgends einen Chip der sowas kann.
Erstes nachzählen sagt, daß er mindestens 31 Anschlüsse haben müsste.
Ein ispLSI2032 hat die und kann die Aufgabe übernehmen.
Da aber der Eine es so und der Andere es anders haben will, muß dieser
ispLSI2032 vorher programmiert werden.
Das geht mit ein paar Leitungen vom Parallelport eines PCs aus recht
einfach, aber man könnte dann auch gleich einen Microcontroller nehmen.
Der ispLSI ist nämlich einfach rasend schnell, so schnell muß es in der
Anwendung gar nicht sein.
Andere Leute zeigen die Zahl in hexadezimal an und nehmen 2 Anzeigen vom
Typ HDSP-0772
Danke für die Vorschläge. Das mit dem zwischengeschaltenem 74HC4543 hört sich ganz gut an, ich denke, so werd ichs auch machen :-) Ist das eigentlich mit einem ATMega8, 3x 74HC4543, und 3 7-Seg-Anzeigen möglich, dass ich von 3 Extra-Pins vom µC nochmal eine Verbindung zu den mittleren Balken der 3 Anzeigen lege, damit ich Bindestriche aufleuchten lassen kann? Christian
Geht, falls du Dioden dazusetzt. Aber dein Vorhaben geht auch einfacher: Lass eine 0 anzeigen und setz die PH-Leitung.
Christian W. schrieb: > Ist das eigentlich mit einem ATMega8, 3x 74HC4543, und 3 7-Seg-Anzeigen > möglich, dass ich von 3 Extra-Pins vom µC nochmal eine Verbindung zu den > mittleren Balken der 3 Anzeigen lege, damit ich Bindestriche aufleuchten > lassen kann? Wenn du sowieso noch 3 Piuns freihast, warum pfeifst du dann nicht auf die zusätzlichen Latches? Bisher sind wahrscheinlich alle davon ausgegeangen, dass du nicht genug Pins übrig hast. Daher haben alle rund um das Problem rumgearbeitet. http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige
Pins habe ich tatsächlich noch frei, das stimmt. Aber ich wollte mir durch die Anzeigentreiber 4 Pins sparen, die ich dann anderswo verwenden kann. Meint ihr eine Anzeigenmatrix mit 3 Transistoren? Daran hab ich auch schon gedacht... Was macht der "PH" am 74HC4543? Das Reichelt Datenblatt ist da sehr sparsam mit Infos. Christian
Karl heinz Buchegger schrieb: > Bisher sind wahrscheinlich alle davon ausgegeangen, dass du nicht genug > Pins übrig hast. Daher haben alle rund um das Problem rumgearbeitet. Hm, nein. Ich sehe den Vorteil von zusätzlicher Hardware darin, dass die 3 Latches einem C-Neuling das Multiplexen "per Hand" in Code ersparen. Wenn schon die Zerlegung eines (falsch gewählten) Datentyps zum Problem wird, ist das nur eine zusätzliche Hürde. Bitte Nichts für Ungut. Aber ja, mit den Bindestrichen hat deine Lösung dann natürlich ihren Charme...
> Karl heinz Buchegger schrieb: > Aber ja, mit den Bindestrichen hat deine Lösung dann natürlich ihren > Charme... Wie? Ich verstehe grad nicht... :-)
Michael H. schrieb: > Wenn schon die Zerlegung eines (falsch gewählten) Datentyps zum Problem > wird, ist das nur eine zusätzliche Hürde. Bitte Nichts für Ungut. Nein, nein Ist schon ok. Wir haben nun mal alle andere Ansichten. Multiplexen ist zwar nicht sooo einfach, aber so schwer auch wieder nicht. Meine 5 Cent :-) > Aber ja, mit den Bindestrichen hat deine Lösung dann natürlich ihren > Charme... Auch bei Buchstaben oder 'coolen' Einschaltmustern.
Also wenn ichs mir recht überlege, bin ich mit einem gemultiplexten System dann doch besser dran, wenn ich richtig rechne, gehen da 11 PINs hops, 8 für die 7-Segment Anzeigen plus Punkt, und 3 für die Transistoren zum Displays schalten. Da gehn ja dann auch in eingeschränkter Weise Buchstaben, was ja mit dem 74HC4543 nun wieder überhaupt nicht geht. Mit meiner zusammengerechnet mehrmonatigen C-Erfahrung krieg ich das schon zum Laufen :-))) (grübel...)
Christian W. schrieb: > Mit meiner zusammengerechnet mehrmonatigen C-Erfahrung krieg ich das > schon zum Laufen :-))) Wenn nicht: Die Grundlagen stehen im AVR-Tutorial. Auch wenn das Assembler ist, sollte es verständlich sein. Zumindest das Prinzip müsstest du rauskriegen. Und wenn nicht ... du weißt wo du uns findest
Christian W. schrieb: > Also wenn ichs mir recht überlege, bin ich mit einem gemultiplexten > System dann doch besser dran Gute Entscheidung. Decoder-ICs wird es auch nicht mehr lange geben. Man braucht sie nicht mehr, bzw. nur noch als Ersatzteil für ältere Geräte. Peter
Wie verhält es sich da eigentlich mit dem Strom der durch jedes Segment fließt, wenn man 3 Anzeigen per Multiplex ansteuert? Gibts da eine Faustregel, um wieviel der Strom je Segment erhöht werden muss, damit alles wieder in Originalhelligkeit leuchtet?
Christian W. schrieb: > Wie verhält es sich da eigentlich mit dem Strom der durch jedes Segment > fließt, wenn man 3 Anzeigen per Multiplex ansteuert? Gibts da eine > Faustregel, um wieviel der Strom je Segment erhöht werden muss, damit > alles wieder in Originalhelligkeit leuchtet? Bei 3 Anzeigen, kannst du einfach den 3-fachen Strom durchjagen. Irgendwann geht das natürlich nicht mehr. Bei 15 Anzeigen kann man nicht einfach anstelle von 20mA deren 300mA durchjagen. Da machen dann die LED sicher nicht mehr mit, auch wenn man im Impulsbetrieb mit dem Strom höher als im Dauerbetrieb gehen kann. Details weiß das jeweilige Datenblatt.
Siehe: http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige#Mehrere_7-Segment_Anzeigen_.28Multiplexen.29 Mehrere 7-Segment Anzeigen (Multiplexen):
1 | Bei genauerer Betrachtung fällt auch auf, dass die vier Anzeigen nicht mehr |
2 | ganz so hell leuchten wie die eine einzelne Anzeige ohne Multiplexen. Bei |
3 | wenigen Anzeigen ist dies praktisch kaum sichtbar, erst bei mehreren |
4 | Anzeigen wird es deutlich. Um dem entgegen zu wirken lässt man pro Segment |
5 | einfach mehr Strom fließen, bei LEDs dürfen dann 20mA überschritten werden. |
6 | Als Faustregel gilt, dass der n-fache Strom für die (1/n)-fache Zeit |
7 | fließen darf. Details finden sich im Datenblatt unter dem Punkt Peak- |
8 | Current (Spitzenstrom) und Duty-Cycle |
Aha, wären dann also rein theoretisch 60mA. Ich probiers mal aus. Wollte nur sichergehen dass da nix kaputtgeht...
Hi, es gibt natürlich 1000 Möglichkeiten. Eine noch: du könntest 3 74HC595 nehmen: http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf alle hintereinander schalten, und an jeden chip eine Anzeige. Du hast mehrere Vortiele: Wenn du Anzeigen hinzufügst musst du nur die funktion ein weiteres Mal aufrufen die du dafür schreibst. Du kannst alle Segmente einzeln ansteuern. Du benötigst nur 3 4 Pins am Prozessor. Man kommt schnell an Ziehl. Im gegensatz zum 4543 bei dem du auch eine ganze Menge Vorwiderstände brauchst, hättest du einiges mehr an freiheiten... und der Chip kann auch noch mal für andere Aufgaben genutzt werden, wenn man mal eine Matrix bauen will o.ä. Ablauf ist dann so: Mit Clock und Data die Daten in die Registerreihe klappern. Mit einer Funktion die aus 4 Bit 7 Segmente macht, und einer Funktion die diese 7 Segmente plus den Punkt in eine 8 Bit Variable verknispelt um sie dann in die 595 zu schieben. Diese Funktion 3 mal aufrufen, immer mit entsprechnd zerlegtem Ineger Wert und dann den Strobe einschalten, schon stehts auf dem Display... Gruß, Thorsten
Thorsten S. schrieb: > Im gegensatz zum 4543 bei dem du auch eine ganze Menge Vorwiderstände > brauchst, hättest du einiges mehr an freiheiten... und der Chip kann Da würde ich gerne einen Grund zu den Vorwiderständen bekommen.
hier noch ein paar Infos wenn man das Forum 5min benutzt bevor man fragt: Beitrag "3 Stück 7- Segmentanzeigen mit 8 bit füttern" Beitrag "Binäre Codierung, Dezimal anzeigen" http://www.pollin.de/shop/dt/NTYwOTk4OTk-/Bauelemente/Aktive_Bauelemente/IC/LCD_Treiber_ICM7211AM.html Beitrag "7 Segment LCD mit ICM 7211" http://www.elv.de/output/controller.aspx?cid=153&detail=1&detail2=45 Gruß, Thorsten
Eine weitere Möglichkeit für Bastler ist der Baustein SAA1064. Eingang: I2C Versorgung: 5-12V Ausgang: 16 Leitungen für 2x 7-Segment + Punkt, Multiplex: Kann mit 2 Externen NPN-Transistoren 4 Segmente. Vorteile: Keine Vorwiderstände für die LED's nötig - Strom-Ausgänge. Kann die Helligkeit in einigen Stufen Einstellen. Nachteil: Braucht etwas Platz auf der Leiterplatte - DIL24 Wide. I2C kann an nur 2 Pins über Software in C sehr simpel implementiert werden. Es gibt dafür auch fertige Vorlagen. MFG:MBP Markus
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.