Главная  

Как сделать AVR-ISP?

Все просто смотрим HELP в AVR Studio. Находит там схему оригинального AVR-ISP. И что мы видим. Стоят микроконтроллеры, снятые с производства (AT90S1200 и T90S8535). Как быть, где их брать? Хорошо если у кого-то в загашнике завалялись эти чипы и можно их позаимствовать. А если нет? Все очень просто! Контроллер AT90S1200 используется лишь для апгрейда программного обеспечения AT90S8535. А AT90S8535, как раз и играет важную роль - он и явсляется программатором. Так вот, наши действия. Находим Application Note AVR910, например на сайте www.atmel.com. Там приводится программатор поддерживаемый AVRProg (входит в пакет AVR Studio) или AVROSP (из Application Note AVR911). Как раз то, что приведено в AVR910 и является содержимым AT90S1200, установленным в AVR-ISP. Вот, у нас есть кое-какие исходники. Теперь приобретаем современные контроллеры ATtiny2313 и ATmega8535L. Далее дорабатываем программу из AVR910 под ATtiny2313.Добавим еще одну переменную она понадобится в функции Leave programming mode для записи последней страницы памяти

.def flag = r15

Добавим инициализацию указателя стека, т.е. по метке reset ввести cтрочки

ldi temp1, RAMEND

out SPL, r16

ldi temp1, 0

mov flag, temp1 ; инициализация нашей новой переменной

Надо еще учесть, что шить мы им будем ATmega8535L, а не AT90S8535. Поэтому надо еще кое что доработать. Находим функцию

;**** Write Program Memory, High Byte ****

w8:

и перед строкой

rjmp writeFLASHdelay

добавляем следующие строки

ldi temp1,1

mov flag,temp1

mov temp1, addrl

andi temp1,0b00011111

brne aaa

ldi s_data,0x4c ; wrser(0x4c); // SPI write (byte 1)

rcall wrser

mov s_data,addrh ; wrser(addrh); // SPI write (byte 2)

rcall wrser

mov s_data,addrl ; wrser(addrl); // SPI write (byte 3)

rcall wrser

ldi s_data,0x00 ; wrser(0x00); // SPI write (byte 4)

rcall wrser

ldi temp1,0xff ; delay(0xFF); // 0x20 = 24585 cycles

delay

rcall delay

aaa

Эта доработка необходима т.к. AT90S8535 имеет быйтовую организацию памяти, а ATmega8535L - страничную и в конце заполнения буфера страницы небходимо послать команду записи страницы памяти.

и последнее что надо изменить это вместо .include "1200def.inc", в начале программы, вписать .include "tn2313def.inc"

И дарабатываем функцию Leave programming mode. Для этого находим следующие строки

;**** Leave Programming Mode ****

w14:

cpi u_data,0x4c ; 'L' Leave programming mode

brne w15

ddrb_release

set_reset ; set RESET = 1

rjmp put_ret

;**** Chip Erase ****

И перед строкой

ddrb_release

Добавляем следующий текст

ldi temp1,1

cp flag,temp1

brne release

ldi s_data,0x4c ; wrser(0x4c); // SPI write (byte 1)

rcall wrser

mov s_data,addrh ; wrser(addrh); // SPI write (byte 2)

rcall wrser

mov s_data,addrl ; wrser(addrl); // SPI write (byte 3)

rcall wrser

ldi s_data,0x00 ; wrser(0x00); // SPI write (byte 4)

rcall wrser

ldi temp1,0xff ; delay(0xFF); // 0x20 = 24585 cycles delay

rcall delay

release

ldi temp1, 0

mov flag, temp1

Компилируем полученный файл. И зашиваем его в ATtiny2313 при помощи какого-либо другого программаторы (например с этого сайта - USB-Programmer (оконное приложение) или AVReal(консольное приложение можно поискать при помощи google). Настраиваем FUSE-биты (BOD лучше настроить на 2.7 В дабы была возможность программировать контроллеры с низким напряжением питания).

Для прошивки ATmega8535L, при помощи только что собранного программатора, будем использовать AVRProg из пакета AVR Studio. Выбираем контроллер AT90S8535 (что бы обмануть AVRProg). Выбираем файл обновления ..\\Program Files\Atmel\AVR Tools\STK500\STK500.ebn (это там где установлена AVR Studio) и прошиваем ATmega8535L. Далее запускаем AVROSP и настраиваем FUSE-биты ATmega8535L. Выбрать тип кварцевого резонатора, установить бит совместимости AT90S8535 и настроить BOD на 2.7 В. Вот и все теперь микросхему ATtiny2313 можно использовать где-нибудь в другом месте, т.к. она теперь здесь больше не нужна. Да, ATtiny2313 лучше изначально вообще не распологать на плате, а собрать на отдельной макетнице. Еще одно замечание. В оригинальной схеме изпользуется преобразователь уровней RS232 <-> TTL на транзисторах, я бы для этих целей порекомендовал бы использовать специализированную микросхему, например ADM3202 (Analog Device).

Теперь вы являетесь счастливым обладателем оригинального AVR-ISP.

Удачи :-)

Форум
Скачать
Сcылки
 
Яндекс.Метрика
Используются технологии uCoz