RGB LED matricer med STM32 og DMA

for nogle år siden fik [Frans-Willem] et par RGB LED-paneler. Ti 32 × 16 paneler er mange LED’er, og for at køre alle disse paneler kræver nogle tilstrækkeligt kraftfuldt hardware. Han forsøgte at arbejde med et FPGA Development Board, men det havde ikke nok hukommelse til 24-bit farve. Microcontroller du Jour – en Ti Stellaris – kunne ikke få meget mere end 16 bit farve uden flimrende. Med en flok LED’er, men ingen måde at køre dem på, sætter [Frans-Willem] panelerne i en kasse et sted og venter på den dag, de kunne bruges til deres fulde kapacitet.

Denne dag kom, da [Frans-Willem] blev introduceret til STM32-serien af ​​chips med F1 Discovery Board. Mens han forsøger at finde nogle elektroniske legetøj til at bruge med dette bord, snuble han på LED-panelerne og gav dem en meget mere prøve. Resultaterne er spektakulære, med 33 bit farve, med animationer streamet over en router over WiFi.

De pågældende paneler er HUB75 LED-paneler. I de 32 × 8 paneler er der seks datapalter – to hver for hver farve – fire række vælg stifter og tre kontrolstifter. Rækken vælger Pins Vælg, hvilken række pixels der er aktiv til enhver tid. Cyklus gennem dem hurtigt nok, og det virker som om de er alle på en gang. Kontrolstifter fungerer stort set som kontrolstifterne i et skiftregister, med datastifterne, der fylder den åbenbare rolle.

Koden, der rent faktisk driver LED’erne, sker alle på en STM32F4 ved hjælp af DMA og FSMC, eller den fleksible statiske hukommelsescontroller, der findes på chippen. Denne perifere tager sig af de kontrollinjer, der findes i hukommelsen, så når du skifter skrivestrålen, vil chippen dumpe, hvad der er på datalinjerne til en bestemt adresse i hukommelsen. Det er en fantastisk måde at tage sig af at generere et ursignal.

For at sende pixels til denne skærmdriver bruger [Frans-Willem] det altid populære TP-Link WR703N. Han havde oprindeligt planlagt at sende alle pixeldata over USB-porten, men der var for meget overhead, en USB 1.1 er ikke hurtigt nok. Det blev løst ved at bruge UART på routeren med en ny bilist og en genkompileret version af OpenWRT.

Alle softwaren til at replikere dette projekt er tilgængeligt på GitHub, og der er en fantastisk video, der viser, hvad det færdige projekt kan gøre. Du kan tjekke det ud nedenfor.