Продолжаем опыты над дешевым программатором USBasp,который можно научить работать как другое устройство.
Для программирования платы USBasp необходим другой программатор USBasp или Arduino в режиме программатора, но если мы хотим быстро сменить назначение платы на другое без дополнительных внешних программаторов ?
Тут придет на помощь проект USBaspLoader ,который позволяет программировать микроконтроллеры AVR без программатора,залив один раз специальный загрузчик.Для программирования необходимо поставить перемычку,которая подключена на свободный пин м/к.
К сожаленью существует и недостаток USB загрузчика - он занимает 2 кб flash памяти Вашего м/к .Получается ,что в нашем случае остается свободно для самой программы всего 6144 байт,но этого может быть достаточно для большинства проектов.
Установка загрузчика
Для начала скачаем прошивку-загрузчик,который адаптирован под схему USBasp и выберем через что будем его прошивать:
Команда через Arduino:
avrdude -c avrisp -P COM1 -b 19200 -p m8 -U flash:w:boot_m8.hex -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m -U lock:w:0x2f:m
Команда через другую USBasp:
avrdude -c usbasp -p m8 -U flash:w:boot_m8.hex -U hfuse:w:0xc0:m -U lfuse:w:0x9f:m -U lock:w:0x2f:m
Файлы avrdude,avrdude.conf и boot_m8.hex должны находится в одной папке,если в команде не указан конкретный путь.Программку avrdude можно найти по адресу в Arduino IDE - путь_к_папке_ардуины_/hardware/tools/
Теперь можно загружать прошивки без дополнительных программаторов.
Прошить загрузчик можно и через Arduino IDE,если файл загрузчика положить в папку hardware/arduino/bootloaders/atmega8/ .Для прошивки необходимо выбрать пункт ATmega8 USB 12 MHz в меню плат(см ниже по тексту как его добавить) и выбрать опцию в меню сервис "записать загрузчик".
Переключение в режим программирования
Для того,чтобы "залить" прошивку в устройство с установленным USBaspLoader необходимо установить перемычку JP3 ,которая переводит устройство в режим программирования и сбросить устройство ,замкнув контакт ближний к перемычке выбора питания(JP1) на перемычке JP2 на землю.
Слева на фото показан пример как подключается кнопка для сброса микроконтроллера с установленной перемычкой JP3 .Кнопка и разъем взяты из старого системно блока.
Теперь устройство видно в системе как USBasp и с ним можно работать как обычным программатором USBasp.
Прошивка микропрограмм
Прошивка программы ,используя USBaspLoader ничем не отличается от обычной прошивки микроконтроллеров через USBasp:
avrdude -c usbasp -p m8 -U flash:w:Имя_файла_для прошивки.hex
Обращаю внимание,что чтение и установка фьюзов не доступна - avrdude будет выводить нули.
Используем USBasp как макетную плату в Arduino IDE
Для бывшего программатора USBasp можно писать скетчи в Arduino IDE ,но к сожалению,без пайки нам будут доступны только 6 выводов микроконтроллера и 2 светодиода.
Добавляем поддержку Atmega8+USB ,дописав секцию в файл boards.txt:
atmega8usb.name=ATmega8 USB 12 MHz
atmega8usb.upload.protocol=arduino
atmega8usb.upload.maximum_size=6144
atmega8usb.upload.speed=19200
atmega8usb.bootloader.low_fuses=0x9f
atmega8usb.bootloader.high_fuses=0xc0
atmega8usb.bootloader.path=atmega8
atmega8usb.bootloader.file=boot_m8.hex
atmega8usb.bootloader.unlock_bits=0x3F
atmega8usb.bootloader.lock_bits=0x2F
atmega8usb.build.mcu=atmega8
atmega8usb.build.f_cpu=12000000L
atmega8usb.build.core=arduino
atmega8usb.build.variant=standard
Теперь в меню выбора плат появился пункт ATmega8 USB 12 MHz и скетчи сейчас можно заливать через меню файл - "прошить с помощью программатора".Не забываем в меню "программатор" выбрать USBasp.
Доступные цифровые выводы микроконтроллера на разъеме:
0,1,10(PWM),11(PWM),12,13. Можно воспользоватся интерфейсом SPI,например для подключения Ethernet ENC28J60.
А так же доступны цифровые выводы 14 и 15 для управления светодиодами на плате.
Можно задействовать и интерфейс USB ,используя библиотеку для Arduino V-USB.