Forum: Mikrocontroller und Digitale Elektronik 4 stellige 7 Segment im Multiplexing


von Uwe S. (de0508)



Lesenswert?

Hallo,

ich möchte ein Projekt aus 2011, für das ich die Tage eine neue Platine 
angelegt habe, zur Diskussion stellen.

Es ist eine 4-fach LED Anzeige, die Ansteuerung erfolgt seriell 9600 
Baud Datenformat 8-N-1 mit TTL Pegel: LOW-Pegel = 1, HIGH-Pegel = 0

Das Display wird von links nach rechts zyklisch beschrieben.
Der implementierte Kommandointerpreter versteht einige (Steuer-)Befehle 
und stellt folgende Zeichen
0-9, a-z und A-Z, '.', ',', ' ', +, -, (, ), [, ]
auf der 7 Segmentanzeige dar.

Intern gibt es noch eine Methode für die Darstellung variablen Lauftext, 
sie wird für die Anzeige des Copyright, Version und Baudrate genutzt. 
Die Daten kommen aus dem Flash.

Befehle
! Display löschen
$ Cursor an den Anfang
# Cursor an das Ende

Die angehängten Bilder zeigen den Aufbau.

: Bearbeitet durch User
von Route_66 H. (route_66)


Lesenswert?

Uwe S. schrieb:
> zur Diskussion stellen.

Bilder im Betrieb wären nett.

von Peter D. (peda)


Lesenswert?

Route 66 schrieb:
> Bilder im Betrieb wären nett.

Und dann mal eine '1' und eine '8.' darstellen, damit man schön den 
Helligkeitseinbruch sieht.
44mA Segmentstrom und 350mA Digitstrom sind erheblich jenseits der 
Spezifikation des MC.

von Stefan (Gast)


Lesenswert?

Hallo,

bei der Schaltung habe ich nur eine Frage:
wie lange hält der atTiny2313 die Strombelastung aus wenn alle Segmente 
eingeschaltet sind ???

Gruss

von stefanus (Gast)


Lesenswert?

meine erste Frage war auch, wo denn die Transistoren versteckt sind. 
Aber da sind ja gar keine.
Funktioniert die Schaltung überhaupt langfristig?

von Neugieriger (Gast)


Lesenswert?

Hallo Uwe,
das sieht schön aus.
In welcher Sprach ehast Du das programmiert?

Zitat:
"...stellt folgende Zeichen
0-9, a-z und A-Z, '.', ',', ' ', +, -, (, ), [, ]
auf der 7 Segmentanzeige dar."

Das würde mich sehr interessieren, wie die Zeichen dargestellt werden.
Kannst Du das einmal auf Fotos oder in einem Video zeigen?
Viele Grüße
Karsten

von MaWin (Gast)


Lesenswert?

Dein 68 Ohm Vorwiderstand führt zu ungefähr 5mA Segmentstrom. Die 5mA 
fliessen bei allen Segmenten zusammen durch einen Common Anschluss, 
macht 40mA. Allerdings können AVR Ausgänge zuverlässig keine 40mA 
ableiten, nur 20mA. Die 40mA im AVR Datenblatt sind das absolute maximum 
rating, darüber gehen sie kaputt. Feiwillig kommen nur 20mA.

Deine Schaltung ist unterdimensioniert.

Entweder hätte man Transistoren zur Verstärkung nehmen müssen, oder 
jeweils 2 Ausgänge parallel um die Common Anschlüsse zu versorgen.

Ich hab übrigens beim Datenblatt der Anzeige
http://media.digikey.com/pdf/Data%20Sheets/Lite-On%20PDFs/LTS-5x01_3A_LTD5x21_23A_LTC-56_753x-01.pdf
den Eindruck, also ob einige zahlen LTC-5653AWC und /LTC-5653P-01 
vertauscht wurden.

von MaWin (Gast)


Lesenswert?

MaWin schrieb:
> Dein 68 Ohm Vorwiderstand führt zu ungefähr 5mA Segmentstrom.

Uups, Faktor 10 vertan.

Die anderen haben das richtiger:

Peter Dannegger schrieb:
> 44mA Segmentstrom und 350mA Digitstrom sind erheblich jenseits der
> Spezifikation des MC.

von Stefan (Gast)


Lesenswert?

Hallo nochmal,

jetzt haben alle über den hohen Strom gemosert, ich auch,

und dabei den sauberen Aufbau, die exakt geätzte Platine, saubere Lötung 
und schöne Anordnung der Bauteile übersehen. Glückwunsch!!!

Noch 4 Treibertransistoren und es ist perfekt!


Gruss

von Uwe S. (de0508)


Lesenswert?

Hallo,

nun in der Realität liegt der Segementstrom bei ~20mA.

Ri = 40Ω Rled = 68Ω

Ulow ~ 0,3V
Uhigh ~ 4,5V
Uled ~ 2,0V

Und ja, es ist ein minimalistischer Ansatz und den habe ich bewusst bei 
behalten.

Peter ja die "1" und "8" sind logischer weise etwas unterschiedlich, 
aber das Auge sieht nicht linear, so dass dies nicht weiter auffällt.
Die 7 Segmente der "8" sind in der Summe ihrer Intensität fast so hell 
wie die "1" mit 2 Segmenten.

von Uwe S. (de0508)


Lesenswert?

Hallo Karsten,

Neugieriger schrieb:
> Hallo Uwe,
> das sieht schön aus.
> In welcher Sprach ehast Du das programmiert?
>
> Zitat:
> "...stellt folgende Zeichen
> 0-9, a-z und A-Z, '.', ',', ' ', +, -, (, ), [, ]
> auf der 7 Segmentanzeige dar."
>
> Das würde mich sehr interessieren, wie die Zeichen dargestellt werden.
> Kannst Du das einmal auf Fotos oder in einem Video zeigen?
> Viele Grüße
> Karsten

Es gibt zwei Firmwarevarianten die original wurde 2011 in
avr gcc geschrieben und davon abgeleitet als Performance und praktischer 
Test in LunaAVR V2014 R1.4.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Uwe S. schrieb:
> Und ja, es ist ein minimalistischer Ansatz und den habe ich bewusst bei
> behalten.

Dann würde ich aber noch 47pF an Reset gegen GND vorsehen; das wird auch 
immer ganz bewußt bei minimalistischen Ansätzen gemacht.
Ein Profi weiß dann auf den allerersten Blick, was von der Schaltung zu 
halten ist.

Leid tun mir allerdings immer die Leute, die das erst merken, wenn die 
Platine fertig ist :-(

von Uwe S. (de0508)


Lesenswert?


von Takao K. (takao_k) Benutzerseite


Lesenswert?

Wiederstaende und Treibertransistoren braucht es nicht, zumindest nicht 
mit PICs.

Hatte ich schon monatelang laufen, nix heiss geworden oder 
kaputtgegangen.

Da die LEDs eine Flussspannung haben, ist es fuer die internen MOSFETs 
kein richtiger Kurzschluss. Im Zweifelsfall die Betriebsspannung 
absenken, kann schon sehr gut beobachtet werden wie die Helligkeit 
heruntergeht, unter 3 volt glimmt es nur noch.

In den Taschenrechnern aus den 1980ern waren weitgehend auch keine extra 
Transistoren oder Wiederstaende drin, und PICs wurden fuer solche 
Anwendungen entwickelt.

von Dan (Gast)


Lesenswert?

Sehr schönes Projekt!

Was ich nicht ganz verstehe, wie funktioniert hier das Multiplexing (wie 
wird das aktuell anzeigende Segment der vier Segmente ausgewählt).

Und wie werden die Steuerdaten in den ATTiny übertragen?

von Uwe S. (de0508)


Lesenswert?

Hallo Daniel,

Dan schrieb:
> Was ich nicht ganz verstehe, wie funktioniert hier das Multiplexing (wie
> wird das aktuell anzeigende Segment der vier Segmente ausgewählt).
>
> Und wie werden die Steuerdaten in den ATTiny übertragen?

Ich greife dein Fragen einzeln auf.

Multiplexing
Es läuft eine Timer mit 1000Hz (1ms) im CTC-Mode und führt dort das 
Multiplexing durch.

Dieser 1ms Tick ist gleichzeitig auch mein Systemtakt, durch den der AVR 
µC aufwacht und die Daten der seriellen Schnittstelle, in den 
Empfangspuffer (RX-FIFO) schreibt, ausliest und Interpretiert/ 
Darstellt.

Die 4 Stellen der LED-Anzeige werden somit alle 250Hz (4ms) mit neuen 
Werten eines 7-segment Zeichens beschrieben.

Die Methode Task aus der Klasse LEDControl ist sehr einfach zu 
verstehen - ja LunaAVR Democode:
1
Procedure Task()
2
dim digit as static byte
3
4
// clear all rows
5
LED_A1 = LED_ANODE_OFF
6
LED_A2 = LED_ANODE_OFF
7
LED_A3 = LED_ANODE_OFF
8
LED_A4 = LED_ANODE_OFF
9
10
// clear all columns
11
LED_A  = LED_OFF
12
LED_B  = LED_OFF
13
LED_C  = LED_OFF
14
LED_D  = LED_OFF
15
LED_E  = LED_OFF
16
LED_F  = LED_OFF
17
LED_G  = LED_OFF
18
LED_DP = LED_OFF
19
20
// select next LED row
21
led_row = Byte(led_row + 1) AND 0b00000011
22
23
// output all columns, switch leds on.
24
digit = led_digits( led_row )
25
26
// switch the LED columns bye his bitnumber
27
when (digit AND 0x80) do LED_DP = LED_ON
28
when (digit AND 0x40) do LED_G  = LED_ON
29
when (digit AND 0x20) do LED_F  = LED_ON
30
when (digit AND 0x10) do LED_E  = LED_ON
31
when (digit AND 0x08) do LED_D  = LED_ON
32
when (digit AND 0x04) do LED_C  = LED_ON
33
when (digit AND 0x02) do LED_B  = LED_ON
34
when (digit AND 0x01) do LED_A  = LED_ON
35
36
// switch the next LED row on
37
select case led_row
38
case 0
39
  LED_A1 = LED_ANODE_ON
40
case 1
41
  LED_A2 = LED_ANODE_ON
42
case 2
43
  LED_A3 = LED_ANODE_ON
44
case 3
45
  LED_A4 = LED_ANODE_ON
46
EndSelect
47
48
EndProc

Die Übertragung der Steuerdaten erfolgt, wie im ersten Beitrag 
beschrieben, seriell über den Hardware Uart mit TTL Pegel bei 9600Baud, 
8-N-1.

Zum Test, außerhalb meiner Anwendung, verwende ich natürlich einen USB 
Uart Wandler MCP2200 oder FT232RL unter Linux.

Der atTiny2313 läuft mit dem RC Oszillator bei 8MHz und BOD-Level 4,3V.

*Link*:
# http://www.engbedded.com/fusecalc/

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Uwe S. schrieb:
> Hallo,
>
> ich möchte ein Projekt aus 2011, für das ich die Tage eine neue Platine
> angelegt habe, zur Diskussion stellen.

Ich probiere noch einmal, ohne Ironie auf die Schaltung einzugehen.

Schön wäre es gewesen, das Layout nach einer Diskussion über 
Schaltungsentwicklung zu erstellen. Schnell hätte sich gezeigt, dass ein 
Hauptkritikpunkt hätte vermieden werden können, indem schlicht vier 
kleine SMD-Transistoren verwendet worden wären.
Mit dem jetzigen Schaltungsfehler nachträglich einen 'minimalistischen' 
Kult zu propagieren, ist fatal für Diejenigen, die noch etwas dazulernen 
und eine saubere Schaltung aufbauen wollen.

Prompt melden sich Leute zu Wort, die Wiederstaende für überflüssig 
halten, vermutlich,  weil sie Inschinöhr sind. In der Tat, 
'Wiederstaende' habe ich auch noch nie verbaut (nun doch wieder 
ironisch).

Wer sich ernsthaft für eine LED-Multiplexschaltung interessiert, sollte 
sich im Forum 'Projekte & Code' umsehen. Da gibt es bessere Vorlagen.


Uwe S. schrieb:
> Der atTiny2313 läuft mit dem RC Oszillator bei 8MHz

Es ist hinreichend diskutiert worden, dass der interne RC-Taktgeber für 
eine zuverlässige asyn. Übertragung nicht geeignet ist.
Ein weiterer Punkt, die Schaltung so nicht nachzubauen.


Neugieriger schrieb:
> Das würde mich sehr interessieren, wie die Zeichen dargestellt werden.
> Kannst Du das einmal auf Fotos oder in einem Video zeigen?

Die Frage sollte auch dringend beantwortet werden, wobei mich 
insbesondere die Darstellung der Zeichen 'a' - 'z' interessiert.

von Dan (Gast)


Lesenswert?

@Uwe:
Danke für die ausführliche Beantwortung meiner Fragen!!!

m.n. schrieb:
> Mit dem jetzigen Schaltungsfehler nachträglich einen 'minimalistischen'
> Kult zu propagieren, ist fatal für Diejenigen, die noch etwas dazulernen
> und eine saubere Schaltung aufbauen wollen.

Gönn Uwe doch mal seinen Erfolg mit oder ohne Transistoren! Das ganze 
soll ja funktionieren und nicht irgendwelchen theorethischen Standards 
genügen! Und schnell zusammengelötet sein! Wir haben nicht alle so viel 
Zeit zum Meckern.

m.n. schrieb:
> Es ist hinreichend diskutiert worden, dass der interne RC-Taktgeber für
> eine zuverlässige asyn. Übertragung nicht geeignet ist.
> Ein weiterer Punkt, die Schaltung so nicht nachzubauen.

Diskutiert worden ist das oft, unter 30°C funktioniert der interne 
RC-Taktgeber trotzdem für den UART ausreichend genau, ist jedenfalls 
meine Erfahrung mit diversen AVRs. Wem es nicht gefällt, der setzt 
vielleicht die Fuses anders und benutzt einen ext. Quarz-Oszi.

m.n. schrieb:
> Neugieriger schrieb:
>> Das würde mich sehr interessieren, wie die Zeichen dargestellt werden.
>> Kannst Du das einmal auf Fotos oder in einem Video zeigen?

Das würde mich auch mal interessieren!

von Uwe S. (de0508)


Lesenswert?

Hallo MC Forum,

den A-Z Zeichsatz kann sich doch jeder anhand der 7 Segmente einer LED 
Anzeige zusammenstellen.

Für meine Anwendung bedeute dies bei einigen Zeichen, wie z.B. dem n/ m, 
Kompromisse in der Darstellung und dem Verständnis.

Hier ist eine Veröffentlichung aus Dezember 2011, die ich in meinen 
Programmen mit 7 Segment LED Anzeigen verwendet habe:

http://www.mikrocontroller.net/attachment/129591/LED-AVR-Bittabelle.pdf

.

von Uwe S. (de0508)


Lesenswert?

Hallo m.n.

Danke für deine Anmerkungen, ich verweise die Mitleser auf diesen 
möglichen Abgleich für den RC Oszillator:

AVR054: Run-time calibration of the internal RC oscillator
# http://www.atmel.com/Images/doc2563.pdf

Mehr zum Thema Kalibierung:
AVR053: Calibration of the internal RC oscillator
# http://www.atmel.com/Images/doc2555.pdf

AVR055: Using a 32kHz XTAL for run-time calibration of the internal RC
# http://www.atmel.com/Images/doc8002.pdf

Damit sollte laut Atmel der RC Oszillator für den Usartbetieb geeignet 
sein.

von m.n. (Gast)


Lesenswert?

Dan schrieb:
> Das würde mich auch mal interessieren!

Ach, ich wäre ja schon mit 'x', 'y' und 'z' zufrieden.
Aber ich seh schon, wenn die Spreu verflogen ist, ist die Scheune leer 
:-)

von flo (Gast)


Lesenswert?

m.n. schrieb:
> Ach, ich wäre ja schon mit 'x', 'y' und 'z' zufrieden.
1
x = 
2
3
| |
4
 -
5
| |
1
y =
2
3
| |
4
 -
5
  |
1
z =
2
3
 -
4
 -
5
 -
1
h =
2
3
| 
4
 -
5
| |

nicht formschön, aber möglich

: Bearbeitet durch User
von flo (Gast)


Angehängte Dateien:

Lesenswert?

noch ein kleiner versuch zum thema im anhang.

jeder darf gerne mitmachen und selber mit paint balken füllen!

von flo (Gast)


Angehängte Dateien:

Lesenswert?

wenn einem die ähnlichkeit mit zahlen egal ist, könnte man es so 
probieren.

buchstaben wie "k" bleiben aber uneindeutig und müssten "gelernt" 
werden.

von Paul (Gast)


Lesenswert?

Für einen minimalistischen Aufbau, würde ich eine Max7219 nehmen, dann 
spart man sich noch 8 Widerstände, und man braucht sich keine Gedanken 
machen ob man Transistoren nehmen möchte, weil gleich alles passt.
 Aber man hat dabei natürlich nicht den Lerneffekt ein Programm dafür 
schreiben zu dürfen..

von Uwe S. (de0508)


Lesenswert?

@Paul,

aber mit dem Max7219 lassen sich die Anforderungen nicht umsetzen: Uart 
- 1-Wire!

Und nach mehr als 30 Jahren Programmierung ist bei diesem Projekt (aus 
2011) fast kein Lerneffekt vorhanden.

: Bearbeitet durch User
von Uwe S. (de0508)


Lesenswert?

@flo,

vielen Dank für deine Buchstaben A-Z, meine sind teilweise etwas anders, 
was jeder selbst Vergleichen kann.

: Bearbeitet durch User
von flo (Gast)


Lesenswert?

keine ursache - schön wäre, wenn sich ein standard durchsetzen würde.

hier gibt es auch schon einiges zum thema:
http://de.wikipedia.org/wiki/Siebensegmentanzeige#Beispiele

von Daniel (Gast)


Lesenswert?

Hallo Uwe,

kurze Frage, soll der Jumper für die Cascade offen oder geschlossen 
sein, wenn man ohne Cascade arbeiten will (also mit einer einzelnen 
4x7Segment-Anzeige)?

von Uwe S. (de0508)


Lesenswert?

Hallo Daniel,

ist in deiner FW Version egal, da nicht belegt.

von Daniel (Gast)


Lesenswert?

Super, Danke für die schnelle Info!!!!!!!!!!!!!!

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.