Когда возникла эта идея, потребовался ЖК индикатор с последовательной шиной. Современного дисплея под рукой не оказалось и для проверки взяли древний ЖКИ с драйвером µPD7225. Когда задача была решена, стало понятно, что доступные сегодня индикаторы всего лишь частный случай.


Применяя микроконтроллеры с небольшим количеством ножек, часто сталкиваешься с проблемой нехватки портов ввода-вывода. Ресурсов микроконтроллера хватает "за глаза" для решения поставленной задачи, а портов — нет. Появляется искушение "нагрузить" уже занятые. В качестве примера рассмотрим простой двухканальный вольтметр на МК tiny13, в котором два порта — аналоговые входы и два — последовательный интерфейс ЖКИ. Расширить функциональные возможности прибора можно, только используя шину передачи последовательных данных (SD). Тем более, что она почти всегда отдыхает. Передача данных в индикатор занимает максимум две-три сотни микросекунд, обновление не чаще чем раз в 300 мС. Линию тактирования (CLK) использовать нельзя по понятным причинам. Простенькому приборчику остро не хватает пары кнопок для переключения режимов и индикации этих режимов, особенно когда невелика разрядность дисплея. Вот и задача...


Вначале о подключении индикатора к двухпроводному последовательному интерфейсу. Для управления LCD с µPD7225 требуется 6 сигнальных линий: RESET, CS, C/D, BUSY, SI, SCK. Две последние обсуждать нечего, мы их уже упомянули. Остальные, по порядку: сброс, выбор кристалла, команда/данные и готовность, которая генерируется драйвером LCD. Схема двухпроводного подключения дисплея приведена на рис.1 справа. Сброс кристалла происходит один раз при включении питания и осуществляется цепью R2C2, предусмотренной документацией на драйвер.


image


Активный низкий CS формируется низким уровнем на линии синхронизации. Пока идет запись данных в LCD, конденсатор C1 разряжен через диод VD1. После последней записи CLK устанавливается в "1" и C1, заряжаясь через R1, снимает разрешение кристалла.


Перед записью командной последовательности в индикатор, на шине SD надо установить высокий уровень и подождать, чтобы C3 зарядился через R3. Времени записи нескольких байт недостаточно, чтобы напряжение на C3 значительно изменилось. Для записи данных C3 разряжается низким уровнем на SD. Вместо опроса сигнала BUSY, который делать затратно, программа формирует временную задержку после фронта импульса, перед записью очередного байта. Сигнал готовности снимается драйвером после записи каждого байта и при снятии CS, что показано на осциллограмме.


image


Чтобы быть уверенным в надежности схемы, испытали еще один LCD с аналогичным интерфейсом — KTM-S1201. Драйвер тот же, параметры тактирования отличаются на 20%.








Пришлось подкорректировать константы задержек и добавить отсутствующую цепь регулировки контрастности. Для 8-и разрядного индикатора NEC предназначена программа pt13.asm, для 12-разрядного KTM-S1201 — pt23.asm. Подключение к микроконтроллеру через стандартный для этих индикаторов 8-и пиновый прямоугольный разъем.




Понятно, что более современные ЖКИ с последовательным управлением подключить к двум шинам значительно проще.


Схема управления и индикации показана на рис.1 в центре. Цепь из трех светодиодов и пары резисторов с двумя обычными кнопками без фиксации позволяет получить набор напряжений в узлах, необходимый и достаточный для надежной идентификации нажатия, а также позволяет, используя возможности стандартного выхода порта, независимо управлять двумя светодиодами разного цвета. Последовательно соединенные красные диоды будем считать за один с удвоенным прямым падением напряжения. Поскольку светодиоды используются здесь не только по прямому назначению, но и как стабилитроны, для начала предупредим, что любые замены на светодиоды с другим цветом, кроме указанных, вряд ли приведут к хорошим результатам. То же относится к напряжению питания схемы.


В исходном состоянии (кнопки не нажаты) напряжение в точке соединения диодов 2,1В. Свечения нет, мало напряжение на каждом из диодов. Нажаты верхняя/нижняя — 1,4/4,8В. Чтобы различить уровни, микроконтроллер должен иметь возможность аналого-цифрового преобразования по выбранному, для подключения схемы, порту. Далее все стандартно.


Порт настроить как вход, преобразование входного напряжения, сравнение кода с установленными порогами, подавление "дребезга" и генерация флагов нажатий. Логика программы сканирования устроена так, что первое нажатие выбранной кнопки устанавливает её флаг, второе — сбрасывает. Еще одна программа управляет светодиодами. Используется третье состояние порта, чтобы их независимо включать и выключать. Низкий уровень порта зажигает красные светодиоды, высокий — зеленый. Чтобы могли светиться все светодиоды одновременно, использован обычный принцип динамической индикации. Затраты на обслуживание мизерны.


Схема управления своим единственным входом/выходом подключается к шине SD последовательного интерфейса ЖКИ. В паузе между обращениями к индикатору шина переводится в высокоимпедансное, а шина тактирования в пассивное состояние. Теперь уровень на шине SD определяется светодиодно-резистивно-кнопочной схемой, который может меняться в ту или иную сторону от среднего, в зависимости от нажатой кнопки, на величину прямого падения напряжения на светодиодах. После цикла АЦП, микроконтроллер, в режиме разделения времени, управляет светодиодами.Схема может подключаться опционно к любому удобному порту любого микроконтроллера, для операций настройки, проверки или поиска глючности программы. В таком случае необходимо предусмотреть простую проверку ее присутствия при начальной инициализации, признаком которой является уровень напряжения "ни ноль ни единица". Схема не влияет на работу интерфейса индикатора и не требует каких-либо существенных затрат программной памяти микроконтроллера. Это хорошо видно по размеру демонстрационного HEX файла.


Работа схемы управления проиллюстрирована осциллограммой сигналов на шине SD последовательного интерфейса. Пичок слева — момент опроса состояния кнопок. "Частокол" справа от центра — обновление индикатора.




Выбирая элементную базу учитывайте следующее. Зеленые SMD LED забракованы из-за малой яркости при выбранном токе. Пришлось применять 3-х мм светодиод. Для проверки включите его в цепь 5В через резистор 10К. Яркость должна вас устроить. Красные светодиоды годятся любые. На свечение светодиода в момент нажатия кнопки не нужно обращать внимания (такова уж схема), т.к. смена информации в регистре микроконтроллера происходит при отпускании кнопки. Еще некоторое время требуется для активации нового цикла вывода (старый может быть еще не окончен), так что воспринимайте это, как подмигивание контроллера лично вам, не более. Никаких неудобств при работе не отмечено. Единственную особенность, короткую вспышку светодиодов при обновлении индикатора, можно считать индикацией рабочего состояния прибора.


Демонстрационная программа написана на ассемблере, компилировалась для ATtiny13 под два индикатора и содержит только необходимое для понимания принципа совместной работы интерфейса и схемы управления в реальном приборе. Светодиод соответствующей кнопки зажигается при первом нажатии и гаснет при втором. Этим ограничивается обработка флагов нажатий в программе. В распоряжении разработчика имеется свободный порт для управления в зависимости от функционального предназначения прибора и в запасе вход "reset". Оставшейся свободной программной памяти, а это почти половина всей, должно хватить для наделения устройства конкретными дополнительными функциями. Применение tiny25/45/85 вообще снимает проблему памяти.


Для выбора коэффициентов преобразования каналов вольтметра, служат константы Coef в исходнике. Их подбор при компиляции программы делает ненужным применение подстроечных резисторов в делителях входных цепей и позволяет использовать вольтметр в диапазоне входных напряжений до 99,9В. Хотя после запятой отображаются две цифры, следует понимать, что точность ограничена разрядностью АЦП микроконтроллера. Усреднение по 64-м отсчетам позволяет наблюдать изменения в пределах десятков милливольт входного напряжения свыше 10В при высокой стабильности показаний. Номиналы резисторов делителей входов выбираются из условия непревышения на выводах микроконтроллера напряжения питания с последующей коррекцией констант в программе для соответствия показаний. Значения fuses МК в исходном тексте. Необходимо выключить делитель на 8, остальное по умолчанию.


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


Часть 2. "А не замахнуться ли ..."


Шина I2C тоже относится к двухпроводным интерфейсам. Заманчиво было бы перенести идею двухкратного использования последовательной шины и на нее, тем более, что есть много ЖК индикаторов этого стандарта. Даже отечественный производитель выпускает десяток наименований.


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



Для смещения начального уровня применен параметрический стабилизатор на светодиоде VD3, ток через который задает резистор R3. Этот светодиод может использоваться как индикатор работы прибора. Демонстрационная программа вольтметра, описанного выше, но предназначенного для работы с индикатором MT-10T11 (ООО "МЭЛТ") и схемой управления-индикации, присутствует.







ВНИМАНИЕ: подтягивающий резистор шины SDA не устанавливается, его функции выполняет
схема управления-индикации. Подтягивающий резистор шины SCL установлен на индикаторе.


> Файлы
> Материалы

Поделиться с друзьями
-->

Комментарии (14)


  1. melchermax
    28.04.2017 10:43
    +1

    Отличная публикация, побольше бы таких. Про OLED в этом же ключе не напишете?


    1. VBBabanin
      28.04.2017 11:00

      Хотелось бы попробовать, но под рукой нет.


  1. Slym99
    28.04.2017 10:59

    Что это было? Софтварное мультиплексирование ножек?
    Надо попробовать, а оно точно работает?


    1. VBBabanin
      28.04.2017 11:01

      Гарантирую.


  1. VBBabanin
    28.04.2017 11:56

    Пока такая цель не ставилась. Этот принцип предстоит расширить, только потом оценивать.


  1. sergey2ru
    28.04.2017 12:00

    Отличный вариант максимального использования микроконтроллера в плане подключения устройств.
    Однако хотелось бы спросить, оценивалась ли в эффективность данного решения в экономическом плане? Я имею в виду добавление некоторого количества дискретных компонентов и увеличения размеров печатной платы (при массовом изготовлении) по сравнению с переходом на контроллер с большим количеством ног/портов?
    Или это просто проект использования того контроллера, который был в наличии под образовавшиеся потребности?


    1. VBBabanin
      28.04.2017 12:06

      Компонентов-то не прибавится. А размер ПП, точно, уменьшается.


      1. PKav
        28.04.2017 12:46

        А относительно чего уменьшится? Если сравнивать с ATTiny13A, то есть STM32F030F4P6, который имеет больше ножек при том же размере, не говоря уж о функционале.


        1. VBBabanin
          28.04.2017 12:58

          из пушки по воробьям не стрелять!


          1. PKav
            28.04.2017 13:05
            +1

            Да какая это пушка… Так, пукалка маленькая. Это же самый маленький контроллер из всего семейства STM32, и цена у него чуть дороже ATTiny13a. Тут надо устройства миллионными партиями производить, чтобы выгода была заметна. А удовольствие при работе нормальный архитектурой памяти и нормальными инструментами разработки — бесценно.


            1. VBBabanin
              28.04.2017 13:35

              на STM32, конечно, круто. Но на tn13 элегантнее.


              1. PKav
                28.04.2017 13:46
                +1

                А код? По-моему, ничего элегантнее, чем управление встроенной периферией через регистры, не придумать. Любой ручной ногодрыг, особенно с подгоном таймингов под частоту ядра, не элегантен по определению.


  1. VBBabanin
    02.05.2017 09:05

    Не могу не согласиться. Хотелось бы посмотреть…


  1. VBBabanin
    02.05.2017 11:52

    .