Bedre lysdioder gjennom DMA
Mens vanlige hackaday lesere allerede vet hvordan å blinke en LED med en mikrokontroller og har flyttet til litt mer utfordrende prosjekter som å løse Navier-Stokes-ligningene i 6502 montering, betyr det ikke at det ikke betyr det plass til nybegynnere. [Rik] har publisert en fantastisk veiledning om å misbruke DMA for blinkier glødende ting. Hvorfor vil noen lære om DMA-teknikker? For blinkier glødende ting, selvfølgelig.
Denne opplæringen påtar seg kunnskap om LED-multiplexing og LED-matriser, eller i utgangspunktet en haug med lysdioder koblet sammen på et XY-rutenett. Den naive måten å kjøre en 8 × 8 grid av lysdioder er å feste åtte katoder til GPIO-pinner på en mikrokontroller, feste de åtte anodene til et annet sett med GPIO-pinner og sourcing og synkende strøm som nødvendig. Pin-tellingen kan reduseres med skiftregister, og LED-dimming kan implementeres med PWM. Dette konkluderer med vårt intensive åtte ukers Arduino-kurs.
Takket være Microcontroller som ikke er fanget på 1980-tallet, kan nye teknikker brukes til å kjøre disse LED-matrisene. De fleste av de kraftigere armmikrokontrollerne kommer med DMA, en perifer for direkte minnetilgang. I stedet for å ha CPUen gjør alt arbeidet, kan DMA-kontrolleren bare blande rundt biter mellom minne og pins. Dette betyr blinkerprosjekter og glødende lysdioder.
[Rik ]s metode for DMAING-lysdioder inkluderer å sette opp et stort “OL-array i koden, og initialiserer DMA-periferien riktig og kobler opp LED-matrisen til noen av pinnene. Denne teknikken kan utvides til animasjoner med 64 nivåer av lysstyrke, noe som vil ta en utrolig mengde prosessorkraft (for en mikrokontroller, i det minste) hvis det ikke var for DMA-kontrolleren.
Oppsettet som brukes i disse forsøkene er et STM32F103 Nucleo bord sammen med OpenStM32 IDE. [Rik] har gitt ut all koden over på GitHub, og du er selvfølgelig oppfordret til å leke rundt.