![]() |
|
|
Продукция MICROCHIP Технические вопросы по всей продукции Microchip |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
Здравствуйте.
У меня PIC16F1829 управляет пиксельными светодиодами WS2812B. В предыдущей версии изделия был кварц, а потом пришлось увеличить количество каналов и отказаться от кварца (из-за нехватки выводов). Теперь на граничных значениях Vdd и T возникают глюки. Нужно хотя бы немного корректировать HFINTOSC. Как измерить Vdd, температуру, корректировать HFINTOSC понятно. Непонятно как получить значение для записи в регистр коррекции. Для решения этой задачи нужно иметь следующие исходные данные: 1. График зависимости HFINTOSC от Vdd (мне нужно 2,8...4,0). 2. График зависимости HFINTOSC от температуры (мне нужно 0...+40). 3. График зависимости HFINTOSC от значения в регистре коррекции (OSCTUNE). Частотомера с достаточной точностью у меня нет - придётся что-то мастерить. Может кто-то уже такое делал? Или попадалась инфа в нете? Заранее благодарен, Алексей. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Регистрация: 09.04.2010
Сообщений: 872
Вес репутации: 1709/65 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
это на сколько ж должна уплыть частота, чтобы не вписаться в тайминги????
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
+100500
150 ns на фоне 900 ns. Это почти 17%... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Регистрация: 09.04.2010
Сообщений: 872
Вес репутации: 1709/65 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
ну не совсем так,
привязка идет к длительности импульса для лог1 : 580-1600нс для лог0 : 220-380нс уход частоты +/-10% на работу не влияет |
![]() |
![]() |
![]() |
#5 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#6 |
Senior Member
Регистрация: 09.04.2010
Сообщений: 872
Вес репутации: 1709/65 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
это устаревший ДШ.
буквально на днях изучал этот вопрос |
![]() |
![]() |
![]() |
#7 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
спасибо за инфу, сильно давно применял.
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
В предыдущей версии изделия у меня стоял кварц 20МГц - не было никаких проблем.
В новой версии захотелось поднять тактовую частоту и увеличить количество каналов (пиксельных лент). Из-за особенностей программной реализации врем. интервалов при 32МГц у меня исходно тайминги уже немного не по даташиту. Кроме этого питание лент и MCU не +5 а +3,6. Всё работает, но на граничных значениях Vdd и t возникают глюки. Но суть вопроса не в таймингах WS2812B а в реализации коррекции HFINTOSC по Vdd и температуре. Есть другие задачи где это тоже актуально. Вообщем сделать то это достаточно просто. Нужно только иметь три графика. Я их могу получить и сам. Просто я думал - может кто-то уже это делал, чтобы мне не "изобретать велосипед"... |
![]() |
![]() |
![]() |
#9 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
1. Такие графики (снятые самостоятельно) не будут повторяться от экземпляра к экземпляру и от партии к партии.
2. В применении к описанной задаче совершенно непонятна затея. Единственным "пограничным" параметром является ЧАСТОТА. Температура и напряжение далеки от "пограничных". Минимальное напряжение этого МК - 2,5 вольта. Диапазон температур -40...+85 для Индастриал. Никаких "глюков" в районе 32 МГц быть не может - обычно такие МК разгоняются минимум на 10%, а то и более. Но даже если есть желание чего то там регулировать, возникает противоречие: - если МК на "границе" не работает на искомой частоте, то почему лента должна работать на пониженной, - что мешает завысить частоту при всех режимах и температурах, если частота осциллятора уплывает ниже допустимых выходных таймингов. 3. Есть смутное подозрение, что проблема лежит совершенно в другом месте. Полагаю, что дело не в том, что напряжение плавно упало с переходом на 32 МГц, а увеличились пульсации по питанию, которые не видит обычный мультиметр, но он интегрирует пульсации в среднее значение напряжения. Однако пульсации имеют нижним пиковым значением нерабочее напряжение МК, что либо вызывает периодический ресет (включен БОР), либо несанкционированное исполнение кода с зацикливанием. 4. По выше изложенным резонам я даже не могу представить себе в каких задачах может потребоваться такая (та, что Вы предлагаете) регулировка "вперед" (это не обратная связь)... Ради чего? ![]() ЗЫ. Но однако интересно, почему Вы не привели алгоритм, который не позволил работать на штатных таймингах. Заодно и выяснилось бы в чем причина... |
![]() |
![]() |
![]() |
#10 |
Senior Member
Регистрация: 09.04.2010
Сообщений: 872
Вес репутации: 1709/65 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#11 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
(1) Да, возможно Вы правы, но у меня небольшая (10) партия изделий.
(2) Я при постановке задачи немного не корректно выразился. Из-за особенностей программной реализации тайминги у меня исходно значительно отличаются от идеальных. Поэтому нужно без кварца обеспечить поддержание частоты HFINTOSC в узких границах. Исходно при постановке задачи заказчик ставил немного другие требования. Оборудование изготовлено и эксплуатируется. Но теперь требования изменились и чтобы не переделывать платы приходится извращаться. (3) Проблема выражается в частичном периодическом искажении изображения на пиксельной ленте при Vdd=4в и Vdd=3в (в моей задаче - граничные значения). Причём при Vdd=4в при определённом значении в OSCTUNE всё ОК, также и при Vdd=3в при определённом значении в OSCTUNE тоже всё ОК. Аналогичная ситуация, но менее выраженная, с температурой. Просто нужно теперь это периодически (скажем 1раз/мин) подстраивать. (4)Цель - экономия кварца и свободных выводов. Предполагается что механизм работает постоянно и регулирует на лету частоту. Для работы с WS2812B нужно считывать данные с памяти и формировать импульсы длительностью 400нс/800нс. На PIC16 это сделать проблематично. В своё время эту задачу мне пришлось решать очень быстро, поэтому был применён "извращённый метод" формирования импульсов. В статической SPI памяти формируется последовательность битов (узкие и широкие) так как нужно для WS2812B. Память тактируется от MCU необходимой частотой. Между выходом данных и входом ленты стоит вентиль "И" управляемый MCU. Когда нужно сделать вывод в ленту даётся команда чтения памяти, открывается вентиль, MCU выдерживает необходимую задержку для вывода всего массива и закрывает вентиль. Нужно только в начале и конце массива сформировать некоторое количество нулей на переключение вентиля. Частота работы памяти переключается - при работе с MCU она максимальная, а при выводе в ленту - соответствует таймингам. При кварце 20МГц все тайминги - идеально по даташиту. А вот при 32МГц пришлось при выводе с памяти в ленту формировать тактирование памяти программно. После открытия вентиля MCU переводится в бесконечный цикл, из которого MCU выходит по таймерному прерыванию, прерывание абортируется (изменяется указатель стека), закрывается вентиль. Это конечно извращение, но так уже сделано. Нужно чуть-чуть подрегулировать и получить деньги. |
![]() |
![]() |
![]() |
#12 | |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Регистрация: 09.04.2010
Сообщений: 872
Вес репутации: 1709/65 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#14 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
Что такое "трёхточка"?Попрвьте меня, пожалуйста, если я что-то понимаю не так:1. При изменении Vdd изменяется частота HFINTOSC.2. При изменении температуры изменяется частота HFINTOSC.
|
![]() |
![]() |
![]() |
#15 | |
Junior Member
Регистрация: 04.07.2012
Сообщений: 25
Вес репутации: 139/33 ![]() ![]() |
![]() Цитата:
вот часть кода моей программы Код:
send_bit macro nbit bsf PORT_LED, PIN_LED ; 1 ( 125ns ) nop ; 1 btfss WREG, nbit ; 1 ( T0H = 3*125ns = 375ns ) bcf PORT_LED, PIN_LED ; bit ( T1H = 6*125ns = 750ns ) nop ; bit nop ; bit bcf PORT_LED, PIN_LED ; 0 ( T = 10*125ns = 1250ns ) nop ; 0 nop ; 0 nop ; 0 endm send_bit0 macro bsf PORT_LED, PIN_LED ; 1 nop ; 1 btfss WREG, 0 ; 1 bcf PORT_LED, PIN_LED ; bit moviw FSR0++ ; bit nop ; bit bcf PORT_LED, PIN_LED ; 0 endm ; Send Send_bytes_fsr movlw NUM_LEDS*3 movwf cnt0 moviw FSR0++ banksel PORT_LED sb_loop send_bit 7 send_bit 6 send_bit 5 send_bit 4 send_bit 3 send_bit 2 send_bit 1 send_bit0 decfsz cnt0 ; 0 bra sb_loop ; 0 2t return |
|
![]() |
![]() |
![]() |
#16 |
Junior Member
Регистрация: 04.07.2012
Сообщений: 25
Вес репутации: 139/33 ![]() ![]() |
![]()
и в дополнение посмотрите статью
https://cpldcpu.com/2014/01/14/light...ng-the-ws2812/ там хорошо расписано по таймингам |
![]() |
![]() |
![]() |
#17 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
Спасибо за исходники. Просто у меня всё начиналось с PIC16F876A на тактовой 20МГц я не смог найти способа программно формировать вывод в ленту. Получилось только аппаратно с использованием статической SPI памяти. Если при чтении память тактировать 2,5МГц то на выводе данных будет непрерывная битовая последовательность с таймингами идеально по ДШ. Нужно только в памяти сформировать нули и единицы и поставить логический вентиль между выходом памяти и входом ленты.
Просто в новой версии PIC16F1829 на 32МГц и получить 2,5МГц проблематично, пришлось извращаться. В принципе касательно этого проекта я проблему уже решил. Удалось подобрать значение в OSCTUNE при котором небольшие глюки есть только при питании ниже 3,3в. Заказчик не возражает. Всем спасибо за участие. P.S. Кстати, какой временнОй интервал у Вас между 8-м и 0-м битами? Я где-то встречал информацию что не все версии чипа WS1812B допускают такие "вольности". |
![]() |
![]() |
![]() |
#18 |
Junior Member
Регистрация: 04.07.2012
Сообщений: 25
Вес репутации: 139/33 ![]() ![]() |
![]()
мне попались WS2812B наверно как из статьи Тома
только я тестировал пока 16 светодиодов в цепочке период на один БИТ может изменяться довольно широко в приведённом выше примере - исправлено немного реально работало даже при T0H = 375ns; T1H = 750ns; T = 1125ns (биты 7-1) T0H = 375ns; T1H = 750ns; T = 1250ns (бит 0) если убрать последний NOP в макро send_bit а также работало при 1) T0H = 375ns; T1H = 750ns; T = 1125ns (биты 7-0) 2) T0H = 375ns; T1H = 750ns; T = 1500ns (биты 7-0) 3) T0H = 400ns; T1H = 800ns; T = 1600ns (биты 7-0) и т. д. |
![]() |
![]() |
![]() |
#19 |
Junior Member
Регистрация: 04.07.2012
Сообщений: 25
Вес репутации: 139/33 ![]() ![]() |
![]()
при программной реализации на F887 и F628A
работало T0H = 400ns; T1H = 800ns; T = 1200ns (биты 7-1) T0H = 400ns; T1H = 800ns; T = 1400ns (бит 0) |
![]() |
![]() |
![]() |
#20 |
Senior Member
Регистрация: 17.03.2017
Адрес: Днепропетровск
Возраст: 55
Сообщений: 145
Вес репутации: 185/17 ![]() ![]() |
![]()
У меня в первой версии изделия было 240 пикселей, а в текущей версии 480. При таких количествах нужно в паузе успевать считывать байт из внешней памяти, инкрементировать адрес, и т.д.
Проблематично, вернее ненадёжно. Слишком велико смещение таймингов от ДШ. Проще аппаратно реализовывать, тем более что внешняя память всё равно нужна. Единственное кварц должен быть с частотой, кратной 2,5МГц. |
![]() |
![]() |
![]() |
#21 |
Senior Member
Регистрация: 23.03.2007
Возраст: 65
Сообщений: 519
Вес репутации: 291/58 ![]() ![]() ![]() |
![]()
Спрошу здесь.
Понадобилось изменить частоту INTOSC через OSCTUNE. Тут когда-то писали, что подстройка через OSCTUNE работает в диапазоне +-12%. Получается, что при пяти значащих битах этого OSCTUNE шаг подстройки составляет около 0,4% при условии линейности. А мне хотелось бы затюнить на пару порядков тоньше (не смеяться - могу рассказать зачем). Где прописана цифра 12%? |
![]() |
![]() |
![]() |
#22 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#23 |
Senior Member
Регистрация: 23.03.2007
Возраст: 65
Сообщений: 519
Вес репутации: 291/58 ![]() ![]() ![]() |
![]()
Недавно собрал домашнюю систему защиты от протечек воды на 12F683 (типа, систем Гидролок, Аквасторож, и пр.), коя, в числе прочих, выполняет функцию самоочистки вводных электрокранов каждую неделю методом закрылись-открылись с целью их прочистки от накипи и устранения закисания. Длительность самоочистки около 16 сек.
Пик тактируется от INTOSC 8мгц, вызов самоочистки по флагу многоступенчатого таймера по прерываниям. Опыт показал, что через неделю (т.е. через 604800 сек) самоочистка происходит раньше запланированного на несколько минут, в отличие от показаний симулятора. Это неудобно, ибо последующие самоочистки могут происходить в неудобное дневное время - мелочь, но неприятно. Т.е. реальная частота INTOSC этого экземпляра по моим расчетам составляет около 8,00096 мгц. Температура в сантехшкафу довольно стабильная. Таким образом мне хотелось бы притормозить на 0,012%. ![]() Но видно не судьба. Придется перестраивать таймер на бОльшее время. |
![]() |
![]() |
![]() |
#24 |
Senior Member
Регистрация: 18.08.2007
Адрес: Московская область
Возраст: 61
Сообщений: 3,618
Вес репутации: 4306/129 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
И к чему весь этот геморрой? Только для того, чтобы сэкономить кварц за 10 руб. и пару конденсаторов на 20 пФ типоразмера 0805 за 0 рублей?
![]() |
![]() |
![]() |
![]() |
#25 |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,406
Вес репутации: 1047/65 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
большая какая то ошибка.... кривой кварц внутренний? .... ткнуть наружный...
у меня панель часов оставала примерно на 2 мин. в месяц.... там далас использовался.... и думаю, что проблема была в том, что сама панель корректировалась раз в полчаса с NTP.... а программа раз в час в далас пихала новые данные...а так как к сети панель не была подключена- ночью далас время держал... а днём его прога долбила каждый час.... а это тоже время... хоть и наносек..... |
![]() |
![]() |
![]() |
Метки |
hfintosc, osctune, pic16f1829, ws2812b |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Чем/как отлаживать код написаный на Си в WinAVR | Yokel | Микроконтроллеры других производителей | 49 | 30.09.2014 09:48 |
Присоветуйте тип и способ управления MOSFETом "верхнего" плеча | dr_Sash | Источники питания и силовая электроника | 37 | 08.09.2012 18:50 |
Имитатор DS18B20 | Filya44 | Вопросы начинающих | 14 | 12.03.2012 17:39 |
gprs тарификация (конкретнее- по sim300) | MaxB | Общетехнические вопросы | 4 | 21.08.2008 20:16 |