Сдвиговые регистры и ШИМ

tran
Offline
Зарегистрирован: 20.10.2012

Здравствуйте! У меня есть глупый вопрос - при использовании сдвиговых регистров, возможно организовать ШИМ на выводах регистра? Ну например, светодиодная RGB матрица 8х8, используем регистры для экономии выводов МК. Можно ли организовать ШИМ для каждого светодиода?

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

Теоретически - да, практически - нет.

С какой-то частотой дергать выводами сдвигового - можно. Но гиморойно и частота выйдет такой низкой, что, опят-таки чисто формальному определению (под него может попасть и переключение ноги раз в минуту) это все равно будет ШИМ, но вот в обычно-бытовом смысле, это ШИМ-мом никак нельзя уже назвать будет.

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

Итого: на сдвиговых толком не сделаешь.

Есть специальный микрухи "расширители портов" (Port Extender). Вот они (не все, есть которые тоже без шима). Умеют, к примеру по I2C принять команду "включи PWM на таком-то выходе". И держать там PWM  самостоятельно.

А есть подвид этих "расширителей", которые именно для руления LED-ами предназначен (google: i2c led driver)

Первое что нагуглилось http://www.nxp.com/documents/data_sheet/PCA9685.pdf

Вообщем "просто и удобно", но... боюсь по цене или сложность достать может оказатся не гуманно (хотя может и недорогие есть, не исследовал эту тему).

И третий вариант (не знаю хорош ли он, но лично мне по душе): поставить еще одну atmega8, возможно даже без кварца. Именно для руления матрицей. Вариант "по душе", потому что и по цене сопоставимо с расширителями (или даже дешевле) и простор для "кастомной логики" - шире. Можно на ней как и логику расширитиля воспроизвести (команды вида: включи PWM на ноге N), так и более высоукровневые команды реализовать (включи диод в строке X, колонке Y, на яркость B). Что позволит снять часть нагрузки с основного контроллера, упростить основную логику.

 

tran
Offline
Зарегистрирован: 20.10.2012

Ух ты) Спасибо за такой развернутый ответ) То есть проще взять две atmega8, одна управляет матрицей, другая - посылает комманды на включение светодиодов. Я так понимаю компактность сохраняется))(я про SMD версии) Тогда чуть немного другой вопрос- получится ли в этом случае управлять светодиодами "ловко"(другое на ум не приходит). Ну например - волна из плавно изменющися rgb цветов. Или еще смайлик, который плавно переливается цветами. 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Если нужен 1 ШИМ на все ноги регистра, то можно извернуться достаточно просто - взять ногу с ШИМом и подклють ее к выводу OE (выбор, включение выходов...) регистра. Тогда все ноги регистра будут переходить в высокоомное состояние вместе с ШИМом на выбранной ноге контроллера. Если же нужны независимые ШИМы, то придется организовывать ШИМ программно в буфере и при каждом изменении любого бита буфера "выплевывать" этот буфер через SPI во внешний регистр. Процентов 50 вычислительных ресурсов процессора убъете гарантировано! Еще сильно зависит от частоты ШИМа. Если занизить, то проц разгрузится, но управлять можно будет только нагревателями :)

Так что "программный ШИМ на внешнем регистре" можно рассматривать чисто как "спортивную" или "образовательную" задачу.

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

tran
Offline
Зарегистрирован: 20.10.2012

Не знаю, хватит или нет) Там в матрице 64 светодиода. И подключение хитрое. 32 пина на выходе.

Не знаю, какой atmega хватит)) Готовится маленький проект))

step962
Offline
Зарегистрирован: 23.05.2011

Если поверить автору на слово, то его поделка (http://www.elcojacobs.com/shiftpwm/) позволяет управлять 4 сдвиговыми регистрами (32 канала?), обеспечивая частоту ШИМ 200 Гц и разрешение 256 уровней.  Плата за это - 86% процессорного времени.

А ведь можно и проверить...

tran
Offline
Зарегистрирован: 20.10.2012

86 % процессорного времени - это в каком смысле? Приведите простой пример. А то не получается понять))

uscr
Offline
Зарегистрирован: 17.08.2012

Я развлекался ШИМом на сдвиговом регистре с одним RGB светодиодом. Мне не понравилось - частоты не хватает.

http://arduino.ru/forum/programmirovanie/programmnyi-shim-na-sdvigovom-registre

step962
Offline
Зарегистрирован: 23.05.2011

100-86=14

На все остальные нужды остается 14% процессорного времени (около одной седьмой). Микроконтроллер, работающий на частоте 16 МГц, по своим возможностям примерно равен микроконтроллеру, работающему на частоте 2 МГц.

mixail844
Offline
Зарегистрирован: 30.04.2012

интерено,а если взять декодер(не помню как точно называеться) который делает 1->8 при помощи 3-ех ног control.эту единственную ножку подцепить на ШИМ микроконтроллера,3-мя упрявлять какая из 8-выходов будет получать ШИМ от микрухи.а 8 выходов,скажем, к катодам матрицы.а к анодам матрицы подключить 74959,толк будет? 

tran
Offline
Зарегистрирован: 20.10.2012

AlexFisher, "По поводу последнего вопроса - если на это нагрузить отдельный проц, то можно. Желательно без внешних регистров - ногами процессора. Кроме того, если возмете мегу, то там много ног с ШИМами - можно обойтись аппаратными даже с динамической индикацией."

C помощью каких МК организовать? Сколько их примерно нужно? Например ATMEGA8 имеет всего то 3 вывода с ШИМ. Какие atmega взять?

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

Я имел в виду Arduino MEGA 2560

Там 14 выходов с ШИМ., у Leonardo их 7

Вам нужно 8 (для строк), столбцы "уходят" на динамическую индикацию. Иначе говоря, 8ШИМ+24=32 выхода. На МЕГЕ можно сделать без регистров. Иначе - только программный ШИМ

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Кстати, на Leonardo есть таймер 2 и еще две ноги для ШИМа. В старых даташитах нарылось как то (в новых уже нет), плюс это еще и работает, правда я сам не пробовал. Понятно, что это недокументированная фича, но, кто знает, может кому не хватает одного или двух пинов с ШИМом.

 

AlexFisher
AlexFisher аватар
Offline
Зарегистрирован: 20.12.2011

У Леонардо именно за счет дополнительных таймеров больше выходов с ШИМом, чем у УНО

ALEXHEX
Offline
Зарегистрирован: 12.12.2013

http://www.youtube.com/watch?v=lsxbQ1sCM9A

Вроде шим есть. На каждый элемент или нет, сказать не могу.