РадиоКот >Статьи >
Подключение TM1367 к PIC (первый опыт)
Подключение TM1367 к PIC (первый опыт).
Недавно решил использовать в таймере четырехзначный семисегментный индикатор ТМ1637 вместо знакосинтезирующего ЖКИ на базе контроллера HD44780.
Конструкция получается дешевле, освобождаются четыре порта, меньше команд в программе .
Вспомнив, что знакомство с ЖКИ на HD44780 начиналось с просмотра в интернете простых примеров программ на ассемблере, набрал запрос в поисковике.
Но ответа на вопрос "как подключить TM1637 к PIC" не получил. Дейташит микросхемы и статьи с пояснениями ее работы многое прояснили, но следуя им, работоспособную программу написать не удалось- то путались знакоместа, отсутствовали символы или произвольно выключался индикатор. Видимо не все, кажущееся авторам элементарным, доходит до впервые обратившегося к этой микросхеме. Программы в библиотеке MPLAB я тоже не нашел (или не сумел ей воспользоваться).
Поэтому пришлось отложить изучение интерфейса ТМ1637 и выводить символы по-своему, руководствуясь принципами I2C , не пытаясь объяснять свои решения . Так написал программку на ассемблере и использовал ее в своем таймере. Может быть она кому-то пригодится для знакомства с ТМ1637 или для демонстрации физического уровня I2C. Буду краток, считая, что читающий знаком с материалами по ТМ1637 и уже пытался их использовать ))).
В программе данные на шину DIO ТМ1637 выводятся группами по 5 байт . Включается индикатор этой же процедурой- первый байт, команда включения .140, второй, конфигурация .64, третий, номер какого-либо знакоместа; два последних байта могут быть нолями (сегменты не зажигаются). Следующая группа из пяти байт содержит номер знакоместа первой цифры и коды четырех выводимых цифр. Вывод данных происходит синхронно с состоянием тактовой шины CLK- уровень на DIO переключается, когда на CLK ноль. Между информационными байтами выдерживается промежуток в один период CLK на время ответа ACK. Старт и стоп происходит при переключении DIO на высоком уровне CLK. Тактовые импульсы имеют скважинность 2 и период 300мкс. В перерывах передачи импульсы не формируются, на шинах устанавливают единицу подтягивающие резисторы по 10 Ком. Порты RA4 (CLK) и RA5 (DIO) подключены к ним через развязывающие диоды “на всякий случай”, вдруг какое-либо новое устройство по своему усмотрению выставит на шинах ноль и двухтактный выход порта сгорит. Хотя стабильность частоты CLK не требуется, предпочтительно запретить прерывания при выводе знаков. Порты контроллера назначены согласно рисунку 1.
Для демонстрации интерфейса предлагаю программу " Часы ".
Меню программы имеет три режима:
- установка часов на рисунке 2,
- установка минут на рисунке 3,
- индикация времени на рисунке 4.
Интерфейс ТМ1637 реализован в процедуре PWR. В ней создан стек из пяти байт BTR1 - BTR5, в которые предварительно записываются данные. Байты синхронно с CLK сдвигаются вправо и правый крайний бит определяет уровень на шине DIO. После восьми информационных бит устанавливается высокий уровень и не делается сдвиг во время одного такта CLK, отводимого на ACK.
В таблице ниже поясняется назначение некоторых процедур программы:
PWR |
Интерфейс ТМ1637. RA4- CLK, RA5- DIO. |
CLOCK |
Часы, считающие переполнения TMR1 |
JK и PI9_ |
Переключение пунктов меню, увеличение или уменьшение параметра |
BDPP |
Преобразование числа из двоичной формы в двоично-десятичную, подготовка к выводу на индикатор |
RDEP2C и IND2C |
Преобразование полубайтов выводимого числа в коды символов, запись кодов в BTR1 – BTR5. Коды семисегментных цифр записаны в ЕЕР по адресам от 0 до 9 соответственно. |
KTRI_ и C_IND |
Управление работой программы. |
Поскольку программа вырезана из таймера (сам многорежимный таймер ничем не отличается от многих других и не достоин внимания Радиокотов), в ней много ‘’некрасивых” адресов и лишних переменных. Прошу не обращать на них внимания; цель статьи- предложить действующий вариант интерфейса для ТМ1637, например, в виде незамысловатых часов.
Освоив вывод на дисплей цифр, не трудно выводить и буквы в семисегментном алфавите, как показано на рис. 5.
К сожалению, в отличие от LCD1602 , в PROTEUS нет эмулятора ТМ1637.
Debugger I2C дает непонятные комментарии о работе интерфейса. Для отладки программы подходит логический анализатор.
На рис.6 показано начало передачи,- сначала команда "Старт", потом байт 00110001.Мы помним, что биты в интерфейсе передаются начиная с младшего, поэтому исходный байт "перевернут" и имеет вид 10001100, что соответствует .140, команде включения. Потом перерыв (единица на DIO) на время ответа ТМ.Этот же байт можно увидеть с помощью реального осциллографа (рисунок 7), только труднее добиться стабильной синхронизации. Хотя, если непременно нужна осциллограмма, можно использовать свободный порт микроконтроллера для формирования синхросигнала в нужном байте последовательности DIO.
К статье приложены проекты в MPLAB и PROTEUS’е.
Вот так я открыл для себя недорогой и удобный индикатор и поупражнялся в двоичном счете.
Файлы:
Проект в Proteus
Проект в MPLAB
Все вопросы в
Форум.
Как вам эта статья?
|
Заработало ли это устройство у вас?
|
|
|