Pfad:AVR-DE => Anwendungen => Laufschrift
ATmega16 Anwendungen von
AVR-Einchip-Prozessoren AT90S, ATtiny, ATmega und ATxmega
Laufschrift mit ATmega16A und LEDs
Logo

Laufschrift mit ATmega16

Hier klicken um eine gezippte Version dieser Seite herunterzuladen (1.40 MB)
Eine Anwendung des ATmega16-Controllers mit 192 LEDs, vorzugsweise zum Verschenken und zum ins Fenster stellen.

Laufschrift von vorne

Mit der 24*8-LED-Matrix kann jedes beliebige Muster dargestellt werden. Mit entsprechenden Tools können Laufschriften entworfen, in eine Assemblertabelle umgewandelt, neu assembliert und in den Programmspeicher des ATmega16 gebrannt werden.
  1. Eigenschaften
  2. Hardware
  3. Aufbau
  4. Software

1. Eigenschaften

Damit von 192 LEDs jede einzeln angesteuert werden kann, sind diese mit einer Multiplex-Steuerung mit acht Anodentreibern (Leistungstransistoren) und die Kathoden der LEDs an drei Ports zu je acht Portausgängen verschaltet.

LED-Matrix Da beim Multiplexen von acht Anodenreihen jede LED nur zu einem Achtel der Zeit ausgesteuert wird, werden LEDs mit hoher Lichtausbeute verwendet. Das sorgt für eine ausreichende Helligkeit der Anzeige bei vernünftig niedrigem Stromverbrauch (unter 10 kWh/Jahr).

Laufschrift Muster Durch das Multiplexen muss jeder Kathoden-Portausgang maximal den Strom für eine einzige LED liefern (max. 20 mA). Maximal können bei diesem Maximalstrom pro LED pro Anodenreihe bis zu 10 LEDs gleichzeitig an sein, da beim ATmega16A der VCC- und GND-Strom in der DIP-Packung auf 200 mA begrenzt sein soll. Da der Strom bei dem bestehenden Design pro LED aber auf 15 mA begrenzt ist, können pro Anodenreihe 13 LEDs gleichzeitig an sein. Dieser Fall kommt bei normalem Text selten vor, beim Auslegungstext kommen maximal 12 LEDs gleichzeitig vor (bei einem Grafikmuster).



Seitenanfang Eigenschaften Hardware Aufbau Software


2. Hardware

2.1 Auswahl des LED-Stroms

LED-Strom-Berechnung Das Bild zeigt die Spannungen an der LED-Matrix-Schaltung. Von unten nach oben: Bei einem R von 120 Ω stellt sich ein LED-Strom von 14,9 mA ein. Soll der LED-Strom erhöht werden, kann ein Minimalwiderstand von 82 Ω eingesetzt werden (ILED = 21,8 mA).

2.2 Prozessorteil

Der Prozessor ATmega16 Schaltbild Laufschrift

2.3 Netzteil

2.3.1 Auslegung des Netzteils

Das Netzteil soll den LED-Strom von maximal 14 gleichzeitig angeschalteten LEDs liefern. Das bedeutet nominell bei 15 mA pro LED 14*15 = 210 mA, bei 20 mA 280 mA. Maximal kann eine Last von 24*20 mA = 480 mA auftreten. Ein handelsüblicher Trafo mit 4,8 VA weist dafür ausreichende Reserven auf.

Netzteilspannungen Bei einem Trafo mit 2*7,5 V und einem Ladeelko von 2.200 µF ergeben sich bei Maximallast Ladespannungen, die in Spannungstälern genügend Eingangsspannung für den Spannungsregler 7805 liefert (ca. 7,8 V).

Die Software für diese Netzteilberechnung findet sich übrigens hier.

Power Supply Simulation Eine neuere Version der Software befindet sich hier.

Die maximale thermische Last des Spannungsreglers liegt bei (8,5 - 5) * 0,48 = 1,7 W. Ein kleiner Kühlkörper mit 24 K/W ist daher ausreichend.

2.3.2 Schaltbild Netzteil

Das Netzteil ist daher standardmäßig.

Schaltbild Netzteil


Seitenanfang Eigenschaften Hardware Aufbau Software


3. Aufbau

3.1 Prozessorteil

Für den Prozessorteil wurde eine gedruckte Platine entwickelt.

Layout gedruckte Platine Bestückung Platine Das Ganze ist auf einer 100*80 mm-Platine großzügig untergebracht. Der ISP6-Stecker zum Programmieren auf der Platine muss mit lötbarem lackisoliertem Kupferdraht verdrahtet werden.

Prozessorplatine So sieht die mit allen Bauteilen bestückte Version aus.

3.2 Netzteil

Netzteil Das Netzteil ist auf einer Lochrasterplatine mit 70*50 mm aufgebaut.

Die Größe des Netzteils (h = 42 mm) bestimmt auch die Gehäusegröße.

3.3 Gehäuse

Gehäuseeinbau Das Ganze passt in ein kleines Plastikgehäuse L=160/B=100/H=60, das noch mit einem Typenschild (im Open-Office-Grafikformat) verziert und mit Gummifüßen rutschfest an den/die Beschenkte ausgeliefert wird.

3.4 Aufbau der LED-Matrix

Aufbau LED-Matrix Die 192 Leuchtdioden werden in 5 mm-Bohrungen in einer Plexiglassscheibe (3 mm) eingebracht. Das Bohrschema im Open-Office-Zeichenformat gibt es hier.

Zunächst werden alle 24 Kathodenreihen durch Umbiegen, Kürzen und Verlöten verbunden. Dann werden alle Anodenreihen durch Umbiegen in ca. 5 mm Höhe, Einkürzen und Verlöten quer verbunden.

Der Anschluss der einzelnen Leitungen des Parallelkabels an die Matrix erfolgt leichter, wenn etwas teureres farbiges Kabel verwendet wird. Die Belegung der 34-poligen Buchse mit Anoden- und Kathodentreibern geht aus dem Schaltbild hervor.


Seitenanfang Eigenschaften Hardware Aufbau Software


4. Software

4.1 Download

Die Software ist im HTML-Format hier und als Assembler-Quellcode hier erhältlich. Dazu gehört noch die Datei tabelle.inc, die hier mit Beispieldaten verfügbar ist.

4.2 Aufbau der Software

Der Timer TC0 wird für den Ablauf verwendet. Er läuft mit den defaultmäßigen 1 MHz Takt und einem Vorteiler von 8 mit 125 kHz, läuft mit 488 Hz über und löst alle 2 ms den Overflow-Interrupt aus. Sind alle acht Anodenzeilen ausgegeben, wird die Anzahl MUX-Durchläufe verringert. Nach 32 MUX-Durchläufen (nach 2*8*32 = 512 ms) wird die nächste Kombination angezeigt.

Der gesamte Ablauf erfolgt in der TC0-Overflow-Interrupt-Service-Routine.
  1. Die Anodentreiber werden abgeschaltet.
  2. Die nächsten drei Kathodenkombinationen werden aus der Flash-Tabelle gelesen und an die drei Ports geschrieben.
  3. Das Anodentreiberregister wird auf den Anodenport geschrieben und damit die LEDs eingeschaltet.
  4. Das Anodentreiberregister wird um eine Position links geschoben. Rollt dabei eine Eins in das Carry-Flag, wird das Register mit Eins neu begonnen. Die Anzahl MUX-Durchläufe wird erniedrigt. Ist das Ergebnis nicht Null, wird der Adresszeiger auf den alten Stand im Registerpaar X gesetzt und mit der gleichen Kathodenkombination von vorne begonnen. Ist das Ergebnis Null, wird die erreichte Adresse im Registerpaar X gespeichert.
  5. Sind alle LEDs bei den acht Multiplexdurchgängen aus (=1), wird der Tabellenzeiger auf Anfang gesetzt und mit dem Ablauf neu begonnen.

4.3 Ablaufsteuerung

Um die Erstellung von Tabellen zur Ablaufsteuerung zu vereinfachen, wurde ein Open-Office-Spreadsheet entworfen (hier mit ausgefüllten Beispieldaten).

In der Tabelle wird im Blatt LLD nacheinander in der grün gefärbten Spalte Y jeweils eine Eins oder ein Leerzeichen eingetragen (manuell oder aus dem Dropdown-Feld). Diese pausen sich in den nachfolgenden Feldern nach links hin durch. Einsen werden rot markiert (LED an). In den Spalten Z, AA und AB sind die Dezimalzahlen für die drei Ports zu sehen (invertiert, da die LED bei Null an, bei Eins aus ist).

Beim Design ist darauf zu achten, dass das Ende der Tabelle erreicht ist, wenn alle 24 Portangaben bei 255 sind (Neustart). Soll der Ablauf fortgesetzt werden, müssen solche Leerphasen vermieden werden.

Freihändige Kombinationen kriegt man, wenn man die Formeln in den Spalten B bis Y löscht und für alle LEDs, die eingeschaltet sein sollen, eine Eins einträgt.

Ist das Design fertig, gibt es im Blatt Tabellengenerator in Spalte L die fertige Tabelle. Alle ausgefüllten Zeilen dieser Spalte markieren, mit Strg-C kopieren, in ein leeres Notepad-Fenster mit Strg-V einfügen und die Datei als tabellen.inc in den Assemblerordner speichern. Beim Assemblieren wird die neue Tabelle in den Quellcode eingearbeitet.

Im Blatt MaxLaenge ist berechnet, dass in den Flash-Speicher des ATmega16 671 verschiedene Anzeigenbilder passen.

Das Blatt Analyse liefert eine Darstellung der Häufigkeit von gleichzeitig vom Anodertreiber anzutreibenden LEDs und des Jahres-Strombedarfs.

4.4 Fuse-Programmierung

Fuses original Fuses programmiert Damit alle Kathodenreihen funktionieren, muss die JTAGEN-Fuse des ATmega16 gelöscht werden. Vergisst man das, geht eine Spalte LEDs nicht an, weil der JTAG-Pin dauerhaft auf Eingang geschaltet ist.


Seitenanfang Eigenschaften Hardware Aufbau Software




Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte über das Kommentarformular an mich.

©2017 by http://www.avr-asm-tutorial.net