Программирование Arduino, оживление микроэвм Электроника МК-90, аппаратный хакинг.
29.10.2010
SMPReaderUSB - frontend?
27.11.2009
SMPReaderUSB - финальная версия
Файлы:
- Для тех, кто
в морепод Windows: скачайте программу-инсталлятор, она установит драйвер, необходимые dll-ки и саму программу чтения/записи; - Полный архив с исходниками firmware и software, схемой и разводкой односторонней печатной платы в Eagle (последние под лицензией Creative Commons Attribution-Share Alike 3.0 Unported);
- Для тех, кто хочет изготовить печатную плату: файл eps (extended postscript). Загрузите его с разрешением 720 dpi в Photoshop или Gimp, что гарантированно даст качественный отпечаток.
- Чтение образа СМП: smpusb read -f filename.bin
- Запись образа СМП: smpusb write -f filename.bin
- Проверка батареи: smpusb voltage
- Скачать новое firmware с http://mk90.blogspot.com
- Отключить питание (отключить и от компьютера, и от СМП)
- Поставить джампер JP1 в положение PGM
- Подключить к компьютеру
- Запустить программу обновления:
smpreader_updater smpreaderusb_atmega8.hex - Вернуть JP1 в прежнее положение, отключить питание.
Как всегда, буду рад конструктивной критике и глупым, но грамотно сформулированным вопросам ;)
smallkaa в комментах уверял меня, что low speed bulk-transfer mode под Linux неработоспособен. Мне кажется, что это мнение все-таки устарело ;)25.10.2009
Печатная плата для SMPReaderUSB
30.09.2009
SMPReaderUSB в корпусе

Светодиод чтения записи - двухцветный, т.е. в одном корпусе сразу два кристалла, три вывода, общий катод. Очень удобно - не надо сверлить лишнюю дырку. А по смыслу - либо чтение, либо запись - одновременно не бывает ;)
Подумываю о печатной плате, а вдруг все-таки кому-то понадобится?
25.08.2009
Доступ к СМП по USB (2)
Вторая версия USB-устройства чтения-записи СМП/МПО Электроника МК-90.
В схему добавлен резистор 22К, притягивающий вход измерения батарейки к GND. Он позволяет избежать чтения "ерунды", когда пин висит в воздухе – теперь будет стабильный ноль.
Также я задался риторическим вопросом о том, стоит ли тащить в схему ICSP-разъем, если и так уже есть USB. Все, что требуется - это bootloader, который будет принимать новую прошивку через USB и прошивать ее во flash-память. С одной стороны - пустяк, может и не пригодиться, с другой - доступный способ обновления, не требующий программатора.
Итак, теперь управление всегда передается bootloader-у, который опрашивает джампер JP1. Пользователь аккуратно разбирает корпус устройства (при наличии такового ;), устанавливает джампер, подключает кабель USB. По установленному джамперу bootloader понимает, что грядет обновление прошивки и ждет данных для записи. Пользователь должен запустить отдельную программу smpreader_updater.exe с единственноым аргументом - именем hex-файла с новой прошивкой. После успешного завершения программы, надо отключить устройство от USB, снять джампер и завинтить обратно.

Бутлоадер был создан на основе релиза V-USB 20090415, а также проектов AVRUSBBoot и USBaspLoader.
AVRUSBBoot мне понравился экстремальной простотой и укомплектованностью host-программой – ну просто бери и пользуйся! Не тут-то было: с момента первого (и последнего ;) релиза прошло довольно много времени, поэтому пришлось обработать напильником: учесть особенности последнего стандарта C++, обновить морально устаревшее ядро V-USB, немного подкорректировать алгоритм проверки условия активизации и корректность выхода (позаимствовал идеи из USBaspLoader).
Увы, размер необходимой памяти программ с учетом bootloader-а вырос на 2К и составил более 4К. В таком варианте ATTiny2313 использовать уже не получится, ATmega48 – только если выкинуть код измерения напряжения батарейки. Поэтому, практически безальтернативно проект собирается на ATmega8-16PU.
Схема, исходники и бинарники: smpreaderusb_2.0.zip.
Файлов с прошивками теперь стало два: сначала надо прошить программатором smpreaderboot.hex, а уже потом через USB можно заливать smpreaderusb.hex. Подробные инструкции на английском языке в виде README-файлов заботливо разложены мной по подкатагам ;)
Кстати, собрал прототип на макетной плате под пайку, выглядит так:


Вместо двух отдельных светодиодов Rx и Tx я использовал один двухвыводной, токоограничительные резисторы R3, R4 и R5 имеют номинал 330 Ом.
К моему огорчению, по-прежнему отсутствуют:
- GUI, печатная плата
- инсталлятор (или хотя бы inf-файлы для драйверов)
- Makefile для консольной сборки
- поддержка Linux (пока – только потенциальная)
07.08.2009
Доступ к СМП по USB
Ключевые особенности разработанного устройства:
- совместимо с шиной USB 1.0;
- читает и записывает образы картриджа СМП;
- измеряет напряжение внутренней батареи;
- легко повторяется самостоятельно.
- читать содержимое СМП в файл
- записывать образ из файла в СМП с проверкой
- показывать напряжение батареи и предупреждать о разряде
- работать через интерфейс командной строки
- выводить сообщения на stdout (описаны все коды завершения)
- работать с с Windows XP, Vista, потенциально переносима на Linux
Как всегда, начинаю с результата: smpreaderusb_1.0.zip (исходники и бинарники firmware и software).
Схема:

Список деталей:
Part Value Device Package Library
C1 22 pF C5/2.5 C5B2.5 capacitor-wima
C2 22 pF C5/2.5 C5B2.5 capacitor-wima
C3 100 nF C5/2.5 C5B2.5 capacitor-wima
C4 47 uF CPOL-EUTT2D5 TT2D5 rcl
C5 100 nF C5/2.5 C5B2.5 capacitor-wima
D1 3V6 BZX55 DO35Z10 diode
D2 3V6 BZX55 DO35Z10 diode
D3 LM385-1.2 LM385-1.2 TO-92 lm385
IC1 MEGA8-P MEGA8-P DIL28-3 atmel
JP2 PINHD-1X6 1X06 pinhead
LED1 PWR LED3MM LED3MM led
LED2 RX LED3MM LED3MM led
LED3 TX LED3MM LED3MM led
Q1 12 MHz CRYSTALHC49U-V HC49U-V crystal
R1 10K R-EU_0204/7 0204/7 resistor
R2 68 R-EU_0204/7 0204/7 resistor
R3 1K R-EU_0204/7 0204/7 resistor
R4 1K R-EU_0204/7 0204/7 resistor
R5 1K R-EU_0204/7 0204/7 resistor
R6 68 R-EU_0204/7 0204/7 resistor
R7 1K5 R-EU_0204/7 0204/7 resistor
R8 1M R-EU_0204/7 0204/7 resistor
R9 22K R-EU_0204/7 0204/7 resistor
X1 PN61729 PN61729 con-berg
X3 PINHD-2X3 2X03 pinhead
Пояснения к схеме
Пояснения к работе с host-программой
Запустите команду чтения напряжения:
smpusb voltage
smpusb read –f mk90.bin
Соответственно, чтобы записать:
smpusb write –f mk90.bin
При записи и чтении горят соответствующие светодиоды RX и TX.
Возможные неприятности:
- отсутствие GUI
- нет печатной платы
- драйвер надо ставить отдельно
- недостаточная проработка вопроса совместимости c Linux
- не помешал бы консольный Makefile для сборки через nmake.
28.07.2009
Анонс

12.11.2008
У страха глаза велики
Пошел покупать новую батарейку, но элементов 2016 не было, взял от отчаяния 2025 и 2032. Они несколько толще, но я постарался и запихнул 2025. Тут выяснилось, что СМП вообще не работает - кажет все единицы. Причем, и в МК-90, и в программаторе.
"Подох", - подумал я и полез искать элементную базу (КА1835ВГ2, КА537РУ10Б) в интернет-магазинах. Что самое поразительное - нашел! Но прежде, чем нажимать на кнопку "отправить заявку", решил проверить последний раз - не установил ли я батарейку как-то криво.
Модуль великолепно заработал в калькуляторе со снятой батареей. Мораль: у страха глаза велики ;) Сижу, думаю - оформлять мне заказ на антикварные микросхемы завода "Интеграл" или нет... А вдруг придется ремонтировать, не дай Бог?
25.10.2008
15.10.2008
Собираем программатор СМП (2)


Теперь надо выбрать программу чтения-записи.
1. Для DOS: автор Piotr Patek, скачать исходник и программу
2. Для Linux: автор Tim N. Taspulatov, скачать исходник
Для работы надо выставить в BIOS параллельный порт в режим SPP ( иногда можно встретить вариант Bi-directional ), адрес 378h.
Откуда брать Linux, думаю знаю все ;) Симпатичный аналог MS-DOS под названием FreeOS можно скачать с http://www.freedos.org. Например, можно записать имидж загрузочного CD на болванку, а программы для калькулятора - на дискету (не надо ничего ставить на винчестер и править .iso-файл с образом).
Алгоритм проверки выглядит приблизительно так:
1. Отключаем от LPT-порта все устройства, загружаемся, запускаем READ.COM. Результат чтения всегда записывается в файл MK90.BIN. Обнаруживаем там сплошные нули.
2. Соединяем проводком 11 и 25 контакты разъема DB25, снова запускаем READ.COM. Теперь в MK90.BIN должны быть единицы (FF). Если мы дошли до этого места - LPT-порт сконфигурирован правильно, иначе надо вернуться назад и проверить настройки BIOS.
3. Подключаем программатор к LPT, запитываем схему от USB, картридж СМП пока не подключаем. Если машина при этом не ушла перезагрузку - значит шина питания не закорочена на общий, и это - уже хорошо ;) Снова читаем содержимое - там должны быть единицы (FF). В противном случае, ищите ошибку в монтаже.
13.10.2008
Собираем программатор СМП (1)
- С1-4 0.25 Вт, 5% 22 кОм - 8 штук
- С1-4 0.25 Вт, 5% 2.2 кОм - 4 штуки
- 2N3904 (КТ6137А) TO92 - 4 штуки
- DRB-25MA вилка на плату 25pin - 1 штука
- PLS-6R вилка штыревая 2.54мм 1х6 угловая - 1 штука
- USBB-1J розетка на плату, тип B - 1 штука
- Включить мультиметр в режим измерения сопротивления на предел шкалы 1 кОм, или в специальный режим, отмеченный значком диода.
- Сначала надо определить базу. Если проводимость транзистора n-p-n, то базой будет тот вывод, который "звонится" на два других при подключении к нему щупа с положительной ("+" то есть) полярностью испытательного напряжения (для транзистора p-n-p-типа - полярность обратная). Численные значения прямого напряжения на переходах будут равны: 400 – 800 мВ для кремниевых транзисторов; 100 – 300 мВ для германиевых транзисторов.
- При определении выводов коллектора и эмиттера можно придерживаться простой закономерности: прямое напряжение на переходе база-эмиттер (Б-Э) всегда на несколько милливольт выше прямого напряжения на переходе база-коллектор (Б-К).
05.10.2008
СМП для МК90 (2)
На первый взгляд, микросхем пять. Но хитрые (в самом хорошем смысле этого слова ;) белорусские инженеры решили сэкономить место и сделали два "бутерброда". Чтобы увидеть, надо заглянуть с торца:

Таким образом, на самом деле микросхем семь штук:
- КА1835ВГ2 - 1 шт, "Контроллер сменного модуля памяти для LZ1-11/23", зарубежных аналогов нет;
- КА573РУ10 - 5 шт, "Статическое ОЗУ (2К х 8, КМОП)", аналог HARRIS HM6504-9;
- КА1034НР3 - 1 шт, "Матрица резисторов"
Говорят, что существовали и модули постоянной памяти, буду благодарен любой информации о них. Благо, завод "Электроника" выпускал еще 1835ВГ3 - "Контроллер ЗУ для LZ1-11/23" и 1835ВГ7 - еще один "Контроллер сменного модуля памяти для LZ1-11/23".
Батарейка на 3В, этого вполне достаточно для хранения. Для контроля, она выведена на первый пин шины СМП (самый правый на фото):

Протокол взаимодействия описал Piotr Piatek в этой статье. Схему и программу для чтения/записи СМП через LPT-порт в режиме SPP можно найти здесь. Вероятно, попробую сделать что-то подобное самостоятельно.
Основные технические данные и характеристики МПО-10:
- Информационная емкость: 10 кбайт
- Максимальная скорость передачи данных: 25 кбайт/сек.
- Срок хранения информации а автономном режиме: 6 мес.
- Ток потребления в автономном режиме при Uпит=3В: 10 мкА
- Диапазон напряжения питания, при котором обеспечивается запись и считывание информации: 4.5-5.5 В
- Номинальное напряжение питания: 5 В
- Минимальное напряжение питания, при котром обеспечивается хранение информации: 2.6 В
- Габаритные размеры: 69.5 x 35 x 12.1
- Масса (не более): 29г.
04.10.2008
СМП для МК90
Для тех, кто начал смеяться и валяться по полу: внутри есть батарейка. Благодаря ей, данные будут сохраняться и после отключения от МК90. Со временем, батарейка разряжается, однако возможно провести замену таким образом, чтобы не потерять хранимые данные.
Каждый модуль заботливо упакован в картонную коробочку:

Для хранения предусмотрен пластиковый футляр с прозрачной откидывающейся крышкой - чтобы было видно надписи на корпусе модуля:

Очевидно, что со временем прозрачная крышка потеряет всякий контакт с корпусом и будет отваливаться (именно так и происходит с одним из моих футляров).
Разъем расположен на меньшей торцевой стороне:

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

На мой взгляд, это ставит под сомнение предположение, что на МПО изначально было что-то записано на заводе. По-моему, МПО изначально был пустым. Кстати, корпус вскрывается крайне просто, разнимаясь на две части. Внутри плата (незакрепленная):

Переворачиваем ее и находим литиевую батарейку ФЛ-2016, как правило полностью дохлую и датированную 90-ми годами прошлого столетия.

К счастью, эти таблеткообразные литиевые элементы выпускают до сих пор (я купил в MediaMarkt-е, по 35 руб. за штуку):

Судя по документации, батареи гарантированно хватает на 6 месяцев, но кто-то пишет про год. Так или иначе - менять придется регулярно.
Технология замены: для начала надо найти очень тонкую отвертку. Я использовал скальпель, поскольку ни одна из отверток, которыми я обычно разбираю КПК и сотовые телефоны, не подошла к этому шлицу:

Подготовьте тару или поддон для крошечного винтика, чтобы он не "сбежал" от вас: искать будете долго и с чувством, а за новым придется идти в часовую мастерскую.

Отверните один винт. Замените элемент питания-таблетку. Завинтите винт обратно (если отвернете второй - никакого выигрыша, просто придется потом мучиться с завинчиванием в два раза больше).
Теперь надо проверить, как это все работает. Выключайте калькулятор, снимайте крышку отсека СМП:

...и аккуратно вставляйте модуль. Можно использовать посадочное место 0 (на фото вставлен в 1 для наглядности):



Модуль должен плотно насадиться на разъемы в гнезде СМП.
Включаем питание, выходим в BASIC, набираем INIT. Это вызовет форматирования СМП в гнезде 0, и после этого команда FILES покажет, что СМП пуст. Отлично. Теперь наберем простейшую программу и сохраним ее:
10 PRINT "HELLO, WORLD!"
SAVE "HELLO"
Можете смело отключать калькулятор и отстыковывать модуль. Подождите секунд 10, и верните все на место. Команда LIST должна показывать, что память программ пуста. А вот FILES - наличие ранее сохраненного файла:
Справочник SM0
HELLO .BAS 1 4
<свободно> 15 5
Дальше можно написать LOAD "HELLO" и убедиться с помощью LIST, что программа загрузилась. Если это так, то работоспособность нашего модуля снова восстановлена!






