странности с ШИМ

std
Offline
Зарегистрирован: 05.01.2012

Приветствую, all, имеется пара вопросов по выводу множества pwm каналов, причем слово "много" значит больше двух; 5, если быть точным.

Схема такая: на 3,5,6,9,10 выводы (то есть первые 5 цифровых выходов с шим) Arduino Duemilanove с Atmega328PU подключены базы кт315, к коллекторам которых - куски светодиодной ленты с общим плюсом на 12 В. Имеется 5 массивов int длиной по 256, в которых находятся состояния светодиодов на 64 уровня от нуля до максимума, со сдвигом в 16. То есть желаемый эффект: когда на 3м светодиоде 100%, то на 2м уже 75% а на 4м уже 75%, на 1м и 5м сообветственно по 50% и так далее, плюс за счет изменения счетчика в цикле FOR пишем на нужный светодиод analogwrite(data1[i]), потом так же data2[i] и т. п. Теоретически, прокручивая счетчик i от 1 до 256, получаем плавный по яркости скроллинг слева направо или наоборот - смотря на то, добавляем к i единицу или отнимаем.

На самом деле имеем: некоторые буквы нормально зажигаются/тухнут плавно, как это и требовалось, но отдельные экземпляры дрыгаются и мигают, аки ЛДС со сдохшим стартером или сгоревшей спиралью. Что может быть? возможно ли, что каналы друг на друга как-то влияют? наводки/помехи? питается от компьютерного БП, длина проводов - не более 20 см.

Далее: есть еще один режим, когда во ВСЕ выходы пишутся данные из ОДНОГО массива, то есть должно плавно зажигаться, затем тухнуть. 4 из них делают это как положено, один при уровне на остальных около 80% резко включается, если меньше 80 - соответственно резко же и выключается, будто это и не ШИМ вовсе, а обычный цифровой выход. Грешил на транзюки, поменял все - картина та же, причем в этом режиме опять же резко включается/выключается тот же самый канал (выход 3, также пробовал выход 11 - то же самое).

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

Есть какие-то подводные камни, о которых я не в курсе? или что не так? В общем, мистика... надеюсь на ответы.

carduino.ru
Offline
Зарегистрирован: 06.12.2011

Ни каких подводных камней в ШИМ нет, если только не считать что у одного канала другая частота.

Проблема у Вас в скетче

leshak
Offline
Зарегистрирован: 29.09.2011

std пишет:

...

плюс за счет изменения счетчика в цикле FOR пишем на нужный светодиод analogwrite(data1[i]), потом так же data2[i] и т. п. Теоретически, прокручивая счетчик i от 1 до 256, получаем плавный по яркости скроллинг слева направо или наоборот - смотря на то, добавляем к i единицу или отнимаем.

...

Не, ну вот не лень было это набирать? Вместо того что-бы просто вставить пример кода (если большой - в "свернутом состоянии"). Или вы думаете, по текстовому описанию, восстанавливать в голове код это быстрее и веселее? Или это для того что-бы, если в коде есть ошибка - никто этого не увидел?

Только прочитайте в начале, в форуме "общий" прикрепленные ветки как нужно вставлять картинки и код (скетчи).

std пишет:

На самом деле имеем: некоторые буквы нормально зажигаются/тухнут плавно, как это и требовалось, но отдельные экземпляры дрыгаются и мигают, аки ЛДС со сдохшим стартером или сгоревшей спиралью. Что может быть? возможно ли, что каналы друг на друга как-то влияют? наводки/помехи? питается от компьютерного БП, длина проводов - не более 20 см.

А как что-то сказать  если схемы нет?

std пишет:

Есть какие-то подводные камни, о которых я не в курсе? или что не так? В общем, мистика... надеюсь на ответы.

Хотя сделали все что-бы их было поменьше :) Хотя, честно говоря бывает тут и хуже. Когда из описания вообще непонятно в чем проблема, и что человек хочет.  Толи ардуиной воду в туалете сливать, толи вальс научится танцевать.

По поводу "подводных камней". Есть такой "камень": некоторые таймеры "запаралелены" с ногами. И при их использовании ШИМ на ногах "ломается". Причем использовать эти таймеры можете не вы напрямую, а какая нибудь библиотека, которую вы используете. Но "кода-то нет" :( Погуглите связку timer pwm

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

К тому-же, в схеме иногда можно увидеть потенциальные ошибке в скетче. Как-то ковырялись долго, в одной ветке, почему "выключенные диоды горят в пол-накала". А причиной было, что когда вы по циклу бежите "выключаете" диоды, это происходит "не одновременно". Диагностировать можно принудительно натыкав delay между вызовами digitalWrite, "усугубить", так-сказать. Но опять-таки только глядя на схему можно сказать является-ли критичным эта "не одновременность" или нет. И нужно ли с ней бороться.

std
Offline
Зарегистрирован: 05.01.2012

спасибо за ответ leshak, действительно, в схеме стоит еще TSOP и к нему библиотека IRRemote, которая забирает себе нулевой таймер, а их всего три, по 2 ШИМа на каждый. так что поскольку выходов пять, то пофиксить это было невозможно.

Решил так: на еще один выход повесил КТ315, и еще на один - резистор с выключателем, коллектор 315го идет на сброс, так что всякий раз как переключают выключатель - схема автоматически сбрасывается. В одном положении выключателя только автономный скроллинг ШИМ-способом (через analogWrite), и никакие команды цопом не принимаются (он в этом случае не инициализируется). В другом положении переключается только цифровым способом (через digitalWrite), плюс можно рулить по ИК скоростью, направлением и т. п.

Если кому нужно, могу потом схему нарисовать и выложить этот скетч.