24.05.2009

Arduino и ЖКИ-модуль H1313/120D

На прошлой неделе по случаю купил индикатор ЖКИ.

Купил просто так, из спортивного интереса - на вопрос о документации продавцы только печально развели руками: нету, дескать. Я решил, что с помощью 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 и схемой.

22.05.2009

Я - спаммер!

Так посчитал Google в лице BlogSpot-а, и вынес мне предупреждение, что блог удалят через 20 дней.

Честно говоря, с трудом понимаю, почему они так решили, прочитал внимательно о признаках спам-блога:

Blogs engaged in this behavior are called spam blogs, and can be recognized by their irrelevant, repetitive, or nonsensical text, along with a large number of links, usually all pointing to a single site.

Ну хорошо, не умею я писать тексты, они иррелевантные и повторяющиеся (двойка мне по русскому языку). Но вот чтобы большое число линков, ссылающихся на один и тот же сайт... Ну, теортеически, можно придраться к рекламному блоку "молотка" справа, и если это так - моему блогу пора менять адрес прописки.

Если меня вынудят это сделать, обязательно уведомлю всех отдельным постом. А пока оставайтесь с нами! ;)

UPD: о, бан с меня сняли. Наверное, сработал еще один робот, который эти баны снимает. Так что пока никуда не переезжаю, но осадок - остался...

Сборка Freeduino MaxSerial

Для сборки Freeduino MaxSerial потребуются следующие детали:

  • Печатная плата Freeduino MaxSerial v2.5 - 1 шт.
  • Микроконтроллер ATmega8/168/328P  - 1 шт.
  • Панелька SCS-28 - 1 шт.
  • Микросхема MAX232CPE - 1 шт.
  • Панелька SCS-16 - 1 шт.
  • Стабилизатор напряжения L7805CV - 1 шт.
  • Стабилизатор напряжения К1235ЕН3БП - 1 шт.
  • Кварц 16 МГц - 1 шт.
  • Емкость керамическая 22пФ - 2 шт.
  • Емкость керамическая 100нФ - 7 шт.
  • Емкость керамическая 1000нФ - 4 шт.
  • Емкость электролитическая 100мкФ х 16В - 1 шт.
  • Емкость электролитическая 47мкФ х 10В - 1 шт.
  • Диод 1N4007 - 1 шт.
  • Резистор 1 КОм - 3 шт.
  • Резистор 10 КОм - 1 шт.
  • Резистор 330 Ом - 1 шт.
  • Вилка PLD06 2x3 - 1 шт.
  • Светодиод - 2 шт.
  • Тактовая кнопка - 1 шт.
  • Разъем DRB-9FА угловой на плату - 1 шт.
  • Гнездо питания 2.1мм на плату - 1 шт.
  • Гнездо PBS-08 1x8 - 2 шт.
  • Гнездо PBS-06 1x6 - 2 шт.

Все перечисленные компоненты можно заказать тут.

1. Установим резисторы R7,R11 и R12 (1К):



2. Установим резистор R1 (10К - номинал подписан шелкографии):



3. Установим резистор R8 (330 Ом, токоограничительный для светодиода PWR):



4. Ставим защитный диод D1 (1N4007 или 1N4004), полоска на диоде должна соответствовать полоске на шелкографии:



5. Паяем панельки для ATmega и MAX232, не забывая сориентировать ключи по всё той же шелкографии (MAX232 - наверх, ATmega - вправо):





Дальше надо будет установить емкости, их достаточно много.

Скорее всего, в комплекте будут емкости с расстоянием 5 мм между выводами, это чуть больше, чем надо:



... поэтому, придется их подогнуть, приблизительно так:









6. Установим конденсаторы-помпы для MAX232.

Именно из них чип MAX232 "черпает" запасы при формировании 9-вольтных сигналов COM-порта, ухитряясь питаться при этом от 5 вольт.



Если в наборе микросхема MAX232CPE, то у нее рекомендованный номинал конденсатора - 1мкФ (на нем будет написано "105"):



Теоретически, вместо 1мкФ можно поставить 100нФ - тогда будет работать на скоростях не выше 64Кбит. Вполне допустимая замена, лично я никогда не пытался общаться с Arduino на скорости больше 57600.

7. Устанавливаем резонатор 16 МГц. Они могут быть двух типов: трехпиновый керамический или кварцевый. Керамический выглядит так:



Кварцевый - так:



8. Если у нас кварц, то необходимо установить C3 и C2 (22 пФ, обычно на них написано "220"):



Для керамического трехпинового резонатора конденсаторы не нужны: они уже и так есть, внутри его корпуса. Определить наличие конденсаторов внутри керамического резонатора можно по числу пинов: если 3 - есть, если 2 - нет.

9. Набраться терпения и установить все семь конденсаторов 100 нФ (на них написано "104"):



10. Устанавливаем электролиты в цепи стабилизатора напряжения, длинной ножкой в плюс. Обычно, их емкость 47...100 мкФ, но у того, что стоит ДО стабилизатора должно быть максимальное напряжение не менее 16В:



...а у того, что после - не менее 6В:



11. Устанавливаем тактовую кнопку сборса.

Лапки должы быть сориентированы влево и вправо:



12. Устанавливаем стабилизатор напряжения 5В. Сначала можно подогнуть ножки корпуса:



.. затем припаять. Если при этом корпус будет слегка выступать за край платы:



... слегка надавите, он сдвинется вглубь:



13. Установим светодиоды. Они должны быть сориентированны длинной ногой вниз:





14. Устанавливаем стабилизатор 3.3В - L78L33ACZ (или К1235ЕН3БП). Для начала отогнем среднюю ножку:



затем установим, ориентируя корпус TO-92 по шелкографии (плоской частью к центру платы):



Все основные детали припаяны, можно перевести дух и выпить чаю. Остаются только разъемы:



15. Паяем колодки PBS. Важно запаять их ровно, для этого надо зафиксировать их каким-либо образом. Самое простое - при помощи уже собранной Shield-платы:



Надеваем колодки на Shield-плату:



Сверху устанавливаем Freeduino и спокойно паяем:



16. Паяем разъем ICSP: PLD06



Контакты нельзя долго и с чувством греть, иначе они "поедут" из-за размягчения пластикового корпуса, и получится некрасиво.

17. Паяем разъем DC-питания



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

18. Устанавливаем разъем COM-порта DRB-09FA:



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

19. Вот и все.

Аккуратно подгибаем ножки у микросхем MAX232 и Atmega:



Вставляем их в панельки до упора, не забыв об ориентации ключа... любуемся на наш шедевр:



Обычно, если все элемнты исправны, стоят на своих местах и правильно ориентированы, наладки не требуется. Это и понятно - настраивать тут рещительно нечего. Можно подключать к Arduino IDE и загружать тестовый скетч, точно так же, как это описано здесь (только сброс будет происходить автоматически).

15.05.2009

Arduino на бумаге

Если совместимость с Shield-платами не особенно важна, то Arduino-совместимую плату можно изготовить и без печатной платы (детали, конечно, понадобятся ;)

Название: PAPERduino
Процессор: ATmega168/328
Тактовая частота: 16МГц
Совместимость с Shield-платами: нет
Совместимость с Arduino IDE: есть
Страница в блоге автора: http://lab.guilhermemartins.net/?p=817

В основе этого Arduino лежит... гофрокартон. Для общения с платой понадобится USB-to-TTL кабель на однорядной гребенке, а также кабель питания в виде двух оголенных проводов.



Распечатайте этот PDF (желательно на цветном принтере), аккуратно наклейте на обе стороны картонки, воткните детали с одной стороны, спаяйте проводники - с другой, и - готово!













Название: BBAC
Процессор: ATmega168/328
Тактовая частота: 16МГц
Совместимость с Shield-платами: нет
Совместимость с Arduino IDE: есть
Страница в блоге автора: http://oomlout.com/blog/2009/04/breadboard_based_arduino_compa_1.html

BBAC (Breadboard  Based Arduino Compatible) - подходит для тех, у кого есть беспаечная макетная плата. Тут уже даже паять не надо, достаточно просто воткнуть детали и провода. Панелька под ATmega в этом случае не нужна, но зато, как и для PAPAERduino, нужен USB-to-TTL кабель.





PDF для распечатывания.