LedController  2.0.2
A library for the MAX7219 and the MAX7221 Led display drivers.
Nutzungsanleitung

Schau auf die Seite des sakurajin::LedController für mehr Informationen über dessen Funktionen schau in die Beispiele.

Diese Seite zeigt die Grundlegende Nutzung des sakurajin::LedController und was man machen kann.

Initialisieren der Bibliothek

  1. Hardware SPI is at least 10 times faster but you can only use specific pins for some signals (look here for which pins).
  2. Software SPI is slower (which only mattesrs if you need really tight timings) but you can freely choose which (free) pins you want to use.

Die Library kann auf zwei Weisen initialisiert werden: mit hardware SPI oder mit software SPI.

  1. Hardware SPI ist mindestens 10 mal schneller aber es müssen bestimmte pins verwendet werden (schau hier für Details).
  2. Software SPI ist langsamer (was nur bei knappen Timings relevant ist) aber man kann alle freien Pins verwenden.

Kleine Einführung in SPI

Das Serial Peripheral Interface (SPI) ist eine synchrone serielle Kommunikationsschnittstelle, welche für Kommunitaktion, primär im embedded Bereich, für kurze Distanzen verwendet wird. In diesem Fall ist der microcontroller der Master, der die Slaves (mindestens ein 7-Segment display oder Led Matrix Segment) steuert.

Der Master hat frei relevante Pins: SCLK(Serial Clock), MOSI(Master Out Slave In) und SS(Slave Select). Der Slave hat drei entsprechende Pins (und zwei für den Strom(GND und VCC)): CLK(Clock), DIN(Data In), CS(Ship Select). SCLK muss mit CLK verbunden werden und MOSI mit DIN. Diese Signale können zweichen mehreren SPI slaves geteilt werden, auch wenn die Slaves nicht miteinander zu tun haben. SS muss mit CS verbunden werden und jeder Slave braucht einen eigenen SS pin(dies kann jeder freier pin sein).

Getting started

Zum Verwenden muss erst ein neues sakurajin::controller_configuration objekt erstellt werden. Dieses wird verwendet um das setup des sakurajin::LedController zu konfigurieren, was sehr komplex sein kann. sakurajin::controller_configuration hat keinen Konstruktor und ist dadurch mehr wie ein struct als eine 'richtige' Klasse. Weil alle Klassen der Bibliothek ein template sind müssen die Dimensionen der Matrix angegeben werden. Dadurch wird der Datentyp der sakurajin::controller_configuration sakurajin::controller_configuration<Segmente_x,Segmente_y>. Um zu sehen wie man mehrere Zeilen mit einem sakurajin::LedController steuern kann schau diese Seite an. Der Rest der Seite wird sakurajin::controller_configuration<4,1> verwenden wie im Beispiel Rakete.

Wenn Hardware SPI verwendet werden soll muss useHardwareSpi auf true gesetzt werden, ansonsten auf false. Falls hardware SPI verwendet wird dann muss nur der CS pin angegeben werden, ansonsten wird noch der CLK und MOSI pin benötigt. Einfach die gewünschten Werte SPI_CS, SPI_CLK und SPI_MOSI zuweisen.

Nun kann die Konfiguration mit der Funktion sakurajin::controller_configuration.isValid() auf Gültigkeit geprüft werden. Falls true zurückgegeben wird, kann mit dem nächsten Schritt fortgefahren werden. Wenn nicht lohnt es sich debug_output auf true zu setzen und rauszufinden was schief läuft.

Nun da eine Gültige Konfiguration vorhanden ist, kann diese an die init Funktion des sakurajin::LedController Objekts übergeben werden. Nun können sakurajin::LedController.setRow und sakurajin::LedController.setSegment verwendet werden um Daten an die Matrix zu senden.

setSegment sets a whole segment but the segment can be specified through coordinates or the index. sakurajin::LedController.setSegment setzt ein ganzes Segment, allerdings kann das Segment über Nummer und Koordinaten angegeben werden.

Der folgende Codeschnipsel sollte funktionieren und zeigt wie ein Led initialisiert mit hardware SPI wird und auf einigen Segmenten Daten angezeigt werden.

#include "sakurajin::LedController.hpp"
void setup(){
conf.useHardwareSpi = true;
conf.SPI_CS = 25;
lc.init(conf);
lc.setRow(lc.getConfig().getSegmentNumber(0,1),2,0xAA);
lc.setSegment(lc.getConfig().getSegmentNumber(1,1),{0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F});
lc.setSegment(2,1,{0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,0x00});
}
void loop(){
}

Was jetzt?

Nun wo die Grundlagen verstanden sind kann man sich den fortgeschrittenen Themen wie dem Verwenden mehrerer Zeilen oder dem Bewegen der angezeigten Daten widmen.

sakurajin::controller_configuration::useHardwareSpi
bool useHardwareSpi
true falls hardware SPI genutzt werden soll (schaue https://www.arduino.cc/en/Reference/SPI für die P...
Definition: LedController_config.hpp:78
sakurajin::controller_configuration
Diese Klasse wird zur Konfiguration des sakurajin::LedController verwendet.
Definition: LedController_config.hpp:31
sakurajin::controller_configuration::SPI_CS
unsigned int SPI_CS
Der pin für das chip select Signal (CS).
Definition: LedController_config.hpp:54
sakurajin::LedController
Diese Klasse bietet ein Interface zur Steuerung von MAX7219 uns MAX7221 LED Displaytreibern.
Definition: LedController_template.hpp:40