Просто я посчитал, что при таких параметрах что программное, что аппаратное формирование практически по времени идентичны - даже при аппаратном есть риск "наскочить" на следующий цикл (пропустив флаг при ожидании), а лезть в более высокую частоту без внешнего кварца экономически нерентабельно. В то же время программная реализация анализатора по каждому биту на обычной системе - хоть по флагу С, хоть по каждому биту имеет резброс величин от байта к байту (ибо данные разнятся, а исполнение условных переходов " 1-нет/2-да" остается в силе). Посему и сделана была версия векторно-условных переходов хотя и с большими затратами ОЗУ (2 фрагмента/варианта исполнения в зависимости 1 или 0 текущего бита и вторая пара с анализатором продвижки указателя адреса массива размещенные по фиксированным адресам ПЗУ). Правда при соблюдении суммарного времени на каждый слот соотношение интервалов 1 и 0 несколько "покалечено" в пределах допуска даташита.
Заголовок сообщения: Re: Светодиоды c пиксельной адресацией WS2812B
Добавлено: Чт окт 20, 2016 20:54:16
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Да, данная реализация (я про ШИМ) никакого преимущества по ресурсам МК не дает, Вы правы. МК полностью занят передачей всего пакета и ни на что отвлечься все равно не может. Кроме того еще занимает таймер. SPI может в этом случае поможет, даст вздохнуть МК, не знаю.
Думаю что накопления суммарной ошибки боятся тоже нечего. Странно было бы, если светодиод не синхронизировался на каждый фронт сигнала. По-любому фронт запускает внутренний счетчик счетчик с нуля, значение счетчика во время спада формирует принятый бит (0 или 1), переполнение счетчика формирует сброс и обновления яркости светодиода. Я бы так сделал. Ну и еще один счетчик принятых бит, чтобы знать принимать их или слать дальше.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Странно было бы, если светодиод не синхронизировался на каждый фронт сигнала. По-любому фронт запускает внутренний счетчик счетчик с нуля, значение счетчика во время спада формирует принятый бит (0 или 1),
Где-то в нете видел картинку, как паренек с ленты снимал логическим анализатором данные. Там так было, он подавал затянутые фронты, точнее высокий уровень чуть более 400 нс. А следующий светодиод уже пересылал тот, который нужен, и даже короче по длительности... И картинка была. не помню где, хоть убей.
Светик действительно должен несколько нормировать пропускаемый через себя поток данных. Только вот "в разумных пределах". Касательно SPI - в том варианте надо передаваемый байт предварительно "дробить" - овчинка не стоит выделки, хотя такой способ является основным, пирменяемым в работе с ws2812 (судя по анализу публикаций). Спасибки Z_h_e "за идейный пинок" - хош появились мысли на продвижку решений по прожкам.
Заголовок сообщения: Re: Светодиоды c пиксельной адресацией WS2812B
Добавлено: Пт окт 21, 2016 18:52:37
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
Попробовал сделать на UART. tny2313. Выход PD4. 20МГц. Сигнал надо инвертировать. Проверить не могу даже в Протеуссе. , птница, туплю уже совсем. Как будто бы робит. Прерывание возникает тактов через 100,, т.е. вроде МК уже разгружен несколько. Попробуйте. Тайминги нескько хуже вроде. Не знаю что плоучисль. Спойлер
Код:
.equ eMaskData=~0x24 //---------- .def zero=R1
.def buf=R16
.def MaskData =R17 //флаг что надо передавать старшую половину байта .def DataSend=R18 //текущие отправляемые данные .def RegSum=R19
Да, там было про то, что с МК можно отправлять какой угодно кривой сигнал (ну в приделах разумного, конечно), первый же светодиод, захавав свои 3 байта будет передавать следующему остальные, но не напрямую с МК, а через свои цепи... В этих цепях он его и скорректирует до нормально. ))))) Типа того. в итоге остальные получат свои байты уже ровненько и без ошибок.
Заголовок сообщения: Re: Светодиоды c пиксельной адресацией WS2812B
Добавлено: Пт окт 21, 2016 21:31:04
Собутыльник Кота
Карма: 29
Рейтинг сообщений: 651
Зарегистрирован: Сб май 14, 2011 21:16:04 Сообщений: 2708 Откуда: г. Чайковский
Рейтинг сообщения:0 Медали: 1
СКАЗОЧНИК, не пробовали мой кода на уарт?
СКАЗОЧНИК писал(а):
Да, там было про то, что с МК можно отправлять какой угодно кривой сигнал (ну в приделах разумного, конечно), первый же светодиод, захавав свои 3 байта будет передавать следующему остальные, но не напрямую с МК, а через свои цепи..
Вроде как не должно быть такого.
_________________ Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Может мне и показалось. )))) Но вроде было. Хотя, тот паренек тоже мог ошибаться.
Z_h_e писал(а):
пробовали мой кода на уарт?
Нет.... Просто надо сделать думаю сначала побольше массив светодиодов, а у меня затык с ультафиолетовой лампой и с пленкой... ( Да и сами говорите, что надо инверсию делать. А это надо чего-нибдуь припаивать к МК еще..
Читаю эту статеку, как могу, где сам, где с переводчиком. Однако, очень интересно. И действительно в даташите на них написано вранье. )))))) И действительно вторая часть периода им не важна, важна только первая. И та с большиииими допусками.
Вряд-ли при изготовлении деталюшек будут заморачиваться серьёзным аппаратно-программным ключом-нормировщиком... Скорее всего будет устанавливаться обычный ключ по завершении приема собственного пакета. Возможно с каким-нибудь вариантом одновибратора в комплекте... Как альтернатива - должен быть предварительный анализ данных "и кито пришел?" 1 или 0 - а такой анализ обязательно внесет задержку минимум в один уровень единицы для слота 0 (откуда светику знать что там на линию данных выдается) между входом и выходом данных на каждом светике. Кстати... при некоторой доработке счетчика длина пакета может достигать 21845 светиков (21845*3=65535байт массива данных)...
Программа на UART чёто не пошла. Зациклил и все равно на PD1/TxD высокий уровень. Проверяю на макете tiny2313+кварц 20МГц. Поскольку мне интересен режим FAST PWM 1111 таймера 1 для своих целей вернулся к программе таймера. Ну и до кучи программа на этот GRB светик. Правда, работает при периоде 1,5мкс. Спойлер
Код:
.include "tn2313def.inc"
.equ Fo=20000000
.equ eTOP=150*Fo/100000000-1;0x1E //предел счетчика для 20МГц .equ eBit1=80*Fo/100000000-1;0xF //длительность единичного импулься для лог1 .equ eBit0=45*Fo/100000000-1;x08
;.def Chislo=R20
;************************************************* .org $00 LDI R16,LOW(RAMEND) out SPL,R16
Добавлено after 27 minutes 39 seconds: So, what did we learn from this?
A reset is issued as early as at 9 µs, contrary to the 50 µs mentioned in the data sheet. Longer delays between transmissions should be avoided. The cycle time of a bit should be at least 1.25 µs, the value given in the data sheet, and at most ~9 µs, the shortest time for a reset. A “0” can be encoded with a pulse as short as 62.5 ns, but should not be longer than ~500 ns (maximum on WS2812). A “1” can be encoded with pulses almost as long as the total cycle time, but it should not be shorter than ~625 ns (minimum on WS2812B).
Вот, что там написано. ))) 1. Сброс наступает примерно с 9 мкс. В даташите написано, что с 50 мкс. Но уже реально после 10 мкс будет сброс на линии и светодиоды выведут то, что на них отправили. 2. Период сигнала должен быть от того, как написано в даташите 1,25 мкс и до почти сброса, т.е. 9 мкс. Т.е. период может быть длинным и они это нормально жрут. 3. Ноль кодируется уже от 62,5 нс нормально и до почти 500 нс. Короче, ноль должен быть не более того, как написано в даташите. ) 4. Единица может длиться почти полный период, т.е. 1,25 мкс, но чуть меньше, чтобы успеть еще ноль отправить, но не короче 625 нс, если применять светодиоды с индексом В. ( В даташите написано, что 800 нс должно быть. Реально же от 625 до пчти 1250 нс.)
Все это он снял обычным логическим анализатором, который у меня дома тоже валяется, но смысла повторять ту же процедуру не вижу. )
Нет. Разбираться не стал, переключился на свою прогу. У FAST PWM есть буфер. В принципе нормальная вещь, позволяет загружать следующее значение в любой момент времени, не дожидаясь окончания текущего периода.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения