Einige Eigenschaften des Boards (Auszug)
48 MHz Arm® Cortex®-M4 Mikroprozessor mit Gleitkomma-Einheit (FPU)
5 V Betriebsspannung
RTC (Real Time Clock)
14-Bit ADC
12-Bit DAC (max.)
Speicher
256 kB Flash
32 kB SRAM
8 kB EEPROM
Datenaustausch
1x UART (D0, D1)
1x SPI (D10 – D13, ICSP header)
1x I2C (A4, A5, SDA, SCL)
Spannungsversorgung
Betriebsspannung für RA4M1 – 5 V
Empfohlene Eingangsspannung (VIN) - 6-24 V
Hohlstecker-Verbindung mit VIN-Pin - 6-24 V
Stromversorgung über USB-C® bei 5 V
8x12 LED Matrix
Fest installiert ist auf dem Board eine 8x12 LED Matrix. Sie lässt sich für einfache Versuche bestens einsetzen. Um mit ihr arbeiten zu können benötigt man zusätzlich zum Board
Methode 1: Angesprochen werden die 96 LEDs über ein 2-dim Byte Array. Von den so bereitgestellten 768 Bits werden tatsächlich nur 96 Bits für die LEDs benötigt -> sehr speicherintensiv. Jedes Bild (Frame) des Arrays benötigt 768 Bits.
Methode 2: Die 96 LEDs werden über drei vorzeichenlose long Variable (32-Bit) angesprochen. Jedes Bit entspricht einem Zustand einer bestimmten LED der Matrix. Jeder Frame benötigt 96 Bits.
Der Vorteil bei Verwendung von Methode 1 besteht darin, dass man das Bild im Array "sehen" kann, während es bei Verwendung der Methode 2 codiert und damit nicht sichtbar ist.
Die erste Übung verwendet Methode 1.
Übung 1 - Ein Frame in einem 2 dimensionalen Byte Array anlegen
Übung 1 - Frame erstellen mit 2-dim Byte Array | |
Material |
|
Aufgaben |
|
Programm "led_matrix1.ino"
#include "Arduino_LED_Matrix.h" // Füge die Matrix-Bibliothek ein
ArduinoLEDMatrix matrix; // erzeuge Objekt in der Klasse
void setup() {
matrix.begin(); // starte die LED
Matrix
}
byte M1[8][12] = {
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}
};
void loop() {
int i, j;
for (i=0;i<9;i++)
{
for (j=0;j<13;j++)
{ matrix.renderBitmap(M1, i, j);
}
}
}
Gut zu erkennen ist, dass alle LEDs, die auf 1 oder HIGH gezogen werden, in der Matrix durch die Ziffer 1 repräsentiert sind. Auf diese Weise lassen sich schnell unterschiedliche Frames erstellen.
Übung 2- Ein Frame mit long-Variablen anlegen
Das 2-dim byte Array wird in dieser Übung in drei vorzeichenlose long-Variable (32-Bit) überführt. 1 Byte enthält 8 Bit; es kommen damit vier Byte auf eine unsigned long Variable. Das folgende Programm led_matrix1_long.ino zeigt eine Umsetzung.
Das Ergebnis ist identisch mit dem aus Übung 1; sowohl Speicherverbrauch als auch Programmlänge sind in diesem Fall aber geringer.
Übung 2 - Ein Frame mit long-Variablen anlegen | |
Material |
|
Aufgaben |
|
Die Codierung im Hexadezimal-Format gelingt am schnellsten bei Verwendung des LED-Matrix_Editors aus den Arduino Labs. Dort wird detailliert die Nutzung der Software erklärt.
Programm led_matrix1_long.ino
#include "Arduino_LED_Matrix.h" // Füge die Matrix-Bibliothek ein
ArduinoLEDMatrix matrix; // erzeuge Objekt in der Klasse
void setup() {
matrix.begin();
// starte die LED Matrix
}
const uint32_t M1[] = {
0x200600a,
0x200200,
0x20020020
};
void loop() {
matrix.loadFrame(M1);
}
Durch die hexadezimale Codierung "per Hand" kann auf die Schnelle die Darstellung des Frames nicht abgelesen werden..Und ... die Codierung ist dadurch fehleranfällig.
Eine Hilfe bei der Frame-Erstellung und der anschließenden Codierung leistet der Led-Matrix-Editor, der hier zu finden ist.
Darüber lassen sich einzelne Frames oder auch Sequenzen sehr schnell entwerfen und codieren und in das eigene Programm einbauen. Wie das geht, soll die folgende Übung zeigen.
Übung 3- Eine Animation mit dem Led Matrix Editor erstellen
Übung 3 - Ein Animation erstellen | |
Material |
|
Aufgaben |
|
Programm led_matrix_1_long_anim1.ino
#include "Arduino_LED_Matrix.h" // Füge die Matrix-Bibliothek ein
#include "animation1.h" // Datei mit den Frames einbinden
ArduinoLEDMatrix matrix; // erzeuge Objekt in der Klasse
void setup() {
matrix.begin(); // starte die LED
Matrix
}
void loop() {
int t = 250;
matrix.loadFrame(Bild1);
delay(t);
matrix.loadFrame(Bild2);
delay(t);
matrix.loadFrame(Bild3);
delay(t);
matrix.loadFrame(Bild4);
delay(t);
}
Datei: animation1.h
const uint32_t Bild1[] = {
0x6009,
0x1081080,
0x90060000
};
const uint32_t Bild2[] = {
0x1f819,
0x81081081,
0x981f8000
};
const uint32_t Bild3[] = {
0x1f810,
0x81081081,
0x81f8000
};
const uint32_t Bild4[] = {
0x10809,
0x600600,
0x90108000
};