Forum: Mikrocontroller und Digitale Elektronik 7-Segment Anzeige


von Sercan S. (disaster35)


Lesenswert?

Hallo Leute,

ich bin ein Anfänger in Mikrocontrollerprogrammierung und lese mir 
gerade die AVR-Tutorial & AVR-GCC-Tutorial durch. Vorher habe ich mit 
den "Schicki-Micki" Sprachen (so wie Ihr es wahrscheinlich nennen 
würdet) C# und Java aktiv programmiert. Damit ich erstmal ein 
Einstiegshilfe habe, habe ich mir ein Lernpaket mit ein Programmierboard 
und sämtlichen Bauteilen besorgt. Nun zu meinen eigentlichen Problem.

Es geht um ein 7 Segment Anzeige, welches ich ansteuern will. Meine 
Frage hierzu ist, wie gehe ich am besten vor? In meinem Studium damals 
hatten wir in EWB solche 7 Segment Anzeigen benutzt gehabt. Ich erinnere 
mich auch, dass wir ein BCD-Decoder benutzt hatten, sprich 4-Bit Zahl 
rein kommen vom Decoder aus die 7 Segmente (abcdefg), die angesteuert 
werden raus. Eben habe ich im Internet ein BCD-Decoder als Bauteil 
gefunden aber weiß nur nicht ob es sich um das gleiche handelt, was man 
damals in den Schaltungen gesehen hat (ja leider ist ein Studium mit 
sehr viel Theorie verbunden und man wird im Praxis eher ins kalte Wasser 
geschmissen).

Bei meinem "Projekt" handelt es sich um insgesamt 6 7-Segmentanzeigen, 
welche angesteuert werden müssen. Anhand weitere Recherchen, fande ich 
leider keine Mikrocontroller die mehr Ein-/Ausgänge hatten als 23. Geht 
man davon aus, dass jedes einzelne 7 Segment anzeige ein Decoder 
vorgeschalten bekommt, bräuchte man 6*4 = 24 Ausgänge. Muss es dadurch 
nun über 2 Controller gesteuert werden? Wenn ich 2 Mikrocontroller habe, 
dann bräuchte ich ja nicht extra die Decoder  besorgen oder? Man könnte 
doch theoretisch auch direkt die 7 Segmente mit den Ausgängen von dem 
Mikrocontroller aus ansteuern, da ich ja durch 2 Controller insgesamt 46 
Ein und Ausgänge hätte und nur 42 ( 7 * 6) davon bräuchte.

Da diese 6 Zahlen im Zusammenhang stehen, müssen die 2 Controller ja 
dann nun auch von einem Hauptcontroller die Werte bekommen? Wie macht 
man das mit den 23 - 21 (für die Segmente) = 2 übrig gebliebenen 
Kontakte? Könnte man so vorgehen:
 Nennen wir die 2 übrigen "Eingänge" A und B. Könnte man ein Impuls an B 
geben,so dass der Controller jetzt weisst, dass ein Input kommt und die 
Zahlen dann in 5 ms Takt durch A einlesen? Sprich Hauptcontroller 
schickt jeweils 5 ms an den Port A vom Controller =
0V - 5V  - 5V - 5V (0111) und schaltet somit die LED's vom ersten 
Segmentanzeige die Ports a, b und c an damit die Zahl 7 erscheint? 
Beenden würde ich den Input erneut durch ein weiteres Impuls vom Eingang 
B, wenn alle 3 Anzeigen ihre Werte bekommen haben.

Das was ich hier erzähle, könnte völlig schwachsinnig, uneffizient und 
in der Form unrealisierbar sein. Entschuldige mich im Voraus.

Wo ich die Beiträge im Forum durchforstet habe bekam ich zu lesen, dass 
ein AVR-ISP-MK2 (Es ist doch ein USB-Schnittstelle oder?) die beste 
Anschaffung sei, was ich machen würde um in Mikrocontroller 
Programmierung ein langzeitig gute Schnittstelle zu besitzen. Allerdings 
war dieses Artikel aus 2011. Hierzu wäre zu Fragen ob es mittlerweile 
eine bessere Schnittstelle gibt, welches Ihr mir empfehlen würdet oder 
ob ich mir den AVR-ISP-MK2 kaufen soll...

Fragen über Fragen,

ich hoffe einige der Spezialisten hier wären bereit einen blutigen 
Anfänger wie mir zu helfen.

Liebe Grüße :)

von Bussard (Gast)


Lesenswert?

Hallo,

das Wesentliche steht hier: 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_7-Segment-Anzeige
oder dort ganz in der Nähe.
Mit Multiplexing kann man etliche 7-S Anzeigen quasi gleichzeitig 
ansteuern.

Gruß

von Pete K. (pete77)


Lesenswert?


von Falk B. (falk)


Lesenswert?

@Sercan Samet Savran (disaster35)

Nomen est Omen?

>Es geht um ein 7 Segment Anzeige, welches ich ansteuern will. Meine

Da bist du nicht der Erste.

>Frage hierzu ist, wie gehe ich am besten vor? In meinem Studium damals

Überlegt ;-)

>hatten wir in EWB solche 7 Segment Anzeigen benutzt gehabt. Ich erinnere
>mich auch, dass wir ein BCD-Decoder benutzt hatten, sprich 4-Bit Zahl
>rein kommen vom Decoder aus die 7 Segmente (abcdefg), die angesteuert
>werden raus.

Das ist der klassiche Ansatz aus den 70er Jahren.

>Bei meinem "Projekt" handelt es sich um insgesamt 6 7-Segmentanzeigen,
>welche angesteuert werden müssen. Anhand weitere Recherchen, fande ich
>leider keine Mikrocontroller die mehr Ein-/Ausgänge hatten als 23.

Das wage ich zu bezweifen ;-) Dennoch macht man sowas heute anders.

Nämlich mit einem kleinen Mikrocontroller, welche die Anzeige als 
LED-Matrix ansteuert.
Dazu noch ein paar Schieberegister und man braucht kaum mehr als eine 
handvoll IOs.

>Geht
>man davon aus, dass jedes einzelne 7 Segment anzeige ein Decoder
>vorgeschalten bekommt, bräuchte man 6*4 = 24 Ausgänge.

Sieht so aus. Aber das macht heute keiner mehr so.

>Muss es dadurch
>nun über 2 Controller gesteuert werden?

NEIN!

>Das was ich hier erzähle, könnte völlig schwachsinnig, uneffizient und
>in der Form unrealisierbar sein. Entschuldige mich im Voraus.

In der Tat ;-)

>Wo ich die Beiträge im Forum durchforstet habe bekam ich zu lesen, dass
>ein AVR-ISP-MK2 (Es ist doch ein USB-Schnittstelle oder?) die beste
>Anschaffung sei, was ich machen würde um in Mikrocontroller
>Programmierung ein langzeitig gute Schnittstelle zu besitzen.

Das ist ein Programmieradapter. Dazu braucht man noch den eigentlichen 
Controller.
Nimm lieber einen Arduino, da ist alles schon drauf, Programmieradapter 
+ eigentliche Mikrocontroller.

von Peter D. (peda)


Lesenswert?

Für Anfänger sind LED-Treiber-ICs gut geeignet, z.B. MM5450, MAX7221. 
Die lassen sich bequem über SPI ansteuern.

von Sercan S. (disaster35)


Lesenswert?

Es ist echt schön zu sehen wie aktiv die Mitglieder hier sind. Ich habe 
meinen eigenen Beitrag überflogen ob ich da irgendwas vergessen hatte 
und schon waren da die Antworten :)

Ich bedanke mich bei euch allen :)


@Bussard
Danke. Ich lese es mir mal durch und falls ich nicht weiterkommen sollte 
melde ich mich nochmals :)
> Hallo,
>
> das Wesentliche steht hier:
> http://www.mikrocontroller.net/articles/AVR-Tutori...
> oder dort ganz in der Nähe.
> Mit Multiplexing kann man etliche 7-S Anzeigen quasi gleichzeitig
> ansteuern.
>
> Gruß

von Sercan S. (disaster35)


Lesenswert?

Wenn du Controller meinst, darf ich davon ausgehen? Dass du den 
Mikrocontroller meinst ? Ich wollte das eigentlich selbst löten :D
> Das ist ein Programmieradapter. Dazu braucht man noch den eigentlichen
> Controller.
> Nimm lieber einen Arduino, da ist alles schon drauf, Programmieradapter
> + eigentliche Mikrocontroller.

von Gerald B. (gerald_b)


Lesenswert?

Schieberegister wurden schon angesprochen. Sogenannte Portexpander sind 
ebenfalls einen Blick darauf wert.

von m.n. (Gast)


Lesenswert?

Gerald B. schrieb:
> Schieberegister wurden schon angesprochen.

Hier eine praktische Ausführung: 
http://mino-elektronik.de/7-Segment-Variationen/LCD.htm#led1

von Sercan S. (disaster35)


Lesenswert?

Also, ich habe mir das mit dem Multiplexing angeschaut und für mich hört 
sich das erstmal nach einer super Sache an. Ich muss dabei alle 6 
7-Segmentanzeigen an den gleichen Ausgängen anschließen. Sprich ich 
bräuchte dann 7 Ausgänge + 6 Steuerausgänge um die Segmentanzeigen an 
und auszuschalten. Leider konnte ich mit den Assembler-Code nicht mehr 
viel anfangen, da es so viel zurückliegt, wo man es im Studium gemacht 
hat. Im Lernpaket waren alle Anleitungen in C programmiert.
Also es ist soweit richtig : 7 Ausgänge für allen abcdefg-Ports der 
Anzeigen und 6 Steuerausgänge, worüber ich die 7-Segmenanzeigen 
nacheinander an und abschalte? Sprich ich bräuchte 13 Ausgänge ? :)

von Georg (Gast)


Lesenswert?

Sercan S. schrieb:
> Sprich ich bräuchte 13 Ausgänge ? :)

Wie schon radio Eriwan sagte, im Prinzip ja. Allerdings haben die 
sogenannten 7-Segment-Anzeigen 8 Segmente, es kommt der Digitalpunkt 
dazu, und den sollte man immer mit vorsehen, der wird auch oft 
gebraucht. Also 8 Segment-Treiber und 6 Digit-Treiber.

Georg

von Md M. (Firma: Potilatormanufaktur) (mdma)


Lesenswert?

Sercan, bist du zufällig der Typ, der neulich vor mir an der Conrad 
Bauteiletheke stand? Der hat auch einen Haufen 7-Segment-Anzeigen 
gekauft und was von BCD gefaselt.

von Sercan S. (disaster35)


Lesenswert?

Ich war tatsächlich vor einer Woche in Conrad. Aber habe keine 
7-Segment-Anzeigen gekauft. Also ich war es nicht. Wahrscheinlich war 
das ein Student dessen Hirn mit veralteten Techniken zugestopft wird, 
sowie es bei mir einmal war... :D
> Sercan, bist du zufällig der Typ, der neulich vor mir an der Conrad
> Bauteiletheke stand? Der hat auch einen Haufen 7-Segment-Anzeigen
> gekauft und was von BCD gefaselt.

von Crazy Harry (crazy_h)


Lesenswert?


: Bearbeitet durch User
von Robin S. (der_r)


Lesenswert?

Peter D. schrieb:
> Die lassen sich bequem über SPI ansteuern.

Nein, da der Lerneffekt bezüglich der eigentlichen Aufgabe ausbleibt, 
ist das nicht zu empfehlen.

Gerald B. schrieb:
> Schieberegister wurden schon angesprochen. Sogenannte Portexpander
> sind
> ebenfalls einen Blick darauf wert.

Kann ich nicht empfehlen, die I2C Expander wie PCF8574 sind deutlich 
langsamer als die üblichen Schieberegister 74595 oder 4094. Führt bei 
mehreren Expandern, zwischen denen umgeschaltet werden muss, sehr 
schnell zu Ghosting.


@ TO: Kaufe dir ein paar 74HC595 Schieberegister und versuche erstmal 
damit eine Siebensegmentanzeige anzusteuern. Läuft das, nimmst du ein 
weiteres Schieberegister und 6 Transistoren, um zwischen den 6 Anzeigen 
zu multiplexen. Mein Tipp.

von posti (Gast)


Lesenswert?

Hi

Habe selber auch einige dieser Teile in Benutzung:

Crazy H. schrieb:
> Schau mal:
> 
http://www.ebay.de/itm/MAX7219-LED-Dot-matrix-8-Digit-Digital-Display-Control-Module-for-Arduino/272279959978
>
> 3 Anschlüsse + 2 für die Spannung

Allerdings nicht an einem Arduino - ich hoffe, die Anzeige verzeiht mir, 
daß ich mit einem normalem AVR dran rum bastel.
Timing übrigens recht unkritisch, auch stört's den ATtiny beim 
Umprogrammieren nicht, daß das Display an PB0-2 hängt (was aber 
allerhand Müll auf's Display zaubert).

Netter Nebeneffekt: Der µC kann pennen, wenn die Anzeige abgefrühstückt 
ist - wie bei einem LCD, da hat der sendende µC ja auch NIX mit der 
eigentlichen Anzeige zu tun.

Auch wenn ich kein Freund vom Aduino bin - man muß ja nicht immer ALLES 
selber machen.

MfG

von Crazy Harry (crazy_h)


Lesenswert?

Wieso muß man da nen Arduino haben? Datenblatt des MAX7219 lesen und 
selber programmieren. Ich bin auch kein Arduino-Jünger.

..... ok erst jetzt vollständig kapiert :oD

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Robin S. schrieb:
> Nein, da der Lerneffekt bezüglich der eigentlichen Aufgabe ausbleibt,
> ist das nicht zu empfehlen.

Kommt drauf an, wie gut man in Schaltungstechnik ist. Für Anfänger ist 
es nicht gerade leicht, gleichzeitig an 2 Baustellen zu arbeiten.
Man muß ja keine fertige Lib nehmen, sondern kann auch selber nach 
Datenblatt programmieren.

von Md M. (Firma: Potilatormanufaktur) (mdma)


Lesenswert?

Sercan S. schrieb:
> Ich war tatsächlich vor einer Woche in Conrad. Aber [...] ich war es nicht.

Hätte wie Faust auf Auge gepasst. Ne Hand voll 7-Segs. und erzählt 
seiner Schnalle, die dabei war was von BCD.

> Wahrscheinlich war
> das ein Student dessen Hirn mit veralteten Techniken zugestopft wird,
> sowie es bei mir einmal war... :D

Von der Fratze her war er auch eher C#/Java-Nerd. Musste sich den 
Lötkolben auch erst dazu kaufen :)

von Gerald B. (gerald_b)


Lesenswert?

Robin S. schrieb:
> Kann ich nicht empfehlen, die I2C Expander wie PCF8574 sind deutlich
> langsamer als die üblichen Schieberegister 74595 oder 4094. Führt bei
> mehreren Expandern, zwischen denen umgeschaltet werden muss, sehr
> schnell zu Ghosting.

Kommt immer drauf an, was man machen will. Setze mal ein Display nen 
halben Meter oder weiter vom µC ab. Mit I2C funktioniert das recht 
problemlos, bei SPI, ohne Treiber und dann vielleicht noch mit mehreren 
parallelliegenden Takteingängen  mehrerer Schieberregister, da kann die 
Luft schon mal dünn werden ;-)

von Ralph S. (jjflash)


Angehängte Dateien:

Lesenswert?

... so, ich hab mal meinen Code von STM8 und STM32 auf AVR portiert.

Im Anhang ein Softwaremodul für 7-Segmentanzeigen, die über zwei 74HC595 
Schieberegister getrieben werden. Die Schieberegister werden 
gemultiplext.

So können an die kaskadierten Schieberegister max. acht 
7-Segmentanzeigen angeschlossen werden.

Mittels eines #defines kann ausgewählt werden, ob die angeschlossenen 
Anzeigen gemeinsame Kathode oder Anode besitzen.

Vllt. mach ich auch noch mal irgendwann einen Schaltplan dazu...

Wers brauchen kann (außer dem Threadersteller):

Bedient Euch !

(und ja, ich hab das absichtlich aus meiner Bibliothek herausgerissen 
und nicht in ein externes File gemacht, damit auch jeder damit umgehen 
kann).

Der Code sollte ausreichend dokumentiert sein.

Viel Spaß

Ralph

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
Noch kein Account? Hier anmelden.