4 stellige 7 Segment im Multiplexing

OP #3720290
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.
Gast #3720330
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
Gast #3720331
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.
Gast #3720345
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
OP #3720362
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.
OP #3720373
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.
Gast #3721247
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 :-(
Persönliche Seite #3721332
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.
Gast #3721507
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?
OP #3721716
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/
Gast #3721773
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.
Gast #3721851
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!
OP #3721905
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

.
OP #3721932
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.
Gast #3722029
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..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren