Ora entao boas noites
Desde o ultimo post ja fiz muita coisa, ou pelo menos ja aprendi muita coisa, isso de certeza.
Decidi realmente usar os ws2812. E como os controlar? Com as portas digitais. Claro isto envolveria muito uso do processador, por isso que vou usar? DMA.
É a forma que o fadecandy e o teensy controlam os ws2812 com 8 outputs, tendo 8x mais taxa de refrescamento.
Bem eu nao demorei tanto tempo so para decidir como fazer. Ja tenho feito! Pelo menos a parte de controlar o ws2812 a partir dos valores na ram. Ainda falta uma forma de mandar dados do computador para a MCU, tanto o codigo do computador como do receber do MCU.
Ok entao aqui ao meu lado tenho neste momento 8 ws2812 em serie a piscar (so tinha estes) com valores de um random.
E com os 8 outputs não? Não! Eu tenho 32 outputs controlados a partir de 4 arrays de varios membros de 1byte.
O unica desvantagem grande que tem em relação ao teensy é o contador do DMA. O do Tiva é apenas de 10bits contra os 15bits do teensy.
O modo que tenho isto a funcionar nao é tão eficiente, necessita de 24*3bytes para controlar 1 ws2812 por cada 8 portas (ou seja ta a controlar 8 ws2812). Com o limite do DMA so poder fazer 1024 transferencias antes de ter de ser re-configurado pelo processador, o DMA so consegue enviar dados para 14 ws2812 por transferencia (14 ws2812 por porta, por isso 32*14). Entao de 14 em 14 Ws2812 tem de rapidamente re-configurar o
source address e ligar o DMA. O Tiva que tenho é um ARM-M4 120Mhz logo executa os interrupts muito rapido (ja testei alguns interrupts a re-configurar o SPI e consegui um tempo dentro do interrupt de 400ns e o interrupt nao demora mais de 180nS a fazer
push and pop)
Tendo 256Kb de RAM deixa espaço para controlar muitos LEDs mesmo na forma pouco optimizada que tenho para enviar dados.
TODO:Protocolo UART para receber dados e actualizar as tabelas.
Programar RPI ou Computador para enviar dados para o controlador
Optimizar o trigger do DMA usando mais perifericos e diminuindo o uso de RAM para 3x menos
Estudar funcionamentos mais complexos de DMA para ultrupassar o limite de 1024 transferencias (talvez Scater-Gather)
Possivelmente anexar um projecto de outro membro que envolva uma FPGA converter dados VGA para UART com a resolução e velocidade apropriada
Deixo-vos um video de quando tinha apenas 8 outputs paralelos, tambem nao tenho ca material para vos mostrar 32 outputs a funcionarao mesmo tempo.