8x8-LED-Matrix

Aus BraLUG-Wiki

Wechseln zu: Navigation, Suche

1Bit-Mode 2Bit-Mode

Inhaltsverzeichnis

Motivation

Vor einiger Zeit kaufte ich bei Pollin ein 8x8-LED-Modul als Muster für ein geplantes Projekt. Als ich mich dann entschieden hatte, dieses Projekt wirklich in Angriff zu nehmen, war ausgerechnet dieses LED-Modul ausverkauft. Um das Muster nicht sinnlos rumliegen zu lassen, habe ich es jetzt als Ausgangspunkt für ein paar Spielereien mit einem ATMega8 und einer 8x8-Anzeige genommen, eine entsprechende Schaltung entworfen/aufgebaut sowie eine Art Applikationstemplate geschrieben...

Hardware

Schaltplan

Die Hardware besteht aus:

  • einem ATMega8 in seiner einfachsten Grundschaltung
  • drei Tastern
  • und dem erwähnten 8x8-LED-Matrix-Modul (da ich kein Datenblatt hatte, musste ich die Anschlußbelegung selbst "durchklingeln"...)

Besonderheiten der Schaltung:

  • Es wurden keine Treiber für die LEDs vorgesehen und davon ausgegangen, dass im Multiplexbetrieb die Ströme an den Ausgängen des ATMega8 nicht das Maximum überschreiten (siehe Datenblatt). Die verwendeten Vorwiderstände von 68 Ohm sind etwas sehr pessimistisch gewählt worden. Dieser Wert könnte noch etwas verringert werden, um die LEDs heller leuchten zu lassen.
  • Der, für das Ein-/Ausschalten vorgesehene Taster muss mit einem der Controller-Pins für INT0 oder INT1 verbunden sein, um die Schaltung wieder aus dem Sleep-Zustand holen zu können. Deshalb gibt es keine "programmtechnisch günstige Verdrahtung", also alle 8 Spalten/Zeilen jeweils an einem Port. Dies ist bei der Programmierung der Firmware zu beachten, verkompliziert sie aber nicht wesendlich.

Software

Als Ausgangspunkt für eine Reihe von möglichen Programmen mit dieser Hardware, wurde erstmal ein Applikations-Template geschrieben. Folgende Dinge wurden hier bereits implementiert und können 1:1 in weitere Anwendungen übernommen werden:

  • Hardwaredefinitionen (Definition der Ports/Pins usw. für die Taster und jede einzelne Steuerleitung der LED-Matrix)
  • Multiplex-Ansteuerung der LED-Matrix im Timer0-Overflow-Interrupt des ATMega8. Es werden die Zeilen der Matrix einzeln durchgeschaltet und jeweils die entsprechenden Spalteninformationen ausgegeben. Die "Bildinformationen" befinden sich im globalen Feld led[], welches nur noch mehr oder weniger sinnvoll gesetzt werden muss.
  • Tasterabfrage mit Entprellung (Funktion getkey()), für jede betätigte Taste wird ein definierter Tastencode zurückgegeben.
  • der Ein-/Ausschalter ist bereits im Template realisiert. Bei Betätigung dieses Tasters fährt der Controller in den Sleep-Modus mit der geringsten Stromaufnahme. Nach nochmaliger Betätigung des Tasters, startet der Controller wieder.

Desweiteren wurden 2 Farbmodi im Template realisiert, welches mit dem Define TWO_BIT_DOTS gesteuert werden kann und nach dem sich auch die Größe des Bildspeichers (Feld led[]) richtet:

  • 2-Farb-Modus: led[] ist 8 Byte groß, jeweils ein Byte für eine Zeile, jedes Bit im jeweiligen Byte korrespondiert mit der entsprechenden Spalte in der Zeile. Bit=0 --> LED aus; Bit=1 --> LED an
  • 4-Farb-Modus: es sind 4 Helligkeitsstufen pro LED definierbar. Das zu ist das Feld led[] 16 Byte lang, 2 Byte (ein word) für eine Zeile, jeweils 2 Bit für eine Spalte. Damit sind 4 Zustände pro LED möglich: 00=LED aus... 11=LED ganz hell. Softwaretechnisch wurde dieser Modus über Austastlücken während des Multiplexbetriebes realisiert. D.h, die 2-Bit-Zahl für die entsprechende LED gibt an, wieviel mal die LED in 4 aufeinander folgenden Zyklen angeschaltet wird. Theoretisch ist es auch möglich, noch mehr Helligkeitsabstufungen zu realisieren. Dazu müsste aber die Multiplex-Frequenz weiter erhöht werden, damit die LEDs mit geringer Helligkeit nicht anfangen (sichtbar) zu flackern. Die Erhöhung der Frequenz würde aber auch eine geringere Gesamthelligkeit ergeben...

Mögliche Applikationen, die man mit dieser Hardware realisieren könnte:

Kontakt

Uwe

'Persönliche Werkzeuge