- А что дальше?
- Как сделать из прототипа законченный продукт?
- Смогут ли им пользоваться другие люди?
- Зачем мне вообще всё это?
Программирование Arduino, оживление микроэвм Электроника МК-90, аппаратный хакинг.
24.11.2013
ARCAdaptor или Игра в Продукт
09.07.2011
MKBoard R1
- добавлен светодиод L на выводе 13. Думаю, все, кто работали с Arduino / Freeduino согласятся, что он в 85% случаев оказывается полезным;
- для защиты от перегрузки по питанию от USB, добавлен самовосстанавливающийся предохранитель 0,5А. Современные материнские платы почти всегда им снабжаются, но а) так надежнее б) о коротком замыкании при малейшем подозрении можно узнать просто прикоснувшись к этому фьюзу пальцем: он будет горячим;
- добавлена вилка ICSP - и это не только для программатора: хорошие версии Shield-плат, например EtherSD Shield, именно оттуда берут сигналы SPI;
- добавлены дополнительные дублирующие отверстия для цифровых пинов, расположенные строго на сетке 2,54 мм. Это значит, что при желании можно обойтись кусочком обычной макетной платы, а не искать протошилд;
- все сигналы имеют двойную нумерацию (для Arduino и для ATmega), а также маркировку с обоих сторон платы.
ATmega8:
avrdude -c stk500v2 -P avrdoper -p m8 -B 3 -e -u -U lock:w:0x3f:m -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m
avrdude -c stk500v2 -P avrdoper -p m8 -B 1.1 -U flash:w:atmega8_16MHz.hex -U lock:w:0x0f:m
ATmega168:
SYSFS{idVendor}=="16c0", SYSFS{idProduct}=="05dc", MODE="0660", GROUP="users"
sudo adduser [username] users
restart udev
Выберите из примеров старый добрый blink и загрузите его привычным способом - Ctrl+U. Если все нормально - светодиод L начнет мигать.
Пользователи Linux могут поинтересоваться о наличии устройства с VID = 16c0 и PID = 05dc через lsusb, а пользователи Windows - через диспетчер устройств. В случае проблем, проверьте еще раз, что:
- вы правильно спаяли плату - при подключенной шине USB и в положении джампера JP5 1-2, прикоснитесь к предохранителю F1 - он не должен быть горячим;
- вы правильно запрограммировали ATmega, особенно фьюзы;
- вы вставили ATmega правильной стороной, соблюдая ключ;
- вы действительно замкнули джампер "Upload" (который рядом с кварцем);
- вы нажали после этого на сброс.
И учтите - USB-соединение активно только во время работы бутлоадера, поскольку тот содержит в себе V-USB. Загруженному скетчу, к сожалению, это недоступно - весь обмен по Serial будет происходить через пины RX и TX (или digital1 и digital0), которые ни к чему не подключены.
В заключении по поводу бутлодера: я его немного модифицировал, чтобы он моргал светодиодом L при активизации. Если вы взяли стандартный USBasploader, то там никакой "цветомузыки" не ожидайте.
Исходники проекта можно скачать у меня или на github: https://github.com/mk90/MKBoard.
Готовую плату MKBoard или кит для самостоятельной сборки можно купить здесь.
10.11.2010
V-USB module
21.07.2010
AVR-Doper

15.07.2010
V-USB жив!
- совместимость для новых МК с суффиксом "P" - например, ATmega328P
- поддержка устройств, у которых более 64К флеша через USB_CFG_DRIVER_PAGE
- теперь надо обязательно определять USB_CFG_CLOCK_KHZ в usbconfig.h
- мелкие фиксы
19.11.2009
LibUSB
I. Windows
- *.inf - файл описания установки драйвера
- *.cat и *_x64.cat - здесь должны быть цифровые подписи драйверов, но для этого надо быть сертифицированным Micro$oft-ом. А без этого придется увидеть предупреждение о том, что Windows "с камнем на сердце так и быть, заинсталлирует какой-то непонятный драйвер без подписи".
[Files]
Source: "driver\*.sys"; DestDir: "{app}\driver"
Source: "driver\*.cat"; DestDir: "{app}\driver"
Source: "driver\*.dll"; DestDir: "{app}\driver"
Source: "driver\*.inf"; DestDir: "{app}\driver"
Source: "driver\*.dll"; DestDir: "{win}\system32"; FLags: replacesameversion restartreplace uninsneveruninstall
[Run]
; invoke libusb's DLL to install the .inf file
Filename: "rundll32"; Parameters: "libusb0.dll,usb_install_driver_np_rundll {app}\driver\MyCoolDevice.inf"; StatusMsg: "Installing driver (this may take a few seconds) ..."
II. Linux
В linux все выглядит схожим образом, но немного проще. Проверьте в вашем менеджере пакетов, установлен ли libusb, например для Debian/Ubuntu/etc:
dpkg -l | grep libusb
Если нет, можно поставить:
sudo apt-get libusb-0.1-4
Для разработки программ потребуется установить девелоперский пакет libusb-dev:
После этого можно компилять, указывая необходимость линковки с libusb:
gcc -lusb myproject.c
Для разработчиков пакетов надо позаботиться о зависимости, например в файл debian/control добавить правило Depends:
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 (пока – только потенциальная)
23.08.2009
Новый V-USB
- исправлена бага определения End Of Packet в режиме 16.8 МГц;
- исправлена бага с битстаффингом и рассинхронизацией в режиме 16.0 МГц;
- дескриптор конфигурации чуть подкорректирован для USB 1.1, чтобы был установлен старший бит в bmAttributes (там, где флажок SELF_POWERED);
- процедура подсчета CRC заменена на более быструю - но по-прежнему, необходим кварц 18.0 МГц.
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.
08.06.2009
USBasp

Ради интереса решил повторить на макетке:

По моим впечатлениям, обмен идет гораздо быстрее, чем с AVR910 от prottoss-а.
По причине прямой поддержки со стороны avrdude ( >= 5.2.0), программатор можно использовать с Arduino IDE. Для этого надо дописать несколько строк в файл arduino-0016\hardware\programmers.txt:
usbasp.name=USBasp usbasp.communication=usb usbasp.protocol=usbasp
После этого появляется соответствующее меню в ArduinoIDE:

Работает, что характерно ;)
Традиционные минусы дешевого программатора:
- не умеет питаться от программируемой схемы
- нет предохранителя на линии питания USB (ну, это легко добавить)
03.06.2009
Metaboard
Процессор: ATmega8/88/168/328P
Тактовая частота: 16МГц
Совместимость с Shield-платами: нет
Совместимость с Arduino IDE: есть, неполная
Страница проекта: http://metalab.at/wiki/Metaboard



Однако, не спешите радоваться :( В этой жизни за все приходится расплачиваться.
Скачайте и распакуйте bootloader: http://www.obdev.at/products/vusb/usbasploader.html.
Нам потребуется hex-файл firmware\hexfiles\mega8_16mhz.hex, поместим его в дерево файлов Arduino IDE, в каталог arduino-0015\hardware\bootloaders\atmega8\.
Поскольку этот bootloader работает не по протоколу stk500, то придется заводить отдельную секцию в boards.txt:
meta8.name=Metaboard w/ ATmega8 meta8.upload.protocol=usbasp meta8.upload.maximum_size=6144 meta8.upload.speed=19200 meta8.bootloader.low_fuses=0xdf meta8.bootloader.high_fuses=0xc8 meta8.bootloader.path=atmega8 meta8.bootloader.file=mega8_16mhz.hex meta8.bootloader.unlock_bits=0x3F meta8.bootloader.lock_bits=0x0F meta8.build.mcu=atmega8 meta8.build.f_cpu=16000000L meta8.build.core=arduino
13.03.2009
AVR910 на макетке



- prottoss.com - описание программатора AVR910 от Андрея Рыжкова aka prottoss
- Objective Development - проект драйвера low-speed USB для avr
- Osamu Tamura - Using Low-speed Bulk Transfer on Windows Vista
- Arduino - решение для быстрой прототипизации электронных схем



















