тестовы код такой while (!ws2812b_IsReady()); // wait ws2812b_SendRGB(leds, 3); my_Delay_ms(1000); 1н раз отправка проходит, потом зацыкливаеться на ws2812b_IsReady(); т.е. какое ощущение что где-то что-то не до конца передалось + когдато с этим кодом баловался и лента работала, перенес код в другой проект и перестало, компилятор, МК все одинаковое, а что пошло не так и куда смотреть не пойму
Комментарии: 28
Maxim
Насчет отладчика и "не заходит" - м.б. оптимизацию выключить поможет, если еще не
Denis
вроде выключена +не пойму как так, под отладчиком работает, тупо по F5 прохожу прерывание и цвета на ленте меняются как положено, без отладчика нет
Fedor
Что-то с таймингами видимо Или еще меняется debug release?
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
Неважно, короткий шнурок и в задний разъем Если не заведется - тогда мыть в изопропиле
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шт