Частота и синхронность ШИМ

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Можете мне объяснить? PWM допустим шлю с 3 ног на один цветной светодиод. Если одновременно его запитать на все 3 ноги, то красный возьмет приоритет и смеси не будет (такой светодиод, общекатодный 8мм). Но если подрыгать красный контакт очень быстро, то о чудо, цвет "смешивается". 

 

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

 

p.s. если даже маленькие синхронные пульсы отправлять на красный и еще какой-то, то красный перехватывает ток, зараза. 

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Забыл сказать: контроллер 328я атмега, на плате нано3. 

А PWM используется через аналограйт.

MagicianT
Offline
Зарегистрирован: 03.10.2015

Добавь резисторы, и не будет перехватывать

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

LastHopeMan пишет:

Забыл сказать: контроллер 328я атмега, на плате нано3. 

Ещё и схему забыл привести.

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Очевидно, что резисторов нет (или один общий). Отсюда и вполне прогнозируемое поведение.

Решение в посте №2.

a5021
Offline
Зарегистрирован: 07.07.2013

Вот так грандиозный мега-проект подключения модулей DDR3 к ардуине, для автора плавно перетек в изучение вопроса, как к ардуине правильно подключить светодиод.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

a5021 пишет:

Вот так грандиозный мега-проект подключения модулей DDR3 к ардуине, для автора плавно перетек в изучение вопроса, как к ардуине правильно подключить светодиод.

Вы думаете это предел? Здесь всё-таки RGB светодиод, так что ТС ещё есть куда развиваться. 

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Да ладно вам, мужики! Чел явно не обидчивый, а старательный. Он все меньше и меньше околесицы несет. Значит изучает. Может на пенсию вышел и есть время?

Может через год он нас красивым кодом порадует.

---------------------------

Для автора (ТС - Топик Стартер, тот кто начал тему): Вы, все-таки, раз есть энтузиазм к обучению, начните с классики и основ: Керниган и Ричи "Язык программирования С", Хоровиц и Хилл "Искусство схемотехники", Кнут "Искусство программирования ЭВМ".

Молодежь пусть по роликам на ютубе учит,а нам, пожилым дядькам, нужно все правильно делать.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

wdrakula, то, что Вы перечисляете, конечно, очень полезно. Но начинать я бы порекомендовал все-таки с учебника физики и Фаронова.

a5021
Offline
Зарегистрирован: 07.07.2013

wdrakula пишет:
Он все меньше и меньше околесицы несет. Значит изучает.

Испытываю серьезный скепсис по этому поводу. Неизвестно, что там с обучаемостью у персонажа, который вот так запросто решает подключить DDR3 к ардуине и единственным препятствием к тому видит отсутствие у себя навыков пайки. Очень уж плохой симптом.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Обычный симптом.

Припоминаю персонажа, замыслившего создать систему распознавания речи, и видящего единственное препятствие на пути - неумение получить сигнал с микрофона.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

После удачного запуска скетча с мигающим светодиодом на многих начинающих сходит волна опьянения успехом -" я умею программировать МК!!!" Но опьянённому как говорится "море по колено, а лужа -по уши". И однажды неизбежно придёт отрезвление в этой самой луже :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

1. Раз с общим катодом, то есть смысл запитать каждый цвет через собственный гасящий резистор нужного номиналу, а катод повесить на питание или корпус .. как оно там полагается. В этом случае, сначала добейтесь получения белого при ровном включении всех светодиодов, без ШИМ вовсе, подбирая номиналы гасящих резисторов.

2. ШИМ - широтно-импульсная модуляция, это когда у вас нога выдает "1" с неким заданным периодом и скважностью. Стандартный ШИМ в Ардуино = 490гц и скважность управляется чиселками от 0..255. В стандартном ШИМ wirng 16-и битные счетчики также включаются в режим 8-битного счета, поэтому нет никакой разницы в их использовании. Соответственно, управляя 3-я ногами с ШИМ вы через analogWrite() изменяете скважность (долю периода когда выдается "1") - то есть яркость горения светодиода.

3. Все ШИМ через analogWrite() используют свои OCRnX регистры ШИМ таймеров и каждым из них можно управлять по отдельности. Синхронность там возможно только частичная - это когда Вы используете ноги от ОДНОГО таймера, если не принимаете специальных мер для достижения синхронной работы нескольких таймеров.

Соотвественно, на "синхронность" в простых схемах управления как правило "забивают", а если вам надо включать ШИМ с задержками ног друг относительно друга, то ищите тут соответствующие темы. Это не так примитивно как вызвать analogWrite(). Wiring под такое применение в явном виде не заточен.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Резисторы там стояли в соответствие с характеристиками светодиода, и толку от этого не было. Подстроечниками добился для одного светодиода нужного баланса, взял второй из той же партии - и опять заново. Разные они, резисторы не решают проблему баланса цветов при одновременном их использовании. Долбаный белый на двух разных экземплярах отличается огого как. 

 

Вопрос в другом. Я хочу питать их от PWM по очереди с трех разных ног, чтобы и глазу пофиг, и формировать цвет с нужной точностью. Но у меня PWM сигналы в центре импульса проивает на красный, потому что они синхронные. На малых частотах я уже проверил - меня результат устроил, но мигает зараза. Но для этой проверки мне пришлось работать через код, поэтому контроллер как бы частично занят этой работой, что не устраивает. То есть ресурс-то свободный есть, но не устраивает на перспективу, когда контроллер будет занят и слежка за балансом цветов будет для него лишней работой.

 

Что самое интересное. Это то, что при ручной балансировке сигналов каждый светодиод реагирует одинаково, выдает именно тот цвет, который должен. Без всяких уклонов в красноту и обратно. Главное условие для этого - убрать сигнал с одного цвета до того, как ставить его на следующий. Как только сигналы наезжают друг на друга - все, беда, искажение цвета.

Arhat109-2, а можно еще через сдвиговые регистры попробовать и примитивную логику =) Но я думал (надеялся), что в ардуине уже позаботились о совместной работе PWM сигналов. Оказалось, что нет. Ладно, на первое время контроллеру дам работу, а потом уже с синхронизацией разберусь. В любом случае, спс за инфу.

wdrakula, я еще не на пенсии, просто время появилось изучить давний интерес. А кому-то это мешает. Ничего страшного, я не обращаю внимание на тех, от кого нет пользы. Это я не про вас.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Вы бы выложили схему соединений, маркировку светодиодов, код которым вы их гонять пытаетесь .. а то складывается впечатление что Вы что-то делаете не так и очень сильно. По крайней мере понимания происходящих процессов у вас или нет вовсе или вы не можете это внятно изложить на форуме. Выклдаывайте, посмотрим.

MagicianT
Offline
Зарегистрирован: 03.10.2015

LastHopeMan, Вы же понимаете, что без резистора спалите ардуино? Один как минимум, по общему проводу. Но даже если сделать как Вы хотите, разбаланс токов через красный /синий /зелёный всё равно будет, и придётся в софте ограничивать красный, если резистор выбран по син-зел. Про синхронную работу нескольких таймеров дисскуссия велась здесь

 Придётся писать код с прямым обращением к регистрам, ардуиновский ШИМ тут только мешать будет, начните с того поста, а если не получится тогда с конкретным вопросом и кодом который создали. Писать  за вас всё равно никто не будет, а подсказать думаю , кто-то сможет, если что.   

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Восприятие цвета очень субъективно. Помнится ставил трёхногий RG светодиод. Нужно было иметь красный, зелёный и жёлтый в разных ситуациях. Диод стоял на неШИМовых пинах, так что программного управления смешиванием не было. Вроде и даташит на светодиод был, и считал, в всё равно резисторы пришлось подбирать долго и мучительно. Приличный (для моих глаз) жёлтый получился при 220Ом на зелёном канале и целых 1.8кОм на красном, хотя ни в какие расчёты это соотношение не лезло.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

MagicianT, да кто вам такую фигню сказал, что там нет резистора? Речь не об этом сейчас. Я объясняю, что светодиоды одной партии имеют чуток разные характеристики по току на разных цветовых каналах. Поэтому при одновременном включении их параллельно, чтобы достигнуть одинакового цветового смешения на обоих, приходится под один из них подгонять резистор до долей ома. Просто примите за факт, что конкретно в моем случае смешивать цвета можно только чередуя подачу тока на разные цветовые линии.

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

 

Arhat109-2, а что я могу делать неправильно, если у меня уже давно все получилось. Диод 8мм с общим катодом, стандартные 3.2 на голубизне и зелени, 2.0 на красноте. Ну там плюс минус, китай же. Подключение минус в землю, плюсы к трем ногам через личные резисторы. Я для теста просто делю время на три равные зоны. И интенсивность каждого цвета регулирую длиной импульса, подаваемого тупо через диджиталрайт. Сам включаю, сам выключаю, все в коде. И работает прекрасно - любой цвет кроме черного)))) Но как я уже говорил, если захочу занять контроллер чем-то еще полезным, то он не всегда успеет вовремя подать или отключить импульс, отчего цвет будет искажаться. Поэтому-то я и подумал про ШИМ, что вот если бы он сам мог на автомате слать такие импульсы, чтоб по трем каналам они никогда не встречались... 

Пока мне нужно это для гирлянды, я могу простить себе полную трату контроллера на цветоформирование. Но если бы это была простая индикация, согласитесь, было бы дорого тратить целый контроллер на какой-то один светодиодик =)

 

Кстати... у меня есть белый светодиод 5мм, который почему-то цифровой. Он при регулировке импульсами горит одинаково ярко, а потом где-то на 40% резко гаснет. Это законно? Он регулируется только постоянным током, а импульсным не хочет!

 

a5021
Offline
Зарегистрирован: 07.07.2013

LastHopeMan пишет:
Поэтому-то я и подумал про ШИМ, что вот если бы он сам мог на автомате слать такие импульсы, чтоб по трем каналам они никогда не встречались...

И почему же им нельзя встречаться? Опять Клапауций запретил?

Цитата:
Кстати... у меня есть белый светодиод 5мм, который почему-то цифровой. Он при регулировке импульсами горит одинаково ярко, а потом где-то на 40% резко гаснет.

Хорошо еще, что на 20% обратно не включается. А то у вас всю дорогу такие чудеса происходят, что аж оторопь берет.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

MagicianT пишет:
Писать  за вас всё равно никто не будет, а подсказать думаю , кто-то сможет, если что.  

А я никогда и не рассчитывал, что за меня кто-то что-то сделает))))) Это было бы слишком наивно и не интересно. Просто сейчас вот почитав тут и там понял, что дороговато по времени будет именно сейчас именно через ШИМ именно на атмеге это решать. С учетом того, что кроме гирлянды ей нечем заниматься, а алгоритм смены цветов вполне впишется между ручным управлением импульсами.

Еще раз повторюсь, как я делаю это сейчас. Катод сидит в земле, аноды на ногах через личные резисторы. В ините задаю три переменных R G и B однобайтовые. В лупе по очереди для каждого цвета: включил, подождал R, выключил, подождал 255 - R, и так далее. Результат удовлетворительный для как минимум 5 испытуемых не меняя резисторы. Микросекунды, если что. Хотя линейность не на высшем уровне.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Arhat109-2. кстати чем закончилась ваша попытка подставить SRAM на плату атмеги в качестве основной? Я где-то видел, что вы спрашивали, надо ли кому, ну и вроде как хотели для себя запилить несколько плат. Потом тема заглохла. Не поделитесь теорией, как вы планировали именно вместо основной прокинуть эту память?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

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

По памяти: развел плату, жду приезда деталек и в первую очередь микросхем SRAM HM628512 5в, 512кбайт, 70нсек за 65руб/шт. :) Смущает что трек не отслеживается, но до конца поставки ещё 35 дней. Китайская почта говорит типа "покинуло Китай".. Достоинство моей схемы в том что она позволяет расширять память теоретически до 8 мегабайт, и при этом не использует ни одной дополнительной ноги к X-bus интерфейсу. Жду 5 комплектов, по успешной сборке могу 3-4шт запродать по "сходной цене" (сколько останется в живых и лишних).

По самой организации такого расширителя SRAM нет ничего сложного. Тут в общем разделе есть пример успешного опыта расширения памяти для ATmega128A до 32кбайт на базе HM62256 стоят тоже рублей по 40 за шт. на АЛИ. Моя такая версия на +64кб не заработала по причинам: "кривые руки" + "не та обвязка" + "неизвестная разводка памяти". Даташит на микросхемы я так и не нашел, делал наугад.

Программировать расширенную память "специальным образом" в общем-то и не требуется, описание x-bus интерфейса примитивно и полноценно как я вся остальная периферия у Атмела. Люди к разработке камней подходили явно с головой за что мне Атмел безумно нравится и будет жаль, если Микрочип накроет Меги медным тазом. В этом плане, ещё интересней ихние "Икс-меги" .. но они "программируются через задний проход" (PDI), почему и не получили такого распространения, а жаль.

Пока едет обвязка и память, размышляю насчет прикручивания туда же и микросхем типа flash для расширения EEPROM до тех же 512 кбайт на PLCC каретке ... прошил, воткнул - пользуйся. Надо иное - вынул-вокнул. Думаю что в такую EEPROM уже можно будет запихать какую-нить ОС на базе умного интерпретатора в программном FLASH. Благо его у Меги2560 - "дофигища". :)

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Пропустил: нет никакой "теории как прокинуть ВМЕСТО основной" .. ибо основная SRAM как была так и остается на своем месте. Микроконтроллер сам знает где у него своя, а где внешняя память и обращается к шине X-bus только когда адрес чтения/записи указывает на внешнюю память.

Соответственно, из 64к адресов часть МК использует как внутреннюю память, а остальные может выдавать на внешнюю. Просто настройки компиляции часто указывают предельный размер доступной памяти не 64кб а ровно столько сколько есть внутренней. Это исправляется элементарно в настройках платы.

Также, можно легко указать компилятору области начала кучи, начала стека и места расположения сегментов данных при компоновке программы. И к примеру, установить стек на внутреннюю SRAM, а кучу не внешнюю. Или организовать свои сегменты данных в разных страницах памяти даже по одним и тем же физическим адресам, за счет чего поиметь больше 64кб ещё на этапе компиляции.

Я планирую использовать свой расширитель примерно так: все 512кб разбиты на страницы по 32кб и нумерованы от 0 до 15. Все они, кроме последней видны в едином адресном пространстве старших 32кб адресов. То есть все их сегменты данных указываются компилятору с одного и того же физического адреса размером по 32кб. Страница №15 - видна в младших 32кб адресах, свободных от внутренней SRAM. Да, часть её - недоступна и теряется. Это "общая страница", которая доступна всегда. В страницах 0..14 планирую размещать данные процессов с "изолированным" адресным пространством по 32 кб. Что меня более чем устроит.

 

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

А я выбрал BS62LV4006PCP70 по 83 рубля. Вашего варианта не находил ранее, хотя искал довольно долго. Отличия по характеристикам особых не вижу. Так вы оказывается просто используете карту памяти и xbus. Я думал трюк лежит на другой поверхности. 

Я правильно понимаю, что для ESP8266 то, что там называется iBus, это тоже, что и xBus? И мне хотелось бы понять, зачем вам деление на страницы нужно по 32 килобайта. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Arhat109-2 пишет:

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

Не знаю, как сейчас, но раньше у ТС никаких схем не было и все обсужденя шли на уровне "вообще, идейно" :)

Arhat109-2 пишет:

По самой организации такого расширителя SRAM нет ничего сложного.

Не скромничайте, всем понятно, что это серьёзная работа. А главное, не говорите ТС фразу "ничего сложного", а то ему-то как раз это может быть непонятно :)

Arhat109-2 пишет:

Люди к разработке камней подходили явно с головой за что мне Атмел безумно нравится 

Ой, блин! Видимо ssss-овец ещё не заметил этой фразы - кирдык теме, можно сразу сносить :)

 

 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Ой, блин .. вы правы, погорячился. Забаньте эсэсовца на этой теме, а то правда нафлудит .. звиняюсь, сорвалось с пальцев. :)

ssss
Offline
Зарегистрирован: 01.07.2016

ЕвгенийП пишет:

Arhat109-2 пишет:

Люди к разработке камней подходили явно с головой за что мне Атмел безумно нравится 

кирдык теме, можно сразу сносить :)

 
Тануна! Безумно нравится безумным? "Безумству храбых поём мы песню!"(с).

 

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Arhat109-2, и может я что-то путаю, но разве SRAM не получается в итоге медленнее, чем например SSD диск? 

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

LastHopeMan, я не вкурсях что и где у ESP-шек. Программированием микроконтроллеров я занимался ещё лет 30 назад и вернулся в тему можно сказать совсем недавно - в мае 2015. Мне сложно объяснить вам вопрос "зачем разбиваю по 32к" .. кроме как "это - элементарно Ватсон". Видимо ЕвгенийП - прав, зря я это тут расписал..

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Путаете и много.

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

Много понтов. Ну и на том спасибо.

MagicianT
Offline
Зарегистрирован: 03.10.2015

LastHopeMan пишет:
MagicianT, да кто вам такую фигню сказал, что там нет резистора?

Скажу вам по с3кр3ту, что люди в отличии от компьютеров, могут получить представление о происходящем из того что кто-то Не сказал. Прямо очки такие, волшебные, помогают алиенс от предаторс отличить

LastHopeMan
Offline
Зарегистрирован: 19.09.2016

MagicianT пишет:

LastHopeMan пишет:
MagicianT, да кто вам такую фигню сказал, что там нет резистора?

Скажу вам по с3кр3ту, что люди в отличии от компьютеров, могут получить представление о происходящем из того что кто-то Не сказал. Прямо очки такие, волшебные, помогают алиенс от предаторс отличить

Я написал до этого, что резисторы в наличие на каждом аноде. Возможно, вы не заметили. Поэтому мое повторное сообщение, которое вы и цитируете, могло выглядеть как возмущение.