Как я могу заставить rgb-светодиод работать в mplab для PIC18F4550?

#c #pic

#c #рис

Вопрос:

Я пытался на C заставить WS2812 работать в mplab с pic18f4550, энергия достигает светодиода, но он не включается, и я не могу выбрать светодиод, который я использую, но это не так, как я могу это решить? Это код, который я использую: Спасибо

main.c

 #define _XTAL_FREQ 4000000UL
#include "config.h"
#include "ws2812.h"

void main(void) {
    ADCON1=0b00001111;
    TRISB=0b00000001; 
    if (energy_port==1){
             pin_strip_led=1;
            ws2812_setPixelColorLed(1, ws2812_Color(255, 0, 0));
    }
    else{ 
        pin_strip_led=0;
    }
    return;
}
 

Это то, что я использую в ws2812.h:

 #define STRIP_SIZE 8
#define pin_strip_led PORTBbits.RB1
#define energy_port PORTBbits.RB0
void ws2812_setPixelColorLed(unsigned char pixel, unsigned long color) {
    Strip_RGBData[pixel][0] = (char) (color >> 16); 
    Strip_RGBData[pixel][1] = (char) (color >> 8);
    Strip_RGBData[pixel][2] = (char) (color);
}
unsigned long ws2812_Color(unsigned char r, unsigned char g, unsigned char b) {
    return ((unsigned long) r << 16) | ((unsigned long) g << 8) | b; 
}
 

Комментарии:

1. Вам нужно будет быть более точным, чтобы люди могли вам помочь. Какие библиотеки? Что вы пытаетесь сделать? Что не работает?

Ответ №1:

Показанная программа прочитает порт B0, установит B1 в то же состояние и, если установлено, заполнит одну строку массива Strip_RGBData (который не объявлен и не используется). Это будет сделано один раз. Вы спрашиваете: «Как я могу это решить?»

Хорошее место для начала — это таблица данных WS2812. Используйте его, чтобы определить, как составить сигнал, необходимый для управления светодиодами. В вашем коде настройте таймер для синхронизации битов этого сигнала в соответствии с требованиями синхронизации.

После того, как это сработает, вы можете добавить цикл для считывания входных данных для выбора отдельного светодиода.

Комментарии:

1. На самом деле, я пытался объявлять RGBData везде, где я мог бы его использовать, но это не сработало, и я не знаю, куда еще я могу его поместить. Согласно тому, что я читал об этом, я должен использовать задержку, я пробовал, но не сработало.