Есть схема на Mega16 с выводом информации на 2 семисегментных индикатора. Схема работает, информация выводится, днем яркость индикаторов нормальная, а вот ночью слепит...
Надо сделать регулировку яркости индикаторов, только не знаю как... Видимо надо использовать ШИМ, но не могу придумать, как использовать его в динамической индикации... Кто подскажет?
Стрелка с эмиттеров транзисторов не к +5В, а к -5В. А яркость удобно устанавливать уменьшая длительность импульсов (скважность) на базах транзисторов. Для ночного режима длительность импульсов нужно уменьшить примерно в восемь раз (не меняя частоту сканирования динамической индикации). Для автоматического переключения режимов "день-ночь" на любой вход контроллера добавь цепочку из последовательных фоторезистора и резистора. Номинал резистора необходимо подобрать так, чтобы при пороговой освещённости напряжение на входе контроллера было ~2,4В. Естественно, всё это реализуемо только при небольшой корректировке программы.
это, насколько понимаю, зажигание соответствующего разряда.
Чтобы сильно не курочить, можно использовать второй таймер. Запускать его в конце shim(). В обработке его прерывания по переполнению тушить все индикаторы, если не ошибаюсь командой
Время до переполнения задавать в зависимости от освещенности. Т.о. время свечения каждого индикатора будет зависеть от освещенности.
Посмотрел ваше решение: этож сколько времени бездарно убьется...
Регулировать яркость проще всего отдельным таймером в режиме ШИМ, подавая его на дополнительный ключ, у меня так в спидометре реализовано http://radiokot.ru/circuit/digital/measure/27 , но там код на асме.
Как всегда делаю я в этих случаях:
Во первых, динамическая индикация всегда должна висеть на таймере. Это дает многие преимущества. Автор правильно сделал.
Во вторых, у этого таймера должно быть два прерывания: По переполнению и по сравнению.
В прерывании по переполнению мы выводим на индикатор текущую цифру из памяти, предварительно включив соответствующий ей разряд. В прерывании по сравнению мы гасим цифру. Тогда можно регулировать соотношение времени включенного индикатора и выключенного (скважность). Соответственно, от переполнения до сравнения-включено, от сравнения до следующего переполнения-выключено. Получается ШИМ, удобный, простой в управлении, о котором не надо думать в остальной программе.
Естесственно, яркость будет пророрциональна значению регистра сравнения. (Кадется даже линейно, честно, не очень помню).
Так оно у меня работает во многих проектах и файлики с динамической индикацией у меня не меняются уже много лет.
Конечно покажу. Тут я все прокоментировал. Там есть несколько вещей, что нужно переделать для оптимизации, но и так работать будет. Я сказал что и где.
КАШАК
вот этим вы гасите все цифры PORTC=0b00001111; так??
тогда на этом же таймере включите еще прерывание по совпвдению, и перенесети эту строчку (case 1: PORTC=0b00001111;)в обработчик этого прерывания. Теперь изменяя TCNTх вы будете менять время свечения сегмента, и следовательно яркость.
Все, сделал на таймере, работает
Еще такой вопрос. Попал мне в руки самодельный "бортовой компьютер". И исходники прошивки. Делали его делали, да недоделали, вот и отдали. Все хорошо, только тахометра там нет (конечно не только тахометра, но вся сложность именно в нем), а все выводы прерываний таймера заняты... Как можно сделать тахометр без прерываний?
P.S.
Контроллер Mega 16.
Опыт растет прямо пропорционально выведенному из строя оборудованию...