Модуль TM1637 с PIC контроллером
Программа взаимодействия модуля TM1637 c PIC контроллером
В статье будет рассмотрена одна из версий взаимодействия микроконтроллеров PIC с модулем индикации, который реализован на микросхеме ТМ1637 и семисегментном четырехразрядном светодиодном индикаторе с общим катодом. Внешний вид модуля показан на фото ниже.
Надо заметить, что модуль очень дешевый и на AliExpress они стоят порядка 60 рублей. Я приобрел модуль с «часовым» индикатором, но есть модули и с обычными шестиразрядными индикаторами разного цвета свечения сегментов.
Взаимодействие микроконтроллера с микросхемой ТМ1637 осуществляется посредством двухпроводной шины. Метод связи не идентичен протоколу 12C полностью. Как мне показалось он намного проще. Вообще данная микросхема является драйвером и для работы с 8×2bit клавиатурой. Но эту опцию я еще не рассматривал. Здесь будет рассмотрен только процесс передачи данных на четырехразрядный индикатор. Кстати, весь процесс динамической индикации микросхема берет на себя, что является большущим плюсом. Намного упрощается написание программ с использованием данных индикаторов, не надо следить за массой временных интервалов. Яркость сегментов индикатора регулируется программно и имеет семь уровней, которые выбираются при помощи передачи в чип семи команд. От 0×88...0x8f, в двоичном коде, например, первая команда будет выглядеть так – ‘10001000’. Единица в старшем разряде, bit7 означает включение индикации. Если этот бит установлен в «0», то индикаторы светиться не будут. Т.е. появляется возможность отключать индикатор, например, для экономии энергии в мобильных устройствах. При передаче последней команды – 8fh, ‘10001111’, свечение индикаторов будет иметь самую высокую яркость.
Программа передачи данных для TM1637
На рисунке ниже приведена импульсная последовательность передачи данных с необходимым порядком коммутирования и взаимодействия шины тактовых импульсов и шины данных.
Для начала взаимодействия с драйвером микроконтроллер должен сформировать на шинах комбинацию start .
Далее передается первая команда – command1, после передачи всех восьми бит, микроконтроллер должен получить от чипа подтверждение о получении данных — АСК. Код данной операции размещен ниже.
После передачи последнего – восьмого бита, прижимаем шину тактов (строка 146), при этом шина данных поднята, переводим вывод шины данных с выхода на прием, ждем, когда чип прижмет шину данных – DIO в знак того, что все принято. Когда чип прижмет шину, переводим вывод на выдачу и сразу уже сами ее прижимаем. Теперь формируем ответный сигнал для чипа – поднимаем шину CLK (строка 161)– это получается передний фронт девятого импульса. После паузы в 10мкс формируем задний фронт девятого импульса (строка 163). Далее, после того, как мы получили ответ от чипа и сами ответили ему, микроконтроллеру необходимо передать команду стоп – stop.
Ждем 10мкс, поднимаем CLK и через 10мкс поднимаем шину данных DIO. Все, мы передали команду – 40h, это команда, после которой драйвер будет заносить восьмибитовые данные в свои регистры, начиная с первого адреса и далее автоматически.
Далее идет опять команда start, за ней передается код того самого первого адреса, с которого начинается отсчет. Теперь уже можно передавать все шесть байтов информации в чип. В этом случае между передачей байтов есть только команды подтверждения АСК, команды стоп нет. Вслед за этим передается третья команда, в коде которой содержится: бит включения индикации и комбинация бит определенного уровня яркости свечения индикатора. Про этот код было упомянуто выше.
Передача байтов происходит от старшего байта к младшему и младшими битами вперед. Подпрограмма загрузки шести байтов данных показана на скриншоте ниже.
В моем случае в регистры «digit» загружено число 543210, но так как индикатор четырехразрядный, то на нем выводится только старшие разряды.
Со строки 118 начинается передача третьей команды, ее код в двоичной системе b’10001010’. Как я уже писал выше, в старшей тетраде байта находится код на включение индикатора, а в младшей – код уровня яркости свечения сегментов индикатора. В моем случае выбрана яркость ниже средней. Да, чуть не забыл, для того, чтобы зажечь точки в данном «часовом» индикаторе, необходимо в старшем – 7 м бите, в предпоследнем по старшинству разряде (где высвечивается цифра 4), поставить «1».
6 комментариев к “Модуль TM1637 с PIC контроллером”
Здравствуйте!Специально зарегистрировался на Вашем сайте, что бы выразить почтение Вашему творчеству и способу изложения мысли. Пожалуйста, продолжайте в том же духе.)
megavolt, большое спасибо за хорошую оценку.
Здравствуйте. Адекватный и понятный материал нашел только у вас на сайте! Все понятно, но не понятен один момент, а именно реализация подпрограммы Byte-Out. Возможно это подпрограмма ACK? Спасибо!
!
Привет, Вячеслав. Подпрограмма Byte-Out это набор инструкций по передаче побитно одного байта информации. А АСК — это подпрограмма ожидания ответа от ведомого о приеме данных.
Здравствуйте! Толковая статья. Спасибо!
«Подпрограмма Byte-Out это набор инструкций по передаче побитно одного байта информации.» Не могли бы Вы опубликовать этот набор инструкций?
Извините, сразу не увидел полную версию программы. Еще раз спасибо!