12x12 LED Matrix mit CH32V003      

von Michael Moske                    

Elektronik-Labor  Projekte  CH32V

FQua

Die Möglichkeiten des CH32V003 so richtig ausreizen, das war das Ziel im folgenden Projekt. In Anlehnung an die bisherigen Beispiele zu Charlieplexing muss es doch möglich sein noch mehr LEDs anzusteueren. Die MCU CH32V003 hat 20 Anschlüsse (Pins), von denen 2 für Spannung (VCC 5V oder 3.3V) und Masse (GND) verwendet werden. Weitere 2 Anschlüsse sind reserviert für die Programmierung (SWDIO => Pin PD1) und Reset (Pin PD7). Demnach könnte man mit den verbleibenden 16 Pins 16x(16-1) = 240 LEDs mittels Charlieplexing steuern. Mit ein wenig Zurückhaltung werden in diesem Projekt jedoch "nur" 12x12 = 144 LEDs in einer quadratischen Matrix mit 13 Pins angesteuert ( mit 13 Pins maximal 13x(13-1) = 156 möglich). Dann sind noch 3 Pins frei für einen Toggle Button zum Umschalten von Programmen und 2 für analoge Inputs mit z.B. Potis (PA1 und PA2). Dies alles ist in einer Platine realisiert, die mit EasyEda entworfen wurde, siehe oberes Bild. Im Schaltungslayout ist jede Zuleitung mit einem 1k Ohm Widerstand abgesichert. Der Stromfluss geht dann immer über 2 Widerstände. Der Grund dieser Anordnung ist, dass bei Fehlprogrammierung von Anschlüssen mit OUTPUT High und OUTPUT Low ein Kurzschluss vermieden wird.

 

Das Platinenlayout ist mit all diesen vielen Verbindungen sehr komplex. Daher wurde die Anordnung der Spaltenansteuerung für kurze Verbindungswege zur MCU angepasst in der Reihenfolge PC7, PC6, PC5, PC4, PC3, PC2, PC1, PC0, PD2, PD3, PD6, PD5, PD4. Damit die Programmierung möglichst einfach ist möchte man gerne in einem xy-Koordinatensystem arbeiten. Das heisst, es wird ein Pinmapping erforderlich, welches die Pins den entsprechenden LEDs zuordnet. Für jede LED ist zudem jeweils ein Paar definiert für OUTPUT High und OUTPUT Low, während alle anderen Pins auf Input gesetzt sind (und somit hochohmig "stromlos", also inaktiv sind). Für diese Paarungen wurden zwei 12x12 Matrizen erstellt, in denen die jeweiligen zugehörigen xy-Koordinaten den Positionen in den Matrizen entsprechen. In diesen Matrizen stehen lediglich die Indizes der Pinreihenfolge des Boards. So kombiniert wird in der Programmierung lediglich mit xy-Koordinaten umgegangen, während das gekoppelte Pinmapping den Rest automatisch anpasst.

Die Programmierung erfolgt zunächst in der Arduino IDE. Ein erstes Beispiel ist der "Rundlauf" von Einzel-LEDs (https://youtube.com/shorts/Atq2ClczQT0). Ein weiteres Beispiel für das (zumindest für das Auge) gleichzeitige leuchten von mehreren LEDs ist das animierte Herzschlagbeispiel (https://www.youtube.com/shorts/WDBSgnXAdHs), wobei tatsächlich zu jedem Zeitpunkt jeweils nur 1 LED leuchtet. Dies erfolgt aber in solch schnellem Wechsel, dass das menschliche Auge das Aufleuchten als gleichzeitig empfindet. Die einzelnen Bildsequenzen werden aus vordefinierten 12x12 Pixelmatrizen ausgelesen. Natürlich können auch Zahlen und Buchstaben dargestellt werden, sofern die entsprechenden Pixelmatrizen vorhanden sind. Dies ist in dem weiteren Beispiel "Countdown" (https://youtube.com/shorts/fW1NnSXQA_M),zu finden. Dies kann natürlich auch noch zu Lauftext erweitert werden.

 

Letztendlich können auch interaktive Spiele programmiert werden mit Verwendung der 2 Potis für analogen INPUT und der Toggle Button als eine Art Trigger. Dazu passt das Beispiel PingPong, dokumentiert mit Video (https://youtube.com/shorts/_hdsiktkmV8)  Die 2 Schläger werden mit den Potis verschoben und mit dem Toggle Button kann die Geschwindigkeit stufenweise erhöht werden.Eine andere Möglichkeit ist das legendäre Space Invaders Spiel. Der Spielablauf ist dann aber nicht mehr so einfach zu programmieren. Oder aber ein Oszilloskop entwickeln. Die Signaleingabe könnte auf einem der Potis erfolgen, die Anpassung der Einstellungen mit dem jeweils anderen Poti und dem Toggle Button. Das ist dann etwas für ein späteres Projekt.

Downloads:

12x12_Matrix_LED_Rundlauf.zip

12x12_Muster_mit_Herz_animiert.zip

12x12_Ascii_Counting.zip



Elektronik-Labor  Projekte  CH32V