тестовы код такой while (!ws2812b_IsReady()); // wait ws2812b_SendRGB(leds, 3); my_Delay_ms(1000); 1н раз отправка проходит, потом зацыкливаеться на ws2812b_IsReady(); т.е. какое ощущение что где-то что-то не до конца передалось + когдато с этим кодом баловался и лента работала, перенес код в другой проект и перестало, компилятор, МК все одинаковое, а что пошло не так и куда смотреть не пойму

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

  1. Maxim

    Насчет отладчика и "не заходит" - м.б. оптимизацию выключить поможет, если еще не

    • Denis

      вроде выключена +не пойму как так, под отладчиком работает, тупо по F5 прохожу прерывание и цвета на ленте меняются как положено, без отладчика нет

      • Fedor

        Что-то с таймингами видимо Или еще меняется debug release?

  2. Maxim

    Там не с таймингами, там код не отрабатывает и флаг не сбрасывает ^

    • Denis

      ЛА такое показывает

      • Dmitry

        у ws2812b пауза (reset code) >=50 us между посылками. хотя бы это все увидеть здесь...

        • Denis

          оно ?

          • Dmitry

            ну, блин, ты ж сам это все генеришь в прошивке ) фиг его знает, возможно, но здесь уже перебор по времени... ) здесь все задержки таймером генерятся же (по крайней мере должны по-хорошему). я надеюсь, что там в коде соответствующему этой картинке нет чего-то вроде delay_ms() и т.п. )

            • Denis

              не, delay_ms или иже с ними нету, таймер в режиме шим + дма + прерывания я другое не пойму, помуче оно под отладчиком то работает как нужно, как только отладку выключаю колом встает, как такое вообще искать ?

              • Dmitry

                тайминги надо смотреть, под отладчиком пошаговое выполнение и времени между командами куда больше. протокол у ws2812b очень простой и описан в даташите, там все более чем подробно про тайминги. главное, чтобы укладывалось в указанные тайминги, там даже большой допуск +/-150ns, оно будет работать практически всегда, если хоть как-то правильно генерировать импульсы, а при наличии лог.анализатора все еще упрощается в отладке...

                • Denis

                  хотел обойтись малой кровью но видимо придется свою библиотеку писать ...

                  • Dmitry

                    и это таки лучший вариант, мне вот тоже надо как-нибудь доделать уже под stm32, на avr это все в основном реализовывалось ногодрыгом на ассемблере, а не через таймеры, надо сделать нормальную реализацию и с DMA вот, да.

                    • Oleg

                      Тип такого. Визуально вроде вся пайка целая, без следов коррозии

                      • Anton

                        Ты должен настроить два таймера. Один у тебя выдает ШИМ с высокой частотой. 200кГц к примеру. Второй таймер настроенный на 800Гц (например) По прерыванию второго ты берешь и кладешь в первый значение из таблицы

                      • Anonim

                        Короткий USB подключи и в задний разъем его макароны на фронтпанель и прочие звенящие радости из волос китайской девственницы вместо нормального медного провода дают кучу спецэффектов

                        • Oleg

                          Макароны это ты про это?

                          • Anonim

                            Верно

                            • Oleg

                              Да вроде всегда были такие У всех

                              • Anonim

                                Неважно, короткий шнурок и в задний разъем Если не заведется - тогда мыть в изопропиле

  3. Anonim

    WS2812B_DMA DMA1 WS2812B_DMA_CHANNEL DMA1_Channel1 WS2812B_DMA_IRQ DMA1_Channel1_IRQn WS2812B_DMA_HANDLER DMA1_Channel1_IRQHandler WS2812B_DMA_IT_TC DMA1_IT_TC1 WS2812B_DMA_IT_HT DMA1_IT_HT1 точно правильно обьявлены? Потому что если висит на ws2812b_IsReady то значит что ДМА не отработало.

    • Anonim

      Если и это не поможет - смотреть есть ли просадка по напряжению, если нет - можно еще кварц проверить а вообще они стоят 300р в базарный день

      • Oleg

        Тренировочный. Надо же с чего-то начинать

    • Denis

      WS2812B_APB1_RCC RCC_APB1Periph_TIM3 WS2812B_APB2_RCC RCC_APB2Periph_GPIOA WS2812B_AHB_RCC RCC_AHBPeriph_DMA1 WS2812B_GPIO GPIOA WS2812B_GPIO_PIN GPIO_Pin_6 WS2812B_TIM TIM3 WS2812B_TIM_OCINIT TIM_OC1Init WS2812B_TIM_OCPRELOAD TIM_OC1PreloadConfig WS2812B_TIM_DMA_CC TIM_DMA_CC1 WS2812B_TIM_DMA_CCR (WS2812B_TIM->CCR1) WS2812B_DMA DMA1 WS2812B_DMA_CHANNEL DMA1_Channel6 WS2812B_DMA_IRQ DMA1_Channel6_IRQn WS2812B_DMA_HANDLER DMA1_Channel6_Event WS2812B_DMA_IT_TC DMA1_IT_TC6 WS2812B_DMA_IT_HT DMA1_IT_HT6

      • Anonim

        А статусы дма после первой успешной отправки какие?

        • Maxim

          Кстати, такая банальная мысль, что если на другом проекте все работало, а тут нет, и под отладчиком все тоже работает - м.б. МК излишне китайский?

        • Denis

          как это узнать без дебагера ? ибо под дебагером все работает такое ощущение что что-то с библиотекой сейчас делаю ws2812b_Init(); ws2812b_SendRGB(leds, 1); т.е. 1на посылка по факту в порту увеличенный 1шт

Не нашли ответ?

Вам также может быть интересно