اطلاعیه

Collapse
No announcement yet.

ws2811 کسی کار کرده

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ws2811 کسی کار کرده

    سلام
    من برنامه ws2811 با میکرو آرم نوشتم . مشکلم اینه از ال ای دی پنجم به بعد به هم میریزه رنگ ها . کسی این مشکل داشته یا کتابخانه آماده داره
    این نمونه کد من


    [HASHTAG="t15999"]include[/HASHTAG] "main.h"

    /* Private includes ----------------------------------------------------------*/
    /* USER CODE BEGIN Includes */

    /* USER CODE END Includes */

    /* Private typedef -----------------------------------------------------------*/
    /* USER CODE BEGIN PTD */

    /* USER CODE END PTD */

    /* Private define ------------------------------------------------------------*/
    /* USER CODE BEGIN PD */
    /* USER CODE END PD */

    /* Private macro -------------------------------------------------------------*/
    /* USER CODE BEGIN PM */
    [HASHTAG="t25971"]define[/HASHTAG] DELAY_LEN 40
    [HASHTAG="t25971"]define[/HASHTAG] LED_COUNT 16
    [HASHTAG="t25971"]define[/HASHTAG] ARRAY_LEN DELAY_LEN + LED_COUNT*24
    [HASHTAG="t25971"]define[/HASHTAG] HIGH 65
    [HASHTAG="t25971"]define[/HASHTAG] LOW 25

    unsigned char WS281x_FLAG;
    //--------------------------------------------------
    [HASHTAG="t25971"]define[/HASHTAG] BitIsSet(reg, bit) ((reg & (1<<bit)) != 0)
    //--------------------------------------------------
    void ws281x_init(void);
    void ws281x_pixel_rgb_to_buf_dma(uint8_t Rpixel , uint8_t Gpixel, uint8_t Bpixel, uint16_t posX);
    void ws281x_light(void);
    /* USER CODE END PM */

    /* Private variables ---------------------------------------------------------*/
    TIM_HandleTypeDef htim1;
    DMA_HandleTypeDef hdma_tim1_ch1;

    /* USER CODE BEGIN PV */

    /* USER CODE END PV */

    /* Private function prototypes -----------------------------------------------*/
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void);
    static void MX_DMA_Init(void);
    static void MX_TIM1_Init(void);
    /* USER CODE BEGIN PFP */

    /* USER CODE END PFP */

    /* Private user code ---------------------------------------------------------*/
    /* USER CODE BEGIN 0 */
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void);
    static void MX_DMA_Init(void);
    static void MX_TIM1_Init(void);
    /* USER CODE BEGIN PFP */

    /* USER CODE END PFP */

    /* Private user code ---------------------------------------------------------*/
    /* USER CODE BEGIN 0 */
    //----------------------------------------------------------------------------
    //extern TIM_HandleTypeDef htim3;
    //----------------------------------------------------------------------------
    uint16_t BUF_DMA [ARRAY_LEN] = {0};
    //------------------------------------------------------------------
    void ws281x_init(void)
    {
    int i;
    for(i=DELAY_LEN;i<ARRAY_LEN;i++) BUF_DMA[i] = LOW;
    }
    ////------------------------------------------------------------------
    void ws281x_pixel_rgb_to_buf_dma(uint8_t Rpixel , uint8_t Gpixel, uint8_t Bpixel, uint16_t posX)
    {
    volatile uint16_t i;
    for(i=0;i<8;i++)
    {
    if (BitIsSet(Rpixel,(7-i)) == 1)
    {
    BUF_DMA[DELAY_LEN+posX*24+i+8] = HIGH;
    }else
    {
    BUF_DMA[DELAY_LEN+posX*24+i+8] = LOW;
    }
    if (BitIsSet(Gpixel,(7-i)) == 1)
    {
    BUF_DMA[DELAY_LEN+posX*24+i+0] = HIGH;
    }else
    {
    BUF_DMA[DELAY_LEN+posX*24+i+0] = LOW;
    }
    if (BitIsSet(Bpixel,(7-i)) == 1)
    {
    BUF_DMA[DELAY_LEN+posX*24+i+16] = HIGH;
    }else
    {
    BUF_DMA[DELAY_LEN+posX*24+i+16] = LOW;
    }
    }
    }
    ////------------------------------------------------------------------
    void ws281x_light(void)
    {
    WS281x_FLAG=1;
    HAL_TIM_PWM_Start_DMA(&htim1,TIM_CHANNEL_1,(uint32_t*)&BUF_DMA,ARRAY_LEN);

    }
    //------------------------------------------------------------------
    /* USER CODE END 0 */

    /**
    * @brief The application entry point.
    * @retval int
    */
    int main(void)
    {
    /* USER CODE BEGIN 1 */

    /* USER CODE END 1 */

    /* MCU Configuration--------------------------------------------------------*/

    /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    HAL_Init();

    /* USER CODE BEGIN Init */

    /* USER CODE END Init */

    /* Configure the system clock */
    SystemClock_Config();

    /* USER CODE BEGIN SysInit */

    /* USER CODE END SysInit */

    /* Initialize all configured peripherals */
    MX_GPIO_Init();
    //MX_DMA_Init();
    MX_TIM1_Init();
    /* USER CODE BEGIN 2 */
    HAL_TIM_Base_Start(&htim1);
    HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1);
    __HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,HIGH);
    while(1){



    }
    //ws281x_init();
    /* USER CODE END 2 */

    /* Infinite loop */
    /* USER CODE BEGIN WHILE */
    while (1)
    {
    for(char i=0 ; i<26 ; i++){
    ws281x_pixel_rgb_to_buf_dma(255,0,0,i);
    ws281x_light();
    HAL_Delay(100);
    }

    for(char i=0 ; i<26 ; i++){
    ws281x_pixel_rgb_to_buf_dma(0,255,0,i);
    ws281x_light();
    HAL_Delay(100);
    }

    for(char i=0 ; i<26 ; i++){
    ws281x_pixel_rgb_to_buf_dma(0,0,255,i);
    ws281x_light();
    HAL_Delay(100);
    }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    }
    /* USER CODE END 3 */
    }​
    جدیدترین ویرایش توسط sepehr63; ۱۲:۱۹ ۱۴۰۳/۰۶/۲۲.
لطفا صبر کنید...
X