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
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.
Hallo, bei der Schaltung habe ich nur eine Frage: wie lange hält der atTiny2313 die Strombelastung aus wenn alle Segmente eingeschaltet sind ??? Gruss
meine erste Frage war auch, wo denn die Transistoren versteckt sind. Aber da sind ja gar keine. Funktioniert die Schaltung überhaupt langfristig?
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
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.
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.
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
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.
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
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 :-(
Danke, ist bekannt. Für alle Interessierte: http://www.atmel.com/images/atmel-2521-avr-hardware-design-considerations_application-note_avr042.pdf auf Seite 5f und http://www.atmel.com/images/doc1619.pdf
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.
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?
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
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.
@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!
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 .
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.
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 :-)
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
noch ein kleiner versuch zum thema im anhang. jeder darf gerne mitmachen und selber mit paint balken füllen!
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.
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..
@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
@flo, vielen Dank für deine Buchstaben A-Z, meine sind teilweise etwas anders, was jeder selbst Vergleichen kann.
:
Bearbeitet durch User
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
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)?
Hallo Daniel, ist in deiner FW Version egal, da nicht belegt.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.