Forum: Mikrocontroller und Digitale Elektronik 10x Bargraph an AVR


von Alexander G. (graealex) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo Jungs (und Mädels),

ich zerbreche mir gerade den Kopf darüber, wie ich eine 10x 
Bargraph-Anzeige mit möglichst wenig Pins an einem ATTiny angeschlossen 
bekomme. 6 Pins könnte ich maximal opfern, aber als Dilettant gehe ich 
davon aus, dass eigentlich 4 Pins (2^4 = 16) reichen müssten, um eine 
linear ansteigende Anzeige zu realisieren.

Die Bargraphanzeige hat die Anoden und Kathoden der LEDs einzeln 
herausgeführt. Besteuert werden soll sie immer additiv, d.h. von einer 
Richtung sollen entweder 0 Segmente, 1 Segment, 2 Segmente ... 
aufleuchten. Individuelle Segmente müssen nicht ansteuerbar sein.

Ich habe hier auch eine Schachtel 74HC164 und 74HC595 rumfliegen, aber 
die will ich nicht benutzen, wäre ja auch irgendwie Betrug, und 
obendrein ganz schön viele ICs nur für ein bisschen Disco.

Mit 5 Pins (2 x 3 x 2) und Tri-State-Logik könnte ich den Bargraph 
multiplexen, und dann sogar jedes Segment individuell steuern, aber 
eigentlich hat der ATTiny44 mit 3 PWMs und 3 Frequenzmessungen, 
Temperaturmessung plus mehrere PID-Regler schon genug zu tun.

Ich hatte an irgendwas zwischen R2R und der Mehrfachbelegung der Pins 
mit Tri-State an Anode und Kathode gedacht. Beispiel:

PIN0 angeschlossen an Anode Segment 1 und 2
GND angeschlossen an Kathode Segment 1
PIN1 angeschlossen an Kathode Segment 2

PIN0 High-Z, PIN1 High-Z = Kein Segment leuchtet
PIN0 High, PIN1 High-Z = Segment 1 leuchtet
PIN0 High, PIN1 Low = Segment 1+2 leuchtet

Allerdings laufe ich da immer wieder in eine Sackgasse. Irgendwie muss 
ich Gruppen von LEDs zusammenfassen, und dann trotzdem 
Schritt-für-Schritt einzelne LEDs zuschalten können.

Ein Wegweiser in die richtige Richtung würde mir hier schon reichen. 
Danke für jegliche Art von Kommentaren.

Grüße, Alex

von Guido C. (guidoanalog)


Lesenswert?

Hallo,

Suchwörter hierzu "avr charlieplexing" heißen.
http://makezine.com/projects/charlieplexing-leds-with-an-avr-atmega328-or-arduino/

Mit freundlichen Grüßen
Guido

von jz (Gast)


Lesenswert?

Mit Charlieplexing kommst du auf 4 Pins...
Sonst kannst du das auch über einen Pin machen: Den steuerst du über PWM 
an. Mit nem Kondensator (~100nF) machst du daraus halbwegs vernünftigen 
DC. Dann kannst du über einen Schmitt-Trigger pro LED mit einstellbarer 
Schaltschwelle die LEDs nacheinander einschalten(Indem du die PWM 
"hochfährst").

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Alexander Gräf schrieb:
> Die Bargraphanzeige hat die Anoden und Kathoden der LEDs einzeln
> herausgeführt. Besteuert werden soll sie immer additiv, d.h. von einer

 Ich muss irgendetwas falsch verstanden haben.
 Wie einzeln herausgeführt ?
 Wo ?

von Alexander G. (graealex) Benutzerseite


Lesenswert?

Guido C. schrieb:

> Suchwörter hierzu "avr charlieplexing" heißen.

Danke, soweit war ich ja (teilweise) schon: "Mit 5 Pins (2 x 3 x 2) und 
Tri-State-Logik könnte ich den Bargraph multiplexen". 12 LEDs mit 4 Pins 
hatte ich zwar bis dato noch nicht gesehen, aber ändert nichts daran, 
dass der uC dann am Ende doch multiplexen muss. Ich suche etwas 
eleganteres. :-D

Danke+Gruß, Alex

von Alexander G. (graealex) Benutzerseite


Lesenswert?

Marc Vesely schrieb:

>  Ich muss irgendetwas falsch verstanden haben.
>  Wie einzeln herausgeführt ?
>  Wo ?

Gemeint ist: die Anode und Kathode jedes einzelnen Segments sind jeweils 
einzeln als Pin aus dem Gehäuse herausgeführt, also keine gemeinsame 
Kathode oder so ein Blödsinn. ArtNr 160143 beim C fürs Datenblatt.

von jz (Gast)


Lesenswert?

Ist dir ein 10er Bargraph über einen Pin nicht elegant genug? :P Die PWM 
braucht auch nur zehn Stufen. Dann kannst du direkt die Variable auf die 
PWM schieben. Nur den Schmitt-Trigger musst du von "Hand" mit nem 
Komparator und drei Widerständen aufbauen. Die "fertigen" haben keine 
einstellbare Schaltschwelle.

von Alexander G. (graealex) Benutzerseite


Lesenswert?

jz schrieb:
> Mit Charlieplexing kommst du auf 4 Pins...

Das wird wohl das Mittel der Wahl sein, wenn es nicht anders geht.

> Sonst kannst du das auch über einen Pin machen: Den steuerst du über PWM
> an. Mit nem Kondensator (~100nF) machst du daraus halbwegs vernünftigen
> DC. Dann kannst du über einen Schmitt-Trigger pro LED mit einstellbarer
> Schaltschwelle die LEDs nacheinander einschalten(Indem du die PWM
> "hochfährst").

Das ist kompliziert, und wenn man schon zusätzliche Bausteine nehmen 
muss, käme ich mit einem 74HC164 auf nur drei Pins am uC:

74HC164: LED 1 ... 8
PIN0: 74HC164 CLK
PIN1: 74HC164 DATA + LED 9
PIN2: LED 10

Danke+Gruß, Alex

: Bearbeitet durch User
von Alexander G. (graealex) Benutzerseite


Lesenswert?

jz schrieb:
> Ist dir ein 10er Bargraph über einen Pin nicht elegant genug? :P Die PWM
> braucht auch nur zehn Stufen. Dann kannst du direkt die Variable auf die
> PWM schieben. Nur den Schmitt-Trigger musst du von "Hand" mit nem
> Komparator und drei Widerständen aufbauen. Die "fertigen" haben keine
> einstellbare Schaltschwelle.

Es geht ja nicht nur um die Zahl der Pins, sondern auch die Zahl der 
externen Bauseine. Beim Charlieplexing wären wir bei 4 Vorwiderständen 
und 4 Pins, plus Softwareaufwand. Einen Schmitt-Trigger für jedes 
Segment, das wird ein echtes Bauteilgrab.

von Daniel F. (df311)


Lesenswert?

wäre ein d/a-wandler mit einem LM3914 eine alternative?

von jz (Gast)


Lesenswert?

10 Komparatoren (2 4-fache und ein 2-facher z.B.) + 30 Widerstände + 10 
Kondensatoren. Hält sich aber noch in Grenzen. Falls man nur einen Pin 
frei hat...

von Alexander G. (graealex) Benutzerseite


Lesenswert?

Daniel F. schrieb:
> wäre ein d/a-wandler mit einem LM3914 eine alternative?

Naja, dann entweder per PWM mit Filter, oder doch wieder R2R mit 4 Pins, 
plus den LM3914. Nicht minimalistisch genug, obwohl der LM3914 schon das 
richtige Werkzeug ist, wenn man direkt mit analogen Signalen arbeiten 
will.

Vielleicht ein bisschen Hintergrundinfo: der Tiny hat 3 PWM Ausgänge, 
die über einen LM324 auf 10V verstärkt (0...10V Steuersignal) werden. 
Dann 3 Open Collector Anschlüsse mit einem Temposignal, das wieder 
eingelesen wird. Das steuert dann in Summe 3 Querstromlüfter, die über 
einen Temperatursensor (intern oder extern) in ihrer Leistung bzw. 
Drehzahl geregelt werden. Mich ärgert schon der LM324, weil ich anders 
die 10V nicht sauber hinbekomme (3 FETs gingen natürlich auch, aber dann 
braucht es auch wieder einen Pull-Down).

Der Bargraph wäre ein schönes optisches Gimmick, war aber so gar nicht 
vorgesehen. Ich könnte natürlich auch einen ATMega nehmen mit größerem 
Gehäuse, dann hätte ich die 10 Pins locker über.

von Guido C. (guidoanalog)


Lesenswert?

Hallo,

es gibt sogenannte "LED Display Drivers" wie z.B. den "MM5450N" von 
National Semiconductor (mittlerweile Texas Instruments). Mit diesem 
Treiber kannst Du über 3 Ansteuerleitungen bis zu 34 LEDs ansteuern. 
Über ein Potentiometer kannst Du sogar die Helligkeit der LEDs steuern. 
Vielleicht findest Du dergleichen auch "in klein".

Mit freundlichen Grüßen
Guido

von Alexander G. (graealex) Benutzerseite


Lesenswert?

Guido C. schrieb:

> es gibt sogenannte "LED Display Drivers" wie z.B. den "MM5450N" von
> National Semiconductor (mittlerweile Texas Instruments).

Ich weiß, da gibt es einige Decoder-Chips, und im einfachsten Falle 
nimmt man eben einen fertigen LED-Treiber mit I2C o.ä. und eingebauter 
Konstantstromquelle.

Ich habe hier sogar RGB-LEDs mit 8-Bit PWM pro Farbkanal, einzeln 
ansteuerbar per Eindraht mit 800 kBit/s per Daisy Chaining, 
Konstantstromquelle eingebaut, davon kosten 10 Stück weniger als der 
einzelne Bargraph von C. Aber eigentlich wollte ich jetzt keine 
hochkomplexe Lichtorgel bauen, sondern einfach nur den Bargraph mit 
dranklemmen - ohne viel Hardware, ohne viel Software.

Ich habe mich jetzt für das Charlieplexing mit 4 Pins entschieden. Ich 
suche nur gerade die optimale Anordnung der Segmente, damit ich 
möglichst keine Kreuzungen habe. Da Anode und Kathode regelmäßig am 
gleichen Netz hängen, ist das gar nicht so einfach.

von Guido C. (guidoanalog)


Lesenswert?

Hallo,

Alexander Gräf schrieb:
> Aber eigentlich wollte ich jetzt keine
> hochkomplexe Lichtorgel bauen, sondern einfach nur den Bargraph mit
> dranklemmen - ohne viel Hardware, ohne viel Software.

Naja, der "MM5450N" ist alles andere als "hochkomplex".

Alexander Gräf schrieb:
> Ich habe mich jetzt für das Charlieplexing mit 4 Pins entschieden.

Alexander Gräf schrieb:
> aber
> eigentlich hat der ATTiny44 mit 3 PWMs und 3 Frequenzmessungen,
> Temperaturmessung plus mehrere PID-Regler schon genug zu tun.

Ist ja schön, dass Du jetzt doch noch Ressourcen gefunden hast. SCNR

Mit freundlichen Grüßen
Guido

von Alexander G. (graealex) Benutzerseite


Lesenswert?

Guido C. schrieb:

> Ist ja schön, dass Du jetzt doch noch Ressourcen gefunden hast. SCNR

Der Compiler wird mir schon sagen, wenn die 4K voll sind. Etwas 
statisches wäre mir lieber gewesen, wo ich nicht alle Millisekunde etwas 
tun muss, damit mir die Anzeige nicht einfriert.

Trotzdem denke ich, dass man durch eine geschickte Verdrahtung der 4 
Pins an den Bargraphen zurecht käme, ohne Multiplexing. Aber ich habe 
keine gute Idee, und dann ist Charlieplexing halt noch das kleinste 
Übel, weil nur vier Widerstände, keine exotischen ICs, und wenn man 
etwas herumknobelt auch keine Kreuzungen.

von jz (Gast)


Lesenswert?

Ich hätte deshalb ja auch ein Schieberegister genommen... Aber jedem das 
Seine...

von Alexander G. (graealex) Benutzerseite


Lesenswert?

jz schrieb:
> Ich hätte deshalb ja auch ein Schieberegister genommen... Aber jedem das
> Seine...

Ich prinzipiell auch, das wäre ein 74HC164 gewesen, und in Summe drei 
Pins. Ist aber wieder ein Extrabauteil. Und achja, 10 Vorwiderstände.

von Carsten R. (kaffeetante)


Lesenswert?

Alexander Gräf schrieb:
> aber ändert nichts daran,
> dass der uC dann am Ende doch multiplexen muss. Ich suche etwas
> eleganteres.

Es geht halt nur so. Entweder die Pins direkt ansteuern was viele Pins 
kostet oder irgendie auf wenige Pins codieren. Letzteres geht per 
Software oder über ein Hardwareinterface mit wenigen Pins.

- Direktanschluß mit hoher Pinzahl willst du nicht.
- "Codierung" auf ein analoges Signal nebst Decodierung am anderen Ende 
willst du nicht.
- Multiplexing in Software, Beispiel Charlieplexing, willst du nicht. 
Softwarelast.
-Hardwaremultiplexing, Beispiel Porterweiterung über seriells Interface 
mit 74HC164 und 74HC595, willst du nicht.

Irgendetwas muß man aber nehmen wenn man etwas bauen will. Man braucht 
Hardware oder Software um Informationen von vielen Pins auf wenige Pins 
umzukodieren. Wenn die Daten ohnehin digital von der CPU kommen ist eine 
Porterweiterung eine der sinnvollsten Alternativen, besonders da 74HC164 
und 74HC595 schon vorhanden sind.

http://www.mikrocontroller.net/articles/Porterweiterung_mit_SPI

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Alexander Gräf schrieb:
> Trotzdem denke ich, dass man durch eine geschickte Verdrahtung der 4
> Pins an den Bargraphen zurecht käme, ohne Multiplexing. Aber ich habe

 Da denkst du mit Sicherheit falsch.

von Carsten R. (kaffeetante)


Lesenswert?

Marc Vesely schrieb:
> Da denkst du mit Sicherheit falsch.

Genau, ohne jegliche Codierung / Decodierung geht es nicht! Und die 
erfolgt nicht von selbst. Nur "geschickt verdrahten" reicht nicht!

von Bastler (Gast)


Lesenswert?

Man kann auch zwischen jeweils 2 Pins (mit R davor) 2 LED antiparallel 
schalten.
2 Pins -> 2 LEDs
3 Pins -> 6 LEDs
4 Pins -> 12 LEDs
Das richtige Gewackel der Pins ist aber etwas kompliziert. Am besten per 
Tabelle und alle 1ms eine andere schalten oder es sein lassen. Damit hat 
man auch gleichmäßige Helligkeit auf allen.

von Carsten R. (kaffeetante)


Lesenswert?

Die Beschreibung paßt genau zu:

http://en.wikipedia.org/wiki/Charlieplexing

von Bastler (Gast)


Lesenswert?

Ja, hab's nur noch mal kompakt zusammengefasst.

von Alexander G. (graealex) Benutzerseite


Angehängte Dateien:

Lesenswert?

Danke Jungs für den Input. Am Ende wird es halt dann doch das 
Charlieplexing werden, die paar Byte Flash und CPU-Zyklen muss man eben 
freiräumen.

Hier für alle Interessierten die meiner Meinung nach kompakteste Weise, 
den 10x Bargraph auf Protoboard/Einseitig ohne Überkreuzung für 
Charlieplexing anzuschließen. Über Gelb/Rot kann man streiten, lässt 
sich auch anders gruppieren.

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.