На данный момент времени я исследую один из самых дешёвых вариантов контроллера фирмы ATMEL — ATmega8A. Для него спаяна такая штука:




Среду Arduino IDE уже приспособил, программатором USBasp прошивается, прошит загрузчик, диод LED перепаян с pin0 на pin13, как в остальных arduin-ах. Подсоединил датчик трёх атмосферных параметров (температуры, давления и влажности), но скетч еле влез, причём который без библиотек работает. Программа заняла 98% памяти. был принято решение научиться программировать эти контроллеры на ассемблере. По совету в интернете выбрал родную студию — Atmel Studio 7. Установил тлько для 8-битных контроллеров, остальное пока не нужно. Нашёлся пробный скетч.





;********************************************************************
; Учебная программа Led_1.asm
; Мигание светодиода на RB0
; 8,0 мгц
;********************************************************************
.include "m8def.inc" ; Header files
.def temp=r16 ; Временный регистр
.equ Led=0 ; Светодиод
;********************************************************************
; Инициализация контроллера
;********************************************************************
.org 0x0000 ; Вектор сброса
rjmp reset ; процессора
;********************************************************************
reset:
;********************************************************************
; Установка указателя стека
;********************************************************************
ldi temp, low(RAMEND)
out SPL, Temp
ldi temp, high(RAMEND)
out SPH, Temp
;********************************************************************
; Настройка портов
;********************************************************************
ldi temp, 0b11111111 ; Все порты PВ
out DDRB, temp ; на выход
;********************************************************************
; Основная программа
;********************************************************************
main: sbi PORTB, Led ; включить Led
rcall Pause ; пауза 0,5 сек
nop ; выравнивающие
nop ; нопы
cbi PORTB, Led ; выключить Led
rcall Pause ; пауза 0,5 сек
rjmp main ; заново
;********************************************************************
; Пауза 0,5 сек
;********************************************************************
Pause: ldi r17, 21
ldi r18, 75
ldi r19, 187
delay: dec r19
brne delay
dec r18
brne delay
dec r17
brne delay
nop
nop
ret
;********************************************************************


При постройке проекта обнаружилось, что строку «.include "m8def.inc" ; Header files» нужно удалить, она как-то подключается и так. И изменить Led = 0 на Led = 5, что означает порт PB5 или pin13 на arduino. И вот сюрприз. В списке программаторов нет USBasp. Пришлось срочно искать способ.



Короче суть в том, что пришлось скачать avrdude, и настроить использование сторонней программы. Строка аргументов получилась такая:
-c usbasp -p atmega8 -B12 -U flash:w:$(ProjectDir)Debug\$(TargetName).hex:i

Короче скетч прошился из среды студии. Маленькая победа. В будущем, возможно лучше попробовать перепрошить сам программатор на один из предлагаемых студией. Всё, диодик мигает и тухнет по полсекунды. Ура!