Практически в любом приборе требуется какой-то вид индикации. Для индикации можно использовать:
- Светодиод или несколько
- Светодиодный индикатор — несколько разрядов
- ЖК индикатор
- ЖК дисплей
Светодиод — самый простой вариант. Им легко управлять, он дёшево стоит, его легко припаять. Но у него есть и минус — он потребляет много энергии, его свет плохо видно на ярком солнце. ЖК дисплей - довольное дорогое удовольствие, так же им довольно сложное управлять.
В этой статье рассмотрим подробнее как можно управлять ЖК индикатором обычным микроконтроллером, без специальной периферии для этого.
Для примера возьмём LCD индикатор - Gdc0209 — 4 цифры.
Он имеет всего 13 выводов на все сегменты. Для управления необходимо использовать динамическую индикацию. Управляющее напряжение 2.5В.
Динамическая индикация
Сегменты подключены следующим образом:
Как видно их схемы, у индикатора есть общие выводы COM0-COM4. Поэтому на нем нельзя управлять каждым сегментом независимо.
Для вывода нужной информации нужно использовать динамическую индикацию: показать часть сегментов, остальные выключить, потом другую часть и выключить предыдущие. Если так делать очень быстро (как минимум 25 раз в секунду), то глаз не заметит мигания сегментов, и картинка будет казаться целой. Такая схема очень часто используется для экономии количества выводов для управления индикатором. Она же и добавляет сложности.
Как правильно управлять одним сегментом LCD
Каждый сегмент по сути является конденсатором. Управлять им необходимо строго переменным напряжением. То есть, конденсатор нельзя оставлять заряженным одним потенциалом. Нужно его зарядить на одну полярность, потом на другую.
Чтобы сегмент стал чёрным (то есть видимым) необходимо приложить переменное напряжение больше рабочего (у нас это 2.5В), в случае если переменное напряжение будет меньше заданного, то сегмент будет невидим (или слабо видим). Это свойство ЖК и используется для управления. В простых индикаторах каждый сегмент выведен на свои выводы.
Управлять одним сегментом легко. Для этого нужно использовать два вывода микроконтроллера. Сначала на один вывод нужно подать 1, а на второй 0 — при это к индикатору будет приложено положительное напряжение, потом поменять полярность — на первый вывод 0, на второй 1. Так будет приложение отрицательно напряжение. Чтобы выключить сегмент. Нужно на оба вывода подавать 1 и 0 синхронно — так будет получено 0В.
При этом, если рабочее напряжение индикатора 2.5В, то использовать напрямую напряжение питания МК не получится, яркость будет слишком большая и весь индикатор в итоге станет чёрным. Питание сегмента должно быть симметричным, поэтому просто использовать PWM сигнал нельзя. Нужно прерывать меандр на какую то часть времени. То есть, вставлять «пустые кадры» когда на обоих выводах МК состояние 0.
Чем больше пропуском, тем ниже яркость. Частота должна быть около 25 Гц, чтобы не было мерцания — можно больше.
Метод цифровой корреляции
В специальных контроллерах используется аналоговый режим для управления таким индикатором. Для его работы необходимо три уровня напряжения. Рабочее напряжение (2.5В), 1/3 рабочего, 2/3 рабочего. И такое же отрицательное. Тогда схема управления будет выглядеть так:
Как видно на графике, один кадр состоит из четырёх частей. Каждая часть — это управлением сегментами одного общего вывода. Каким — выбирает наибольшая амплитуда изменения сигнала. Такой хитрый сигнал позволяет получить на всех сегментах переменное напряжение, причём именно на тех, которые надо показывать в определённый момент времени, оно будет равно рабочему напряжению, в итоге именно эти сегменты будут видны. Однако на других сегментах тоже будет какое-то напряжение и сегменты будут тоже слабо подсвечены (именно поэтому больше 4-х общих выводов не делают).
Для полностью цифрового управления индикатором данные ступеньки необходимо эмулировать ШИМ сигналом. Такая методика гораздо проще для МК без специализированной периферии. Вот её график.
Для управления используется ШИМ сигнал с 50% наполнением. Активный общий вывод задаётся ШИМ сигналом с вдвое меньшей частой, а не активный с вдвое большей. Для управления сегментами используется ШИМ сигнал меньшей частоты, при этом полярность ШИМ сигнала меняется для сегментов которые видимы — сигнал начинается с 0 и заканчивается 1, а для невидимых наоборот. Данная схема должна работать на довольно высокой частоте и с самым высоким приоритетом, иначе могут быть отклонения от схемы и будут появляться участки времени с постоянным напряжением, что будет приводить к деградации индикатора.
Если использовать слабый микроконтроллер, с частотой 16 Mhz, то у микроконтроллера может не хватить скорости, а если ещё снизить скорость, например до 2Mhz, для снижения потребления, то нужно как выкручиваться.
Самый простой способ — использовать два массива данных с фреймами для всех сегментов и цифр индикатора. В итоге в прерывании таймера просто устанавливаем состояние выводов в заданное значение из массива, а когда необходимо пересчитать состояние индикатора, то готовим данные во втором массиве и потом быстро копируем на место первого. На время копирования отключаем вывод данных в прерывании.
Саму программу в статье описывать не будем вы можете найти на github в описании прибора датчик УФ излучения, где как раз используется такой индикатор и микроконтроллер STM8.