Как правильно сделать управление яркостью 7 сегментных отдельных индикаторов?

Всем привет, как правильно сдделать регулировку яркости сразу всех 4-х 7 сегментных индикатора, если собрано по схеме: https://adior.ru/images/robotics/Arduino/7segm-4-Arduino.png

Играйся длительностью включения катодов. Или сегментов, как тебе удобнее.

Правильно понимаю, что если у меня сейчас идет управление через транзисторы , то их вешать надо на пины с шим???

без кода, ту однозначно не ответить, одно понятно, если светятся неравномерно цифры на ключах q1-q4, это одна часть кода, если сегменты на всех цифрах это другая.

Неправильно. Сначала нужно говорить что хочешь. Конкретно, а не общей фразой. Ну и код твоей индикации, как уже сказано.

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

Если он будет светиться только 6 милисекунд из десяти, получаем яркость 60%

И так далее

2 лайка

Как вариант. Я не очень в вопросе электронных компонентов, но у транзисторов есть частотные хар-ки, надо чтобы ШИМ эти характеристики не превосходил. Еще у вас могут возникнуть забавные проблемы, если частота ШИМ будет близка/кратна частоте переключения между сегментами - контроллер же их поочередно подсвечивает)))

Шим можно сделать и программно, если в 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 раз больше

Бред какой…
Потенциометры запретили нынче ?
Или прям всегда нужно программно корректировать эту яркость ?

А почему нет? Например, снижение яркости в темноте - не потенциометром же делать :wink:

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

Ну пусть тады шимит общий анод/катод

А зачем?

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

2 лайка

Нужна обратная связь по яркости и регулятор PID для компенсации износа и инерции механической руки.)

@maksmkv если уж прям надо, то можно добавить логический элемент “И” на транзисторе: базу шимить, а коллектор-эмиттер в разрыв между базой и мк на схеме.
@v258 , чем рисуются такие графики?

На скорую руку в EasyEDA соединительными дорожками накидал ))

Я уж думал специальное что-то))