LEDs melhores através do DMA

Enquanto os leitores regulares do Hackamadora já sabem como piscar um LED com um microcontrolador e mudaram para projetos ligeiramente mais desafiadores, como resolver as equações da Navier-Stokes na assembléia de 6502, isso não significa que não seja espaço para novatos. [Rik] publicou um ótimo tutorial sobre abusar DMA para coisas piscas brilhantes. Por que alguém gostaria de aprender sobre técnicas de DMA? Para coisas brilhantes, é claro.

Este tutorial assume conhecimento de multiplexação led e led matrizes, ou basicamente um monte de LEDs conectados juntos em uma grade xy. A maneira ingênua de dirigir uma grade de 8 × 8 de LEDs está anexando oito catódios a pinos GPIO em um microcontrolador, anexando os oito anodos a outro conjunto de pinos GPIO, e acumulação e corrente de afundamento, conforme necessário. A contagem de pinos pode ser reduzida com registros de turnos, e o escurecimento LED pode ser implementado com PWM. Isso conclui nosso curso intensivo de oito semanas Arduino.

Graças aos microcontroladores que não estão presos nos anos 80, novas técnicas podem ser usadas para impulsionar essas matrizes LED. A maioria dos microcontroladores de braço mais poderosos vêm com DMA, um periférico para acesso direto à memória. Em vez de ter a CPU, faça todo o trabalho, o controlador DMA pode simplesmente embaralhar em torno de bits entre memória e pinos. Isso significa projetos de blinker e LEDs brilhantes.

O método [Rik] para LEDs DMAING inclui a configuração de um grande ‘OL Array no código, inicializando corretamente o periférico DMA e fiação da matriz de LED para alguns dos pinos. Essa técnica pode ser expandida para animações com 64 níveis de brilho, algo que levaria uma quantidade incrível de poder de processamento (para um microcontrolador, pelo menos) se não fosse para o controlador DMA.

A configuração usada nessas experiências é uma placa de núcleo STM32F103 junto com o OpenStM32 IDE. [Rik] lançou todo o código no GitHub, e você é, é claro, encorajado a brincar.

Leave a comment

Your email address will not be published. Required fields are marked *