Всем привет, как правильно сдделать регулировку яркости сразу всех 4-х 7 сегментных индикатора, если собрано по схеме: https://adior.ru/images/robotics/Arduino/7segm-4-Arduino.png
Играйся длительностью включения катодов. Или сегментов, как тебе удобнее.
Правильно понимаю, что если у меня сейчас идет управление через транзисторы , то их вешать надо на пины с шим???
без кода, ту однозначно не ответить, одно понятно, если светятся неравномерно цифры на ключах q1-q4, это одна часть кода, если сегменты на всех цифрах это другая.
Неправильно. Сначала нужно говорить что хочешь. Конкретно, а не общей фразой. Ну и код твоей индикации, как уже сказано.
Нет. Принцип примерно такой - на отображение каждого индикатора отводится, например, 10 милисекунд. Если все эти 10 милисекунд индикатор будет светиться, получаем максимальную яркость.
Если он будет светиться только 6 милисекунд из десяти, получаем яркость 60%
И так далее
Как вариант. Я не очень в вопросе электронных компонентов, но у транзисторов есть частотные хар-ки, надо чтобы ШИМ эти характеристики не превосходил. Еще у вас могут возникнуть забавные проблемы, если частота ШИМ будет близка/кратна частоте переключения между сегментами - контроллер же их поочередно подсвечивает)))
Шим можно сделать и программно, если в loop() больше почти ничего нет (особенно delay!). На пины транзисторов, или сегментов можно не фиксированные значения LOW HIGH подавать, а булевскую переменную, которую считать в loop() примерно так:
bool pinState = micros() % 1000 < bright;
где bright яркость условно от 0 до 1000 (на самом деле где-то от 50 минимум, иначе “накала” совсем не будет)
либо
bool pinState = micros() & 1023 < bright;
вместо 1023 любая степень двойки, минус единица.
Общая идея что вы от микросекунд берете остаток от деления на некую константу, значение которой влияет на частоту выдаваемого шим (чем больше - тем ниже частота), а потом сравниваете этот остаток с текущим значением яркости, лежащем в диапазоне от минимума (экспериментально определите) до значения константы (100% яркости).
Я бы примерно так сделал, рассчитал в начале loop() значение pinState, а потом поочередно в светящиеся сегменты (либо на транзисторы) это значение в digitalWrite() передал
Либо если в loop() много чего происходит то делать ШИМ на таймере тем же способом. Либо вообще собрать свои сегменты на ws2811/2812, управлять по 1 проводу хоть всеми сразу, зажигать на любую яркость и любым цветом
П.с. на всякий случай поясню: период ШИМ должен быть не меньше, чем требуется для “прорисовки” всех сегментов. В идеале равен, или в n раз больше
Бред какой…
Потенциометры запретили нынче ?
Или прям всегда нужно программно корректировать эту яркость ?
А почему нет? Например, снижение яркости в темноте - не потенциометром же делать
Нет, я понимаю, что можно сделать автоматику на рассыпухе, но тут вроде больше за программирование форум
Ну пусть тады шимит общий анод/катод
А зачем?
Не, ну приделать механическую руку, которая будет подкручивать потенциометр в зависимости от освещенности фотодатчика, - тоже вариант.
Но если это все на основе исключительно аналоговой схемотехники, - замучаешься настраивать.
Нужна обратная связь по яркости и регулятор PID для компенсации износа и инерции механической руки.)
@maksmkv если уж прям надо, то можно добавить логический элемент “И” на транзисторе: базу шимить, а коллектор-эмиттер в разрыв между базой и мк на схеме.
@v258 , чем рисуются такие графики?
На скорую руку в EasyEDA соединительными дорожками накидал ))
Я уж думал специальное что-то))