www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Drei 7-Segment-Anzeigen über nur einen Port ansteuern


Autor: Christian W. (christian_w)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: _Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Max 7219 wäre für Dich geeignet! Jedoch nicht Parallel  sondern seriell 
mit  3 Leitungen
Gruß
Peter

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm doch Charlieplexing, dann geht das alles ohne zweites IC.
mfg mf

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 :-)))))))))

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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);

Autor: Michael H. (michael_h45)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MaWin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geht, falls du Dioden dazusetzt.

Aber dein Vorhaben geht auch einfacher: Lass eine 0 anzeigen und setz 
die PH-Leitung.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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-Tutori...

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Karl heinz Buchegger schrieb:
> Aber ja, mit den Bindestrichen hat deine Lösung dann natürlich ihren
> Charme...
Wie? Ich verstehe grad nicht... :-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke :-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Siehe:
http://www.mikrocontroller.net/articles/AVR-Tutori...

Mehrere 7-Segment Anzeigen (Multiplexen):
Bei genauerer Betrachtung fällt auch auf, dass die vier Anzeigen nicht mehr
ganz so hell leuchten wie die eine einzelne Anzeige ohne Multiplexen. Bei
wenigen Anzeigen ist dies praktisch kaum sichtbar, erst bei mehreren
Anzeigen wird es deutlich. Um dem entgegen zu wirken lässt man pro Segment
einfach mehr Strom fließen, bei LEDs dürfen dann 20mA überschritten werden.
Als Faustregel gilt, dass der n-fache Strom für die (1/n)-fache Zeit
fließen darf. Details finden sich im Datenblatt unter dem Punkt Peak-
Current (Spitzenstrom) und Duty-Cycle

Autor: Christian W. (christian_w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aha, wären dann also rein theoretisch 60mA. Ich probiers mal aus. Wollte 
nur sichergehen dass da nix kaputtgeht...

Autor: Thorsten S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael H. (michael_h45)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Thorsten S. (whitejack)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: MBP-Bayern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.