In diesem Beitrag möchte ich das 8 x 16 LED Matrix Modul von Keyestudio vorstellen.
Bezug
Das LED Matrix Modul KS0357 von Keystudio habe ich über ebay.de für knapp 4€ inkl. Versandkosten* erstanden.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Zum Lieferumfang des Moduls gehört ein vier adriges Kabel, welches in das Modul gesteckt wird.
Leider sind die Farben etwas verwirrend (GND > braun, VCC > weiß, SDA > rot, SCL > schwarz).
Ich denke, hier hat jemand beim Zusammensetzen etwas Kreativität eingesetzt.
Technische Daten
- Betriebsspannung: 3.3V bis 5V
- max. Leistungsaufnahme: 400mW
- max. Stromaufnahme: 200mA
Stromaufnahme des LED Matrix Modules
Die maximale Stromaufnahme am 5V Pin beim Arduino UNO sind laut der Spezifikation 800mA, jedoch kann je nach verwendeter Schnittstelle die zulässige Stromaufnahme darunterliegen.
Spezifikation | Stromstärke |
---|---|
USB 1.0 / 1.1 | 0,1 A |
USB 2.0 | 0,5 A |
USB 3.0 / 3.1 | 0,9 A |
Das Modul selber verbraucht bei allen aktivierten LEDs mit maximaler Helligkeit knapp 170 mA.
Aufbau und Schaltung
Das LED Matrix Modul verfügt über ein vier adriges Anschlusskabel welches für die I2C Schnittstelle SDA & SCL sowie die Stromversorgung 5V & GND dient.
LED Matrix Modul | Arduino UNO |
---|---|
GND | GND |
VCC | 5V |
SDA | analoger Pin A4 |
SCL | analoger Pin A5 |
Programmieren
Aktivieren von LEDs
Die LEDs sind zu jeder Spalte Bitcodiert d.h. es gibt eine Zahl welche ein Muster repräsentiert.
Es startet mit der Hexadezimalen Zahl 0x00 für alle LEDs deaktiviert und mit 0xFF für alle LEDs aktiviert.
Auf der Seite Hex Wert Tabelle – LED Matrix 8×16 von Keystudio findest du eine Beispieltabelle mit Hexadezimalen Werten zu Binärenwerten für das LED-Display.
Quellcode
Den nachfolgenden Quellcode habe ich von dem Wiki Artikel der Seite Ks0357 Keyestudio 8×16 LED Matrix Panel übernommen und etwas abgewandelt. Auf der Seite Tool für das 8×16 LED Matrix Modul von Keyestudio findest du ein nützliches Tool womit du dir eigene Matrixen online Zeichnen und dir bequem den passenden Code generieren lassen kannst.
#define IIC_SCL A5 #define IIC_SDA A4 unsigned char data_line = 0; unsigned char delay_count = 0; unsigned char data_display1 = 0; unsigned char data_display2 = 0; unsigned char data_display3 = 0; unsigned char data_display4 = 0; unsigned char data_display5 = 0; unsigned char data_display6 = 0; unsigned char data_display7 = 0; unsigned char data_display8 = 0; unsigned char data_display9 = 0; unsigned char data_display10 = 0; unsigned char data_display11 = 0; unsigned char data_display12 = 0; unsigned char data_display13 = 0; unsigned char data_display14 = 0; unsigned char data_display15 = 0; unsigned char data_display16 = 0; void IIC_start(); void IIC_send(unsigned char send_data); void IIC_end(); unsigned char table[4][16] = { {0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} }; void setup() { pinMode(IIC_SCL, OUTPUT); pinMode(IIC_SDA, OUTPUT); digitalWrite(IIC_SCL, LOW); digitalWrite(IIC_SDA, LOW); } void loop() { //Setzen der Startadresse + increment um 1 IIC_start(); IIC_send(0x40); IIC_end(); //Schreiben der LED Matrix IIC_start(); IIC_send(0xc0); for (char i = 0; i < 16; i++) { IIC_send(table[0][i]); } IIC_end(); /** Setzen der Helligkeit */ IIC_start(); IIC_send(0x8F); IIC_end(); delay(100); } /** Senden eines Musters im Hexadezimalen Wert */ void IIC_send(unsigned char send_data) { for (char i = 0; i < 8; i++) { digitalWrite(IIC_SCL, LOW); delayMicroseconds(3); if (send_data & 0x01) { digitalWrite(IIC_SDA, HIGH); } else { digitalWrite(IIC_SDA, LOW); } delayMicroseconds(3); digitalWrite(IIC_SCL, HIGH); delayMicroseconds(3); send_data = send_data >> 1; } } /** Setzen des Signals für den Start */ void IIC_start() { digitalWrite(IIC_SCL, LOW); delayMicroseconds(3); digitalWrite(IIC_SDA, HIGH); delayMicroseconds(3); digitalWrite(IIC_SCL, HIGH); delayMicroseconds(3); digitalWrite(IIC_SDA, LOW); delayMicroseconds(3); } /** Setzen des Signals für ENDE */ void IIC_end() { digitalWrite(IIC_SCL, LOW); delayMicroseconds(3); digitalWrite(IIC_SDA, LOW); delayMicroseconds(3); digitalWrite(IIC_SCL, HIGH); delayMicroseconds(3); digitalWrite(IIC_SDA, HIGH); delayMicroseconds(3); }
Hallo,
ein echt toller Beitrag und sehr hilfreich danke!!!
Ich bin mir sicher, dass auch auf meiner Seite jeder etwas passendes für sich findet.
Gruß
Tim