Así que estoy intentando ejecutar algunos SK6812 (clones WS2812) en un ATMega328p independiente.
¡La señal de salida es muy lenta! Defino F_CPU como 8000000 (8Mhz), tanto en el código como en los Símbolos de Atmel Studio, pero mi señal es lenta en un factor de 10. El LED es siempre blanco, en lugar de rojo como pretende el código.
#ifndef F_CPU
#define F_CPU 8000000UL // 8 MHz clock speed
#endif
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include "light_ws2812.h"
struct cRGB led[1];
int main(void)
{
while(1)
{
led[0].r=25;led[0].g=00;led[0].b=0; // Write red to array
ws2812_setleds(led,1);
_delay_ms(500); // wait for 500ms.
//led[0].r=0;led[0].g=25;led[0].b=0; // green
//ws2812_setleds(led,1);
//_delay_ms(500);
//led[0].r=0;led[0].g=00;led[0].b=25; // blue
//ws2812_setleds(led,1);
//_delay_ms(500);
}
}
Los fusibles son l: 0xA2, h: 0xD9, e: 0x07 . Esto debería corresponder a un reloj interno de 8Mhz (verificado en B0 con osciloscopio). Esto es lo que obtengo para una señal de datos en B4:
Losdatossevenbien(00000000paraverde,luego00011001(25d)pararojo).Sinembargo,elperíodoesdeaproximadamente12µs,perosegúnlahojadedatosdeSK6812,elperíododebeserde1.25µs±150ns:
Nohaymuchoquemostrarenelesquema,perohayqueserexhaustivo:
Y como dije antes, el encabezado previsto para los datos (D6) no generó nada, por lo que tuve que usar B4 ya que también estaba dividido en un encabezado. (Problema de conectividad, Lo descubrí)
Cualquier ayuda es apreciada!