Купил просто так, из спортивного интереса - на вопрос о документации продавцы только печально развели руками: нету, дескать. Я решил, что с помощью Arduino смогу его "оседлать", пусть даже путем экспериментирования. Мысленно окрестив себя безумным тинкером, я безропотно выложил деньги за непонятный девайс.
Модуль выглядит так:
С обратной стороны висит кварц в цилиндрическом корпусе и керамический конденсатор. Единственное, что позволяло его идентифицировать - надпись H1313/120D на печатной плате:
Конечно же, Гугл про него ничего вразумительного не сказал. Зато удалось найти упоминание о таком дисплее на "Молотке", но увы - текст аукциона был перемещен в архив, прояснилось только, что это - модуль индикации телефонного аппарата.
К счастью, названия сигналов были подписаны на колодке сверху:
Слева направо: HK, DI, Vss, SK, T и еще один безымянный. Коллеги на работе указали на то, что Vss и безымянный - это питание, DI и SK - линия данных и синхронизация, по поводу остального предположений не было. Я остался один на один с непонятным дисплеем и могучим Интернетом. Ответ отыскался спустя часа полтора, в виде статьи "ЖКИ модули со встроенным контроллером HT1611/2" Леонида Ивановича Ридико.
Это - действительно дисплей телефонного аппарата. Основная особенность - наличие встроенного таймера, который отображается после того, как вы благополучно набрали номер телефона. Таймер живет своей обособленной жизнью и никак не доступен для считывания или установки по шине (разве что, можно его сбросить). Зато, по последовательной шине можно передавать набор из 16 разных символов - новый символ появляется справа, остальные сдвигаются влево, самый левый пропадает. Вот знакогенератор:
В статье рассматриваются контроллеры HT1611/HT1613, производимые фирмой Holtek Semiconductors Inc, вот страница с документацией у производителя. Мой же, похоже, оказался сильно урезанной версией, без часов, кнопок и прочих излишеств.
HK - это кнопка "поднятие трубки" (Hook). Если там 0 - это значит, что трубку сняли, дисплей начинает индикацию. Если там 1 - трубку повесили, и отображать ничего не надо (я немного упростил, но суть - правильная). Данные засылаются последовательным кодом (от старшего бита к младшему):
Данные записываются по спаду SK, при этом время установки ta> 1мкс, а время удержания данных tb> 2 мкс. Главная хитрость - после передачи оставить SK в состоянии логического 0, в противном случае, через 5 секунд бездействия наша информация пропадет и покажется злосчастный таймер, который начнет отсчитывать секунды разговора.
Дисплей - суперэкономичный, питается от напряжения около 1,6 В, поэтому для согласования с пятивольтовым МК Arduino пришлось сделать простой делитель на резисторах - на питание и на сигналы SK/DI. Получилась несложная схема:
Для работы требуется минимум две линии Arduino - я выбрал digital 5 и 6, к которым подключены SK и DI. Чтобы не плодить провода, я решил запитать его от digital 4 и digital 7, создав на них разность потенциалов. Для начала, я собрал схему на макетной плате:
Запустилось сразу же:
Маленький кусочек макетки, резисторы, колодки и вилки PBS/PLS - и получается компактный переходник:
Скетч, выводящий знакогенератор на дисплей:
#define DI 5
#define SK 6
#define VCC 7
#define GND 4
#define HK 3
void setup() {
pinMode(DI,OUTPUT);
pinMode(SK,OUTPUT);
pinMode(GND,OUTPUT);
pinMode(VCC,OUTPUT);
digitalWrite(GND,LOW);
digitalWrite(VCC,HIGH);
digitalWrite(SK,LOW);
pinMode(HK,OUTPUT);
digitalWrite(HK,LOW);
}
void writeDigit(byte d) {
for (int i=0;i<4;i++) {
digitalWrite(SK,HIGH);
digitalWrite(DI, d & (1 << (3-i)));
delayMicroseconds(1);
digitalWrite(SK,LOW);
delayMicroseconds(5);
}
}
void loop() {
digitalWrite(HK,LOW);
for (int i=0;i<16;i++) {
writeDigit(i);
delay(500);
}
digitalWrite(HK,HIGH);
delay(5000);
}
Итак, в результате экспериментов, мы получили 10-разрядный цифровой дисплей с последовательной записью для Arduino. Без статьи это сделать можно было бы, но ушло бы гораздо больше времени. Вывод напрашивается сам собой - для подобных экспериментов было бы неплохо иметь логический анализатор. Я его уже заказал, по традиции - выписал из-за границы. Как получу - обязательно напишу обзор ;)
Скачать архив со скетчем для Arduino и схемой.