28.01.2010

Сторожевая Собака

Недавно в руки мои попало вот такое чудо:


Позвольте представить: разработка ООО "ЛисКо", сторожевой таймер для платежного терминала LDog.


Думаю, всем приходилось сталкиваться с платежными терминалами. Достаточно оглянуться по сторонам - и обязательно где-то в метро, переходе, магазине или даже просто на улице отыщется услужливый железный истукан с большим цветным тачскрином. Двумя легкими движениями пальцев можно изобразить платеж любому оператору связи или перевести деньги Яндекс.Кошелек. Но готовьтесь к поборам - подлый автомат никогда не даст сдачи и не раскроет точной суммы комиссии, а в службе поддержки очень тяжело получить внятные ответы на простые вопросы типа "а сколько же на самом деле комиссия?". Впрочем, оставим моральные аспекты проблемы на доработку государственной Думе: пока нет законов в этой области, произвол будет продолжаться. Нас же с вами интересуют вопросы технического характера.

Платежный терминал, как и любой компьютер, может "зависать", доставляя финансовые неприятности хозяину. Основная задача LDog - уметь сбрасывать компьютер по команде или по истечению интервала отклика основной программы. Также, платежный терминал часто имеет выход в сеть через GPRS-модем, который тоже может зависнуть: LDog умеет и его перегружать, ненадолго разрывая цепь питания. Наконец, он оснащен двумя датчиками вскрытия, которые реагируют на разрыв цепи. Конечно, программное обеспечение, работающее на "большом брате" умеет много другого, типа отслеживания баланса на счету контракта GPRS-модема но это уже не особенно интересно.


Плавно подвожу к главному. Внутри LDog притаилась... классическая начинка Arduino! ATmega8-16AU тактируется от кварца 8МГц, а его порт USART подключен к COM-порту через драйвер RS232 от Analog Devices AD232 (тоже самое, что и популярная микросхема MAX232). Есть и гребенка ISP, только классическая 10-ти контактная.

Теперь немного об отличиях. Разумеется, все пины наружу не выведены. Мы ограничены двумя входами, двумя выходами и еще тремя линиями из разъема ISP (MOSI, MISO, SCK). Но зато выходы имеют оптронные развязки, а на одной из них висит MOSFET - специальный полевой транзистор, пропускающий через себя линию питания модема - 12 Вольт. Кстати, питание подается на плату через разъем питания IDE HDD, но есть и место для L7805, в качестве альтернативы.


Лучше один раз увидеть, чем 0x100 раз услышать. Именно поэтому я  нарисовал принципиальную схему:


(кликабельно). Может пригодиться тем, кто занимается постгарантийным ремонтом изделия собственными силами, но учтите: я мог запросто ошибиться. Если найдете ляп - умоляю, черкните комментарий.

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





А как насчет попрбовать использовать LDog с ArduinoIDE?

Для начала отредактируем файл boards.txt и добавим секцию LDog, созданную на основе Arduino NG or older w/ Atmega8. Меняем тактовую частоту и скорость, на которой bootloader принимает скетч. Измените 16000000L на 8000000L, а 19200 на 9600 или скачайте готовый файл. Не забудьте перезапустить ArduinoIDE, чтобы изменения вступили в силу.

Если содержимое памяти ATmega8 надо сохранить, самое время сделать это (вариант для программатора usbasp):

avrdude -C avrdude.conf -c usbasp -p m8 -U flash:r:ldog.hex:i



Для справки, значения fuses: LFUSE=0xff, HFUSE=0xd9.

Вот теперь можно смело зашивать bootloader через ArduinoIDE. После успешного завершения этой операции мы получили ArduinoCompatible-плату, и можем загружать в нее скетчи.

Итак, с точки зрения Arduino, у нас есть:
  • 3 универсальных цифровых пина: digital 11,12,13;
  • выход digital8 со светодиодом. Обратите внимание, что он притянут к VCC -  "зажигайте" его по команде digitalWrite(8, LOW). Одно непринужденное движение паяльника и мы лишеамся светодиода, но получаем еще один универсальный пин
  • 2 входа: digital2 и digital3;
  • выход digital14 с оптронной развязкой;
  • выход digital15 c оптронной развязкой и хексфетом.
Для проверки загрузите пример Digital|Blink и исправьте в самом начале значение ledPin c 13 на 8. Через 10 секунд после загрузки светодиод  должен начать мигать.

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

void setup() {
  pinMode(14, OUTPUT);
  pinMode(15, OUTPUT);
}

Подведем краткие итоги: устройство создано в России, в 2006 году, является закрытой коммерческой разработкой. Приобрести его можно и по сей день, за 1000 рублей (правда, сразу партией в 10 штук). Совместимость с Arduino кажется забавным и одновременно практичным фактом, позволяющим превратить LDog в то устройство, которое подскажет ваша фантазия (в пределах 8К flash, разумеется ;)

В статье использованы материалы сайтов liscom.ru, watchdogs.ru и фото из статьи журнала "Новости Электроники".

5 комментариев:

  1. В заметке написано "Adruino" , а не "Arduino". Такое слово, что сразу не поймешь. :) Интересный пример, позволяет разобраться в платформе.

    ОтветитьУдалить
  2. Да, очень интересный прибор. Не как расширитель Ардуино а как самостоятельный, неплохобы повторить и программку

    ОтветитьУдалить
  3. А как насчет похакать одно из многочисленых GSM сторожевых устройств, которые есть на рынке? Имеем ATmega+SIM300+выходы с реле.

    ОтветитьУдалить
  4. Ну, если попадет мне в руки - обязательно хакну ;)

    ОтветитьУдалить