Pergunta

Acabei de comprar um Rainbowduino para controlar uma carga de LEDs individuais (não uma matriz RGB). Toda a documentação até agora é destinado para controlar matrizes RGB que é não o que eu sou depois.

Se você não estiver familiarizado com o Rainbowduino é uma Arduino clone com 24 canais de corrente constante de 120 mA, 8 Super canal condutor da fonte de 500 mA e cada uma ampla adaptação de tensão de saída a partir de 5 V - 12 V DC. Perfeito para LEDs condução. A página do produto é aqui: http://www.seeedstudio.com/blog/?page_id= 187

Eu conectado até 16 LEDs e quer ser capaz de transformar cada um ligado e desligado individualmente com digitalWrite(). Fiz upload de algum código de demonstração para a placa que não está realmente funcionando. Eu trabalhei para fora que os 8 canais de origem do driver são facilmente controláveis ??com digitalWrite() nos pinos 3-11. No entanto controlar os outros 24 canais de pia é mais difícil. Aparentemente, eles são controlados por 3 registradores de deslocamento (um de cada) que só posso acesso com shiftOut. Eu não tenho idéia de como isso funciona. Alguém pode ajudar a apontar-me na direção certa?

Metade os LEDs são ligados em azul 1-8 ea outra metade são ligados em verde 1-8. As pernas positivos são ligados em VCC1-2 que foram definido como Alto. Estou confiante de que o circuito está conectado corretamente, é a programação que eu estou tendo problemas com.

Eu olhei sobre o código de exemplo que é fornecido com o Rainbowduino, mas eu não posso fazer o sentido dele. Como posso resolver este problema?

Foi útil?

Solução

O uso de um registrador de deslocamento para multiplex (ou de-multiplex, dependendo do seu ponto de vista) entradas / saídas é muito comum em eletrônica digital.

Basicamente, você comércio economia de pinos no seu controlador por ter de incluir um outro chip (registrador de deslocamento) no projeto.

Neste caso, o registo funciona como um conversor de série para paralelo; ele tem uma linha de entrada de série, que é alimentado com pedaços da sua CPU. Ele também tem 8 saídas paralelas, ligadas a uma memória de 8 bits que é carregado em série a partir da CPU. Usando isso, você pode "deslocar fora" 8 bits de dados em um único pino (mais um pino para cronometrar, normalmente), que são então armazenados no registrador de deslocamento e pode conduzir 8 LEDs em paralelo.

Neste caso particular, você precisa descobrir qual AVR porta pins os registos de deslocamento (os MBI5168 motoristas dissipador de corrente constante conter os registos de deslocamento, aqui) está conectado. Eles devem ser acorrentado a um par de saídas, uma para dados e outra para relógio. Depois de saber os pinos, você deve ser capaz de levá-los a si mesmo usando o comando ShiftOut .

Indo um pouco mais longe, esta amostra "sketch" contém as seguintes definições, no arquivo chamado "Rainbow.h":

//MBI5168
#define SH_DIR_OE    DDRC
#define SH_DIR_SDI   DDRC
#define SH_DIR_CLK   DDRC
#define SH_DIR_LE    DDRC

#define SH_BIT_OE    0x08
#define SH_BIT_SDI   0x01
#define SH_BIT_CLK   0x02
#define SH_BIT_LE    0x04

#define SH_PORT_OE   PORTC
#define SH_PORT_SDI  PORTC
#define SH_PORT_CLK  PORTC
#define SH_PORT_LE   PORTC

Este é, naturalmente total de "boatos" digitais (eu não possuo o dispositivo, eu nunca programado em qualquer tipo de * duino), mas eu diria que este é o sistema de entrega de bala-vomitando partículas você' re procurando.

Eu interpreto isso como assim:

  • PORTC é o ligado aos registos de deslocamento, todos os pinos de controle estão em PORTC.
  • Quatro pinos são dedicados (em vez de dois otimista eu mencionei acima).
  • O relógio é pin PORTC: 2 e os dados são PORTC:. 1

Outras dicas

Controlar cada LED único é bastante tempo caro, é melhor pensar em filas, enquanto que cada cor LED é apresentada como em pouco, por isso é de 8 bits x 3 cores (vermelho, verde, azul). Eu escrevi uma pequena biblioteca Rainbowduino que lhe permite definir cada linha ou quadro facilmente:

Leia o meu post em que

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top