biblioteca "light_ws2812" 10 veces más lenta que la requerida (AVR C, ATMega328p int. 8Mhz)

2

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!

    
pregunta Orotavia

1 respuesta

0

Bien, finalmente lo descubrí. En Atmel Studio, hacer un #define F_CPU 8000000UL al comienzo de main.c no fue suficiente. Me deshice de ese código y creé un símbolo definido 'F_CPU = 8000000UL' en Toolchain > AVR / GNU C Compiler > Symbols.

Supongo que todavía estoy pensando en algunas cosas de Atmel Studio. Todavía no estoy seguro de por qué la definición de F_CPU incluso antes de llamar a las bibliotecas fue errónea; incluso util / delay arrojó algunas advertencias a veces (si tuviera F_CPU como símbolo indefinido, creo).

    
respondido por el Orotavia

Lea otras preguntas en las etiquetas