Все своими руками » Модуль TM1637 с PIC контроллером






Модуль TM1637 с PIC контроллером

 

Программа взаимодействия модуля TM1637 c PIC контроллером

 

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


Модуль ТМ1637

Надо заметить, что модуль очень дешевый и на AliExpress они стоят порядка 60 рублей. Я приобрел модуль с «часовым» индикатором, но есть модули и с обычными шестиразрядными индикаторами разного цвета свечения сегментов.

 
 

Взаимодействие микроконтроллера с микросхемой ТМ1637 осуществляется посредством двухпроводной шины. Метод связи не идентичен протоколу 12C полностью. Как мне показалось он намного проще. Вообще данная микросхема является драйвером и для работы с 8×2bit клавиатурой. Но эту опцию я еще не рассматривал. Здесь будет рассмотрен только процесс передачи данных на четырехразрядный индикатор. Кстати, весь процесс динамической индикации микросхема берет на себя, что является большущим плюсом. Намного упрощается написание программ с использованием данных индикаторов, не надо следить за массой временных интервалов. Яркость сегментов индикатора регулируется программно и имеет семь уровней, которые выбираются при помощи передачи в чип семи команд. От 0×88...0x8f, в двоичном коде, например, первая команда будет выглядеть так – ‘10001000’. Единица в старшем разряде, bit7 означает включение индикации. Если этот бит установлен в «0», то индикаторы светиться не будут. Т.е. появляется возможность отключать индикатор, например, для экономии энергии в мобильных устройствах. При передаче последней команды – 8fh, ‘10001111’, свечение индикаторов будет иметь самую высокую яркость.

 

Программа передачи данных для TM1637

 

На рисунке ниже приведена импульсная последовательность передачи данных с необходимым порядком коммутирования и взаимодействия шины тактовых импульсов и шины данных.

Модуль TM1637 с PIC контроллером

Для начала взаимодействия с драйвером микроконтроллер должен сформировать на шинах комбинацию start .

 Программа для ТМ1637 Start

Далее передается первая команда – command1, после передачи всех восьми бит, микроконтроллер должен получить от чипа подтверждение о получении данных — АСК. Код данной операции размещен ниже.

 Программа для ТМ1637, АСК

После передачи последнего – восьмого бита, прижимаем шину тактов (строка 146), при этом шина данных поднята, переводим вывод шины данных с выхода на прием, ждем, когда чип прижмет шину данных – DIO в знак того, что все принято. Когда чип прижмет шину, переводим вывод на выдачу и сразу уже сами ее прижимаем. Теперь формируем ответный сигнал для чипа – поднимаем шину CLK (строка 161)– это получается передний фронт девятого импульса. После паузы в 10мкс формируем задний фронт девятого импульса (строка 163). Далее, после того, как мы получили ответ от чипа и сами ответили ему, микроконтроллеру необходимо передать команду стоп – stop.

 Программа для ТМ1637,Stop

Ждем 10мкс, поднимаем CLK и через 10мкс поднимаем шину данных DIO. Все, мы передали команду – 40h, это команда, после которой драйвер будет заносить восьмибитовые данные в свои регистры, начиная с первого адреса и далее автоматически.

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

Передача байтов происходит от старшего байта к младшему и младшими битами вперед. Подпрограмма загрузки шести байтов данных показана на скриншоте ниже.

Загрузка данных в ТМ1637

В моем случае в регистры «digit» загружено число 543210, но так как индикатор четырехразрядный, то на нем выводится только старшие разряды.

Модуль TM1637 с PIC контроллером

Со строки 118 начинается передача третьей команды, ее код в двоичной системе b’10001010’. Как я уже писал выше, в старшей тетраде байта находится код на включение индикатора, а в младшей – код уровня яркости свечения сегментов индикатора. В моем случае выбрана яркость ниже средней. Да, чуть не забыл, для того, чтобы зажечь точки в данном «часовом» индикаторе, необходимо в старшем – 7 м бите, в предпоследнем по старшинству разряде (где высвечивается цифра 4), поставить «1».

Скачать статью

Просмотров:5 831
6 комментариев




6 комментариев к “Модуль TM1637 с PIC контроллером”

  • megavolt
    27 декабря, 2019, 21:22

    Здравствуйте!Специально зарегистрировался на Вашем сайте, что бы выразить почтение Вашему творчеству и способу изложения мысли. Пожалуйста, продолжайте в том же духе.)

  • admin
    7 января, 2020, 12:02

    megavolt, большое спасибо за хорошую оценку.

  • Вячеслава
    2 апреля, 2020, 9:47

    Здравствуйте. Адекватный и понятный материал нашел только у вас на сайте! Все понятно, но не понятен один момент, а именно реализация подпрограммы Byte-Out. Возможно это подпрограмма ACK? Спасибо!

    !

  • admin
    5 апреля, 2020, 0:04

    Привет, Вячеслав. Подпрограмма Byte-Out это набор инструкций по передаче побитно одного байта информации. А АСК — это подпрограмма ожидания ответа от ведомого о приеме данных.

  • Алексей
    21 января, 2023, 22:32

    Здравствуйте! Толковая статья. Спасибо!

    «Подпрограмма Byte-Out это набор инструкций по передаче побитно одного байта информации.» Не могли бы Вы опубликовать этот набор инструкций?

  • Алексей
    21 января, 2023, 22:47

    Извините, сразу не увидел полную версию программы. Еще раз спасибо!

Оставить комментарий