можно ли как-то менять яркость светодиодов через сдвиговый регистр 74HC595
- Войдите на сайт для отправки комментариев
Пнд, 03/10/2016 - 11:40
нужно менять яркость, если с им это невозможно, то посоветуйте еще чего
нужно менять яркость, если с им это невозможно, то посоветуйте еще чего
Сформулируйте вопрос понятнее.
Зависит от схемы включения. ШИМ ещё никто не отменял.
мне нужно менять яркость светодиодов, количество выходов ограничего, поэтому делать нужно через сдвиговые регистры, в
74HC595 вроде как можно на 13 пин ШИМ подать, но мне бы отдельно
DM633, вот такая схемка вроде как есть..только прикрутьить ее как-ио надо
а такая не подойдет. goo.gl/8D2oeJ Вроде тоже ШИМ.
Если вам нужно просто включить светодиоды через один (например), вы загоняете в сдвиговый регистр такую последовательность битов - 101010101... (например) и успокаиваетесь. А если надо уменьшить яркость, то вы на этом не успокаиваетесь, а динамически загоняете в регистр то данные, то нули. При большой частоте глаз мельканий не заметит и в среднем сетодиоды будут гореть тусклее.
Запросто, есть такая вещь как софтовый ШИМ. Вкратце, ганяете данные на регистры с частотой 10 кГц, и если рэфреш рэйт экрана/матрицы 40 Гц, то получим почти 8-бит яркости, 256 уровней светимости. Есть готовые библиотеки, тут:
http://www.elcojacobs.com/shiftpwm/ https://github.com/elcojacobs/ShiftPWM
тоже интересовал вопрос про софтовый шим на ардуино, на обычном си умею делать а вот на ардуино не соображу=))) есть еще штука такая http://arduino.ru/forum/proekty/pomigaem-svetodiodikami-moi-pervyi-zaver... здесь есть описание там spi шилд многоканальный шим
Дак пишите на си. Оно поймет. Только вот ШИМ 40Гц - мало (может я неправильно понял "рэфреш рэйт экрана/матрицы 40 Гц"). Даже 50Гц, т.е. период 20мс маловато, на режимах частичной яркости мигания будут заметны (я их давил индуктивностю). И про лампочки в сети 50Гц не надо ля-ля, они мигают с удвоеной частотой сети, т.е. 100Гц, потому и не заметно мигание. Я делал на 74hc595 на 20мс т.к. надо было на часть выводов светодиоды, а на часть сервомашинки, потому именно 20мс выбрал. Програмно можна делать одним из 2-х путей: 1. прерыватся по таймеру 256 раз за период ШИМ (период получается 20мс/256=78мксек), проверять надо ли чтото менять в состоянии регистра и если надо то записывать его 2. расчитывать время до момента, когда надо будет чтото менять в состоянии регистра, настраивать таймер, по прерыванию записывать регистр и снова расчитывать время. Первый метод довольно сильно грузит процессор, второй грузит менше, но имеет "подводный камень" - когда в процессе работы ШИМ по нескольким каналам различается на 1 надо успеть прогнать все действия за 78мксек, что не так просто. Еще предполагается, что проц не сильно загружен другими прерываниями и нет существенных кусков кода с запретом прерываний, инче это все Вы будете видеть на светодиодах.
такой штуки у нас нет)
получается можно будет яркостью сразу нескольких светодиодов управлять ведь?
Да. у меня так 4 канала освещения, серва и две релюхи висят. И все управляется персонально с учетом личных предпочтений устройств.
Если вам нужно просто включить светодиоды через один (например), вы загоняете в сдвиговый регистр такую последовательность битов - 101010101... (например) и успокаиваетесь. А если надо уменьшить яркость, то вы на этом не успокаиваетесь, а динамически загоняете в регистр то данные, то нули. При большой частоте глаз мельканий не заметит и в среднем сетодиоды будут гореть тусклее.
А если ничего не загонять, то шимится OE ( Output Enable) 13 нога.......
ну вроде да. На форуме писали что так можно шимовать всех сразу одинаково. Но я не пробовал.
50 Гц маловато, так для примера. 100 нормально.
Согласен, маловато. Но сервомашинка другого не поймет. А делать еще и на разные частот 8/ Но мигание заметно только при малой яркости, ниже половины. А это токо в режиме плавного зажигания. В общем терпимо.
Если вам нужно просто включить светодиоды через один (например), вы загоняете в сдвиговый регистр такую последовательность битов - 101010101... (например) и успокаиваетесь. А если надо уменьшить яркость, то вы на этом не успокаиваетесь, а динамически загоняете в регистр то данные, то нули. При большой частоте глаз мельканий не заметит и в среднем сетодиоды будут гореть тусклее.
А если ничего не загонять, то шимится OE ( Output Enable) 13 нога.......
Автор написал, что ему выводов не хватает и нужен сдвиговый регистр.
По поводу частот - можно сделать "чересстрочную развёртку". Т.е. если при 256 градациях яркость надо уменьшить наполовину, то не обязательно сначала загонять 128 пакетов данных, а потом 128 пакетов нулей. Можно их загонять по очереди. Таким образом, мелькания будут чаще при тех же коэффициентах заполнения.
А если автору надо сдать курсач, то и 8-и градаций хватит )