HP-50g: основы работы с последовательным портом (COM)
В статье мы рассмотрим основы работы с последовательным портом для калькулятора HP-50g. Но вначале немного о том, что из себя представляет соединительный кабель, как его приобрести или изготовить самостоятельно.
Модели калькуляторов HP-50g оснащены последовательным COM-портом (RS-232), для которого, в отличие от прежней модели 48, производитель не поставляет в комплекте соединительный провод.
Силами сообщества пользователей под открытой лицензией был разработан кабель-адаптер (англ.), позволяющий соединять калькулятор с различными устройствами, имеющими соответствующий последовательный интерфейс управления. При этом калькулятор, если говорить в терминах сетевых устройств, может выступать как в роли клиента, так и сервера.
Кроме простого способа приобретения кабеля в магазине аксессуаров HP (англ.), открытая GPLv3 лицензия позволяет вам повторить конструкцию собственными силами, вооружившись необходимыми компонентами и паяльником, а также модернизировать её по своему усмотрению. Вот, например, принципиальная схема на базе микросхемы MAX232, которой радиолюбителю может оказаться достаточно для выполнения работы. С неё, собственно, и начался проект в свое время.
В конце статьи можно скачать полный комплект файлов для разработки схемы.
Необходимо также упомянуть об особенностях последовательного порта калькулятора.
- Поддерживаются соединения только по линиям Rx, Tx и GND
- Напряжение +/-5в (вместо обычных 12в)
Поскольку я посчитал, что 20 долларов за готовый кабель-адаптер - это более выгодно, чем покупка компонентов с последующим их монтажом и пайкой, то шнур был приобретен вместе с нуль-модемным переходником ("мама-мама"), позволяющим воткнуть его в порт компьютера. Если такого порта у вас нет, то подойдет и любой переходник USB-COM. Так как кабель нужен весьма ограниченному числу пользователей, он изготавливается небольшими партиями и может отсутствовать на складе. Например, во время заказа в начале марта я был уведомлен, что шнур будет доступен примерно к началу апреля. То есть, существует некоторая вероятность, что придется подождать недели 2-3. В реальности задержка составила 2 недели, посылка из Штатов в Европу шла 4 дня.
Далее примеры будут содержать маленькие скрипты на Питоне, который является стандартом де-факто для написания относительно простых программ подручными средствами под Linux. Если вы работаете с Windows, то вначале установите Питон или воспользуйтесь другими вами предпочитаемыми средствами, позволяющими считывать и записывать данные из последовательного порта. Например, можно и вовсе обойтись программой Hyperterminal, позволяющей отображать полученные из последовательного порта данные.
Пересылка строки из HP-50g на компьютер
Программа для HP-50g на UserRPL будет иметь очень простой вид
«
-33 CF @ Флаг "передача по проводу"
-78 SF @ Флаг "использовать последовательный порт" (а не USB)
9600 BAUD @ Скорость 9600 бод
0 PARITY @ 0 - без контроля четности
"HELLO" @ Строка для передачи
XMIT @ Отсылаем
-78 CF @ Возвращаем флаг "использовать USB"
»
На компьютере принимать ASCII-строку из 5 байт будет Питон-скрипт, я назвал соответствующий файл recv.py.
import serial
ser = serial.Serial(
port = '/dev/ttyS0',
baudrate = 9600,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS
)
s = ser.read(5)
print s
ser.close()
Для обладателей USB-переходника вместо "железного" COM-порта, значение параметра port будет примерно таким '/dev/ttyUSB0'. Подробнее см. статью о подключении HP-50g к компьютеру под Linux.
Под Windows то же значение будет соответствовать номеру реального или виртуального COM-порта, например port = 'COM1'.
Наконец, компьютер и калькулятор соединены кабелем. Теперь запускаем из командной строки recv.py, скрипт ждет приема.
python recv.py
На калькуляторе запускаем нашу программу пересылки строки.
Если все в порядке, то на экране калькулятора появится единица (или 0, если отправить строку не получилось), а на консоли компьютера появится слово HELLO.
Прием строки, посланной с компьютера
Программа приема несколько изменится
«
-33 CF @ Флаг "передача по проводу"
-78 SF @ Флаг "использовать последовательный порт" (а не USB)
9600 BAUD @ Скорость 9600 бод
0 PARITY @ 0 - без контроля четности
14 @ Длина принимаемой строки в байтах
SRECV @ Приём
-78 CF @ Возвращаем флаг "использовать USB"
»
На компьютере посылать строку будет скрипт send.py.
import serial
ser = serial.Serial(
port = '/dev/ttyS0',
baudrate = 9600,
parity = serial.PARITY_NONE,
stopbits = serial.STOPBITS_ONE,
bytesize = serial.EIGHTBITS
)
ser.write('Hello from PC!')
ser.close()
Теперь запускаем всё наоборот: сначала программу на калькуляторе, затем скрипт на компьютере. Если все сделано верно, то на экране HP-50g в нижней строке будет 1 (или 0 при ошибке), а во второй - полученный текст.
Конечно, показанные примеры достаточно примитивны и рассчитаны на начинающего. Однако, руководствуясь аналогичными принципами, изучив другие немногочисленные команды управления последовательным портом (BUFLEN, OPENIO и т.д.), вы сможете в дальнейшем не только реализовать установленные производителем того или иного устройства протоколы обмена, но и разрабатывать свои собственные.
Файлы разработки кабеля (архив TAR/GZ) - Design Files (source code and gEDA PCB and gerber files) (C)2007-2008 Allen Wan - licensed under GPLv3.
blog comments powered by Disqus