Мне удалось заполучить LilyPad Arduino Main Board (полную историю про это читайте здесь), с микроконтроллером ATMega168V и способ быстро подключить его к СМП МПО-10. В итоге получилась читалка/писалка СМП через USB. Ингредиенты этого рецепта:
- Arduino Board
- Свободный USB-порт
- Вилка PLS-6R и 5 проводков для подключения СМП
- ПО: Arduino IDE, FTDI drivers, Perl с модулем Win32::API, модули Win32::SerialPort, Win32::CommPort
- Результаты моей работы - программа-sketch для Arduino Board + скрипт на Perl
Теперь разберем последовательно (по шагам):
1. Надо достать Arduino. Плата LilyPad Arduino Main Board попалась мне почти случайно, в основном я купился на возможность приехать с наличными и тут же получить товар. К ней необходим USB Serial Converter, который надо правильно соединить с Arduino 4-х пиновым кабелем минимальной длины. Если вам повезло, и в вашем распоряжении полноценная Arduino-совместимая плата, то к ней ничего не надо - там USB есть прямо на плате.
В моем случае, это выглядит так:
2. Подключите СМП к цифровым входам Arduino (номера pin-ов на СМП согласно картинке, а на Arduino они подписаны):
СМП | Назначение | Arduino | |
---|---|---|---|
2 | Vcc +5V | "+5V" | |
3 | CLOCK | Pin 7 | |
4 | DATA | Pin 6 | |
5 | SELECT | Pin 5 | |
6 | Gnd | "-" |
Замечание: батарею (1-ый пин СМП) никуда не подключаем, пины Arduino - цифровые (не путать с аналоговыми).
3. Скачайте и установите Arduino IDE. Попутно установятся драйвера USB-чипа и в системе появится виртуальный COM-порт, его номер надо запомнить.
4. Запустите Arduino IDE. При первом запуске надо установить номер COM-порта из п.3, а также тип платы. Теперь можно открыть исходник (или sketch, "набросок") с моей программой чтения/записи СМП (sketch_081102b.pde в отдельном подкаталоге). Откомпилируйте (клавиша со стрелкой) и загрузите результат в Arduino (нажать кнопку сброса на плате, не позже 5-ти секунд после этого - датйте Arduino IDE команду Upload). Если все в порядке, микропрограмма стартует и зажжет на Ardino тестовый светодиод (подключен к 13-му цифровому выходу).
5. Установите Perl. Для Windows можно воспользоваться дистрибутивом ActiveState Perl. Установить модуль Win32::API через ppm. Далее скачать со CPAN Win32::SerialPort, распаковать в текущий каталог (на всякий случай, я включил его в архив с моей программой).
6. Впишите номер COM-порта (см. п.3) в мой скрипт (в самом начале, переменная $com_number). Например, если у вас FTDI-драйвера "уселись" на COM13, пишите $com_number = 13;
7. Подключите СМП к Arduino, затем Arduino к USB.
8. Запускайте скрипт:
arduino_smp.pl read MK90.BIN
Если все нормально, то через несколько секунд вы получите файл с бинарным имиджем СМП, который можно подключать к эмулятору МК90. Если вместо read написать write, то файл будет записан и прочитан для проверки. Запускать ее до готовности Ardino не имеет смысла, а если прервали по Ctrl-C - не забудьте сбросить Arduino, все-таки sketch крайне примитивный.
Я экспериментировал на скорости 38400, это можно изменить. Меняйте константы в скрипте и в sketch-е одновременно (устанавливайте одинаковые скорости!). При написании sketch-а использованы исходники программы чтения/записи by Piotr Piatek (правда в одном месте пришлось поправить), за что ему отдельное спасибо, потому что, на самом деле, я просто адаптировал его работу для Arduino.
Печатные платы, схемы, библиотеки и загрузчики Arduino - свободные и открытые, собрать можно и на макетной плате, без пайки. Следовательно, кому захочется - шанс повторить есть.
делаю всё по инструкции, использую freeduino serial 2.0
ОтветитьУдалитьНе получается ни считать, ни записать. В чём может быть проблема? смп исправный вроде
Трудно сказать. А что на входящих от СМП линиях? При чтении хоть что-то меняется?
ОтветитьУдалитьпри чтении создаётся пустой bin, arduino при запуске скрипта на чтение/запись перезагружается
ОтветитьУдалитьВот что скрипт пишет:
C:\Users\Wersety\Desktop\arduinosmp>arduino_smp.pl write SMP0.BIN
Arduino SMP Reader/Writer v1.0
Current COM1 settings: B = 38400, D = 8, S = 1, P = none, H = none
Ну, то, что оно перезагружается - понятно. Порт открывается, дергается DTR.
ОтветитьУдалитьСоветую perl-овый скрипт под отладчиком пройти - perl с ключом -d.
Через отладчик заработал, пишет/читает. Спасибо!
ОтветитьУдалитьЗначит, Arduino не успевает стартовать после сброса, прежде чем PC начинает обмен... Это можно решить задержкой после открытия порта или сделать протокол обмена более интеллектуальным.
ОтветитьУдалитьКаюсь :( Вместо доработки я просто сделал SMPReaderUSB.