Inhaltsverzeichnis:

So verbinden Sie eine MAX7219-gesteuerte LED-Matrix 8x8 mit dem ATtiny85-Mikrocontroller - Gunook
So verbinden Sie eine MAX7219-gesteuerte LED-Matrix 8x8 mit dem ATtiny85-Mikrocontroller - Gunook

Video: So verbinden Sie eine MAX7219-gesteuerte LED-Matrix 8x8 mit dem ATtiny85-Mikrocontroller - Gunook

Video: So verbinden Sie eine MAX7219-gesteuerte LED-Matrix 8x8 mit dem ATtiny85-Mikrocontroller - Gunook
Video: Arduino Zeichenprogramm auf 8x8 LED Matrix Display MAX7219 2024, Juli
Anonim
So verbinden Sie eine MAX7219-gesteuerte LED-Matrix 8x8 mit dem ATtiny85-Mikrocontroller
So verbinden Sie eine MAX7219-gesteuerte LED-Matrix 8x8 mit dem ATtiny85-Mikrocontroller

Der MAX7219-Controller wird von Maxim Integrated hergestellt und ist ein kompakter serieller Ein-/Ausgangs-Anzeigetreiber mit gemeinsamer Kathode, der Mikrocontroller mit 64 einzelnen LEDs, numerischen 7-Segment-LED-Anzeigen mit bis zu 8 Stellen, Balkendiagrammen usw. verbinden kann -Chip sind ein BCD-Code-B-Decoder, eine Multiplex-Scan-Schaltung, Segment- und Zifferntreiber und ein statischer 8×8-RAM, der jede Ziffer speichert.

Die MAX7219-Module lassen sich sehr bequem mit Mikrocontrollern wie ATtiny85 oder in unserem Fall dem Tinusaur Board verwenden.

Schritt 1: Die Hardware

Die Hardware
Die Hardware
Die Hardware
Die Hardware

Die MAX7219-Module sehen normalerweise so aus. Sie haben auf der einen Seite einen Eingangsbus und auf der anderen einen Ausgangsbus. Auf diese Weise können Sie 2 oder mehr Module, d. h. hintereinander, verketten, um kompliziertere Setups zu erstellen.

Die von uns verwendeten Module können mit 5 kleinen Jumpern in einer Kette verbunden werden. Siehe das Bild unten.

Schritt 2: Pinbelegung und Signale

Das Modul MAX7219 hat 5 Pins:

  • VCC – Leistung (+)
  • GND – Masse (-)
  • DIN – Dateneingabe
  • CS – Chipauswahl
  • CLK – Uhr

Das bedeutet, dass wir 3 Pins auf der Seite des ATtiny85-Mikrocontrollers benötigen, um das Modul zu steuern. Das werden sein:

  • PB0 – verbunden mit dem CLK
  • PB1 – verbunden mit der CS
  • PB2 – angeschlossen an DIN

Dies reicht aus, um das Modul MAX7219 anzuschließen und zu programmieren.

Schritt 3: Das Protokoll

Das Protokoll
Das Protokoll

Die Kommunikation mit dem MAX7219 ist relativ einfach – er verwendet ein synchrones Protokoll, d. h. für jedes gesendete Datenbit gibt es einen Taktzyklus, der das Vorhandensein dieses Datenbits anzeigt.

Mit anderen Worten, wir senden 2 parallele Sequenzen an Bits – eine für die Uhr und eine andere für die Daten. Das macht die Software.

Schritt 4: Die Software

Die Software
Die Software

Die Funktionsweise dieses MAX7219-Moduls ist wie folgt:

  • Wir schreiben Bytes in sein internes Register.
  • MAX7219 interpretiert die Daten.
  • MAX7219 steuert die LEDs in der Matrix.

Das bedeutet auch, dass wir nicht ständig durch die LED-Anordnung kreisen müssen, um sie zum Leuchten zu bringen – dafür sorgt der Controller MAX7219. Es könnte auch die Intensität der LEDs verwalten.

Um die MAX7219-Module bequem nutzen zu können, benötigen wir daher eine Funktionsbibliothek, die diesem Zweck dient.

Zunächst benötigen wir einige Grundfunktionen, um in die MAX7219-Register zu schreiben.

  • Schreiben eines Bytes in den MAX7219.
  • Schreiben eines Wortes (2 Bytes) in den MAX7219.

Die Funktion, die ein Byte in den Controller schreibt, sieht so aus:

Void max7219_byte (uint8_t data) { for(uint8_t i = 8; i >= 1; i--) { PORTB &= ~(1 << MAX7219_CLK); // CLK auf LOW setzen if (data & 0x80) // MSB der Daten maskieren PORTB |= (1 << MAX7219_DIN); // DIN auf HIGH setzen sonst PORTB &= ~(1 << MAX7219_DIN); // Setze DIN auf LOW PORTB |= (1 << MAX7219_CLK); // Setze CLK auf HIGH Daten <<= 1; // Nach links verschieben } }

Nachdem wir nun Bytes an den MAX7219 senden können, können wir mit dem Senden von Befehlen beginnen. Dies geschieht durch Senden von 2 Byes – 1 für die Adresse des internen Registers und das 2 für die Daten, die wir senden möchten.

Es gibt mehr als ein Dutzend Register im MAX7219-Controller.

Das Senden eines Befehls oder eines Wortes ist im Grunde das Senden von 2 aufeinanderfolgenden Bytes. Die Funktion, die das implementiert, ist sehr einfach.

void max7219_word(uint8_t Adresse, uint8_t Daten) { PORTB &= ~(1 << MAX7219_CS); // CS auf LOW setzen max7219_byte (Adresse); // Senden der Adresse max7219_byte(data); // Senden der Daten PORTB |= (1 << MAX7219_CS); // CS auf HIGH PORTB setzen &= ~(1 << MAX7219_CLK); // CLK auf LOW setzen }

Es ist wichtig, hier die Zeile zu beachten, in der wir das CS-Signal wieder auf HIGH bringen – dies markiert das Ende der Sequenz – in diesem Fall das Ende des Befehls. Eine ähnliche Technik wird verwendet, wenn mehr als eine in einer Kette verbundene Matrix gesteuert wird. Der nächste Schritt, bevor wir mit dem Ein- und Ausschalten der LEDs beginnen, besteht darin, den MAX7219-Controller zu initialisieren. Dies geschieht durch Schreiben bestimmter Werte in bestimmte Register. Der Einfachheit halber könnten wir beim Codieren die Initialisierungssequenz in ein Array einfügen.

uint8_t initseq = { 0x09, 0x00, // Decode-Mode Register, 00 = Keine Decodierung 0x0a, 0x01, // Intensitätsregister, 0x00.. 0x0f 0x0b, 0x07, // Scan-Limit Register, 0x07 um alle Zeilen anzuzeigen 0x0c, 0x01, // Shutdown-Register, 0x01 = Normalbetrieb 0x0f, 0x00, // Display-Test-Register, 0x00 = Normalbetrieb };

Wir müssen nur die 5 obigen Befehle nacheinander als Adress-/Datenpaare senden. Nächster Schritt – Aufleuchten einer Reihe von LEDs.

Dies ist sehr einfach – wir schreiben nur einen Befehl, wobei das 1. Byte die Adresse (von 0 bis 7) ist und das 2. Byte die 8 Bits sind, die die 8 LEDs in der Reihe darstellen.

Void max7219_row (uint8_t Adresse, uint8_t Daten) { if (Adresse >= 1 && Adresse <= 8) max7219_word (Adresse, Daten); }

Es ist wichtig zu beachten, dass dies nur für 1 Matrix funktioniert. Wenn wir mehr Matrizen in einer Kette verbinden, zeigen sie alle die gleichen Daten. Der Grund dafür ist, dass wir nach dem Senden des Befehls das CS-Signal wieder auf HIGH bringen, was dazu führt, dass alle MAX7219-Controller in der Kette verriegeln und anzeigen, was der letzte Befehl war.

Empfohlen: