Страница 1 из 1

pwm rgb светодиоды ws2811 ws2812

Добавлено: Вт июн 24, 2014 00:02:56
kalobyte
прикупил ленту с 2811 и посмотрел протокол управления и библотеки
одни делают на вставке асм с нопами, вторые используют клок от модуля спи

хотел спросить, а что такой сигнал нельзя разве сформировать таймером в режиме компаратора?
вот тут диаграмма https://learn.sparkfun.com/tutorials/ws ... 2-overview

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Вт июн 24, 2014 00:14:01
Аlex
kalobyte писал(а):вставке асм с нопами
Да уж... миллисекунду НОПов :facepalm:
Конечно, таймером будет правильнее.

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Вт июн 24, 2014 15:08:12
Engineer_Keen
Вообще-то по ссылке на диаграмме интервалы порядка долей микросекунд, самый мелкий - 0.35мкс, что например для распространенного в AVR внутреннего RC-генератора на 8МГц всего пара-тройка тактов, так что ИМХО тут как раз NOPы, а не таймеры...

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Вт июн 24, 2014 15:10:47
Аlex
Упс... точно, это микросекунды. Видимо, глаз на ночь замылился :oops:
Тогда конечно НОПы - самое то.

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Вт июн 24, 2014 15:58:35
HHIMERA
Аlex писал(а): Тогда конечно НОПы - самое то.
Та брось... кадриль ещё вытанцовывать...
Для ПИКа есть апнота AN1606 "Using the Configurable Logic Cell (CLC) to Interface a PIC16F1509 and WS2811 LED Driver"...
Для STM - TIM+DMA... SPI... GPIO+DMA...

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Вт июн 24, 2014 19:52:04
kalobyte
но ведь сумма полупериодов это 1.15мкс, что будет 860кгц
разве таймер не потянет?
вот 20мгц взять :)))

Изображение

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Ср июн 25, 2014 07:56:38
Engineer_Keen
Ну на 20МГц наверняка потянет. Там между битами дофига тактов получается, можно даже в прерывание запихнуть.

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Ср июн 25, 2014 08:59:09
ibiza11
тайминги из даташита:
T0_H: 0.35+-0.15 = 0.20-0.50
T0_L: 0.80+-0.15 = 0.65-0.95
T1_H: 0.70+-0.15 = 0.55-0.85
T1_L: 0.60+-0.15 = 0.45-0.75
получается можно взять для нуля: H-0,5мкс, L-0.95мкс, Для единицы: H-0,85мкс, L-0,75мкс
возьмем минимальный период из двух, чтобы привести к одинаковому периоду. 0,5+0,95 = 1,45мкс
тогда для единицы поправим: H-0,85мкс, L-0,6мкс : 0,85+0,55 = 1,45мкс
все в допустимых пределах по даташиту.
(все далее для AVR)
20МГц -> период = 50нс = 0,05мкс
1,45/0,05 = 29 тактов
возьмем таймер1 в режиме ШИМ, TOP = OCR1A = 29, OCR1B = 10(для 0) или 17(для 1)
в прерывании сравнения B изменяем значение OCR1B.
поскольку в режиме ШИМ регистры OCRx работают в режиме двойной буферизации, обновление регистра из буфера происходит в момент достижения TOP или BOTTOM
а это 19 и 12 тактов для прерывания сравнения соответственно для 0 и 1.
если предположить, что мы управились, к примеру за (rjmp - 2, outH - 1, outL - 1, reti - 4) = 8 тактов, то считаем, что 8/29*100 ~ 28% процессорного времени будем находиться в прерывании.

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Ср июн 25, 2014 23:10:10
kalobyte
ibiza11 писал(а): 28% процессорного времени будем находиться в прерывании.
и какой вывод из этого можно сделать?
в твоем предложении вывод сам будет переключаться или надо в прерывании дописывать код?

выходит, что лучше нопами сделать что ли? вчера посмотрел исходник одной штуки, которая с софтовым усб работает, так там нопы стоят

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Чт июн 26, 2014 08:00:40
Engineer_Keen
Нецелесообразно тут использовать таймеры и прерывания. Я выше сказал что тактов дофига, но попробовал реализовать этот протокол даже на 20МГц и понял что нифига их не дофига... Чтобы соблюсти временные интервалы приходится каждый такт считать. Так что что-то делать можно будет только в перерывах между передачей данных (который RESET>50мкс). В софтовом USB такая же проблема, потому там тоже NOPы ставят.

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Чт июн 26, 2014 08:38:22
ibiza11
kalobyte писал(а):и какой вывод из этого можно сделать?
ах, да, вывод то забыл написать! ... теперь понимаю, что зря распинался. :facepalm:
сами подумайте: период таймера 29 - тактовых импульсов задающего генератора.
в примере прерывания, что я приводил, тратится 8 тактов, между двумя прерываниями минимально (29 - (17-10)) = 22 такта. за остальные оставшиеся (22 - 8 ) = 14 тактов микроконтроллер должен как минимум успеть:
1) сформировать новое значение OCR1B для следующего бита
2) проверить признак окончания передачи и остановить в этом случае таймер
если вы уложитесь, без проблем. Микроконтроллер будет только передавать данные. Но я думаю уложиться нереально.
kalobyte писал(а):в твоем предложении вывод сам будет переключаться или надо в прерывании дописывать код?
ШИМ... вам знаком этот режим?
kalobyte писал(а):выходит, что лучше нопами сделать что ли?
попробуйте на таймере.

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Чт июн 26, 2014 08:52:08
oleg110592
HHIMERA писал(а):Для STM - TIM+DMA... SPI... GPIO+DMA...
таки сделали уже: http://eliaselectronics.com/driving-a-w ... -an-stm32/

Re: pwm rgb светодиоды ws2811 ws2812

Добавлено: Чт июн 26, 2014 10:20:59
HHIMERA
Я знаю... это так... по памяти озвучил... варианты имеются...
Алексей где-то озвучивал 16 каналов одновременно... GPIO+TIM+DMA... если не ошибаюсь...