Главная arrow Начинающим arrow Пробуем программировать arrow Динамическая индикация и регулировка яркости  
23.06.2017 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Простые устройстваОтличные товары по превосходным ценамОтличные товары по превосходным ценам
Динамическая индикация и регулировка яркости Печать E-mail
Рейтинг: / 24
ХудшаяЛучшая 
Автор ARV   
27.01.2008 г.

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

 

Давайте кратко рассмотрим пример динамической индикации на МК типа ATmega8. Предположим, индикатор у нас содержит 3 разряда и подключен сегментами к выводам порта D микроконтроллера, а управление общими электродами (пусть это будут общие катоды) ведется линиями порта В. Чтобы организовать динамическую индикацию задействуем второй таймер. Этот таймер восьмибитный, с режимом ШИМ. Обычно для реализации динамической индикации используется режим СТС таймера, т.е. режим, при котором частота возникновения прерываний по совпадению значений счетчика таймера и регистра OCR2 определяется содержимым OCR2 и предделителем тактовой частоты таймера. Режим СТС хорош и удобен тем, что позволяет довольно гибко регулировать частоту прерываний путем записи в OCR2 разных значений, а в обработчике прерываний не заботиться об обновлении счетчика таймера, а заниматься только основными задачами.

Чтобы не было заметно мерцания индикаторов, надо настроить таймер и OCR2 так, чтобы прерывания возникали не менее, чем с частотой 3*25=75 Гц. Каждый раз по прерыванию мы должны в обработчике сначала погасить все индикаторы путем вывода единиц в нужные разряды порта В (индикаторы-то у нас с общим катодом, потому лог.1 на катоде погасит индикатор), затем выбрать из заранее подготовленного массива выводимых символов очередной, т.е. следующий символ, вывести его в порт D, а потом установить 0 на линии порта В, соответствующей так же следующему индикатору. Таким образом, 75 раз в секунду (или чаще) мы сможем обновлять поочередно информацию на индикаторах, что создаст эффект их непрерывного свечения.

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

Наиболее эффективен принцип ШИМ-регулирования среднего тока, который заключается в следующем. При частоте динамической индикации в 75 Гц каждый из индикаторов мигает с частотой в 3 раза меньшей, т.е. 25 Гц. Для каждого из индикаторов фаза «свечения» длится 13,3 миллисекунды, а отсутствие свечения - 26,7 миллисекунды, т.е. каждый индикатор питается прямоугольными импульсами тока со скважностью 1/3. Очевидно, что увеличить длительность свечения индикатора мы не можем (станут заметны мерцания), но можем уменьшить ее, сохранив неизменной частоту. Иначе говоря, мы можем уменьшить скважность питающих импульсов. Можем, но как?

 

Да очень просто! Для этого откажемся от режима СТС таймера и заставим его работать в режиме «быстрого ШИМ» (fast-PWM), а так же добавим в нашу программу обработку прерывания по переполнению таймера. Режим fast-PWM характеризуется тем, что при равенстве OCR2 и счетчика таймера TCNT2 возникает прерывание по совпадению, но счетчик не обнуляется (как в режиме СТС), а продолжает считать до переполнения, после чего возникает соответствующее прерывание. Легко видеть, что прерывания по переполнению и по совпадению будут следовать с одинаковой частотой, (которая будет определяться только параметрами предделителя таймера!) однако время, прошедшее от переполнения до совпадения, будет определяться значением OCR2. Если теперь в обработчике прерывания по переполнению мы будем просто выводить в регистр В единички, т.е. гасить индикаторы, а обработчик прерывания по совпадению оставим прежним, мы получим то, что хотели! Смотрите: чем большее значение OCR2 мы зададим, тем меньшее время будут светиться индикаторы, максимальное время свечения будет равно периоду переполнения таймера, а минимальное - практически ноль. Поясню сказанное парой рисунков, на которых красным условно показано изменение значения счетчика таймера во времени, синим - значение OCR2, а зеленым - состояние индикатора.

ШИМ-регулирование яркости при динамической индикации
OCR2 содержит большое значение - малая яркость индикатора

ШИМ-регулирование яркости при динамической индикации
OCR2 содержит малое значение - большая яркость индикатора

Как видите, просто меняя значение OCR2 мы можем в широких пределах регулировать скважность импульсов тока через индикатор, а значит - яркость его свечения. Так как регулировка все равно может вестись только в сторону уменьшения тока, органиченного сопротивлением резисторов, следует выбрать эти сопротивления по максимальной яркости, а уж необходимую яркость обеспечивать регулированием. Конкретный диапазон значений OCR2 вам придется подобрать самостоятельно, исходя из собственных предпочтений и условий.

В этой статье не рассмотрены конкретные примеры программной реализации подхода, т.к. ничего принципиально сложного тут нет. Так же не затрагиваются способы изменения значения OCR2: это может быть какая-то ручная регулировка при помощи кнопок, или автоматическая при помощи фоторезистора и АЦП - оставляю все эти аспекты на усмотрение читателей. Обращаю ваше внимание на то, что хотя в статье рассмотрен второй таймер, имеющийся в микроконтроллере Atmega8, ничто не мешает использовать для этой цели любой иной контроллер с таймером, который может работать в режиме fast-PWM. Надеюсь, изложенной информации достаточно для самостоятельной реализации ШИМ-регулирования яркости при динамической индикации.


Добавить в любимые (0) | Просмотров: 34976

  Коментарии (8)
 1 Написал(а) Igor, в 20:03 17.03.2008
это ещё сложней..... лучше уж буду для начала пытаться понять индикацию.....
 2 Написал(а) hackzone, в 20:07 06.04.2008
Да, простой и понятный алгоритм. Ломаться тут вроде нечему.
 3 Написал(а) Геннадий, в 23:35 12.04.2008
Простите за бестолковость, а где исходник нельзя ли взглянуть
 4 Написал(а) ARV, в 09:42 16.04.2008
[b]прочтите последний абзац статьи, первое предложение[/b]. 
какой исходник? своя голова зачем? неужели для 2+2 надо публиковать исходники?!
 5 Написал(а) Андрей, в 13:13 08.02.2009
У самого вертелся в голове подобный способ, но на 2-х таймерах. Очень вовремя накнулся. ARV спасибо. Кстати откуда даные по минимальной частоте обновления 75 Гц.
 6 Написал(а) Андрей, в 21:11 16.02.2009
Использовал данный способ на базе МК Тини2313. Частота ШИМ примерно 3.9кГц. Данный алгоритм работает устойчиво, проверял в течении 4-х часов постоянного изменения яркости и часа неизменной. Единственное на что следует обратить внимание это крайние значения регистра сравнения у меня корректно работало при значениях от 5 до 250 (счетчик 8-ми битный).
 7 Написал(а) ARV, в 21:23 16.02.2009
Видимо, максимальное и минимальное значение OCR связано с тем, что обработка прерывания (особенно на Си) занимает какое-то время, и если этого времени не хватает, то работа срывается - прерывания следуют непрерывно друг за другом, не давая работать основному циклу... это очень возможно при низкой тактовой частоте МК :)
 8 Написал(а) Андрей, в 20:51 17.02.2009
Я тоже считаю что дело во времени обрабатывания прерывания по совпадению т.к. оно более всего нагруженным получается, но и диапазона 5...250 более чем достаточно. У меня МК тактируется от внутреннего RC на 8МГц. Неплохо бы сей диалог перенести в форум :)

Только зарегистрированные пользователи могут оставлять коментарии.
Пожалуйста зарегистрируйтесь или войдите в ваш аккаунт.

 
« Пред.   След. »
Полезные материалы по сходным темам
Кто на сайте?
Сейчас на сайте находятся:
3 гостей
Помощь on-line
BannerFans.com