Dnes budeme pokračovat vysvětlením příkladu z minulého dílu. Uvedeme si také možnosti, jak program dostat do procesoru. Uvidíte, že k cíli vede mnoho cest a že ne vždy nejdražší rovná se nejlepší…
Vysvětlení programu
.NOLIST
.INCLUDE "m16def.inc"
.LIST
Tak tuto pasáž jsme si již vysvětlovali. Vloží do programu soubor m16def.inc.
.CSEG ;kódový segment
.DEF REG=R16 ;pracovní regsitr
.EQU DDR=DDRC ;řízení směru
.EQU PORT=PORTC ;port
Tato část je Vám také určitě jasná, nejprve řekneme direktivou .CSEG, že následující část dat (programu) se bude nacházet v programové paměti. Dále si pojmenujeme registr R16 jako REG, registr DDRC (určení směru dat portu C) jako DDR a PORTC (data portu) jako PORT.
LDI REG,$FF
OUT DDR,REG ;aktivuj výstupy
Zde nejprve naplníme registr R16 (REG) samými jedničkami a poté registr překopírujeme do registru DDRC (DDR). Tím nastavíme všechny piny portu C jako výstupní.
LDI REG,LOW(RAMEND)
OUT SPL,REG ;nastav SP na konec SRAM
LDI REG,HIGH(RAMEND)
OUT SPH,REG
Tak tohle už znáte. Takto se nastavuje zásobník (na konec RAM).
CLC ;0 do C
Smaže CARRY, to nám zajistí 0 (rozsvícení LED) na tom výstupu, kam se bit z carry přesune.
LDI REG,$FF ;FF do REG
Nastaví všechny bity na portu C. Tím zhasne všechny LED.
SMYCKA: OUT PORT,REG ;pošli
RCALL CEKEJ ;počkej 0,5 s
ROL REG ;posuň
RJMP SMYCKA ;a znovu
Tato smyčka stále běhá dokola, ale vždy až po uplynutí 0,5 s (díky zpoždění volaném „CEKEJ“). Po každém čekání se hodnota v registru orotuje doleva. Nejvyšší platný bit se tedy dostane do CARRY a CARRY se přesune na nejnižší platný bit. Poprvé tedy 0. Na začátku smyčky se hodnota z registru přesune na registr portu, tedy změní se jeho stav (a stav LED).
CEKEJ: LDI R17,40
LDI R18,0
LDI R19,0
CEKEJA: DEC R19
BRNE CEKEJA ;smyčka 1
DEC R18
BRNE CEKEJA ;smyčka 2
DEC R17
BRNE CEKEJA ;smyčka 3
RET ;návrat
Zpožďování jsme si již vysvětlovali. Ale pro jistotu ještě jednou. Nejprve se cyklicky snižuje o jednu registr R19, až znovu dosáhne nuly. Pak se sníží o jednu registr R18 a znovu se v cyklu snižuje R19. Podobně je tomu i s registrem R17. Tedy: Zpoždění 255 × 255 × 40
Jak to dostat do procesoru
Předně musím upozornit, že programátorů pro procesory ATMEL AVR je opravdu mnoho. Jsou programátory:
- Paralení
- Těmi mi se zabývat nebudeme
- JTAG
- Slouží také pro ladění, povíme si o nich něco později
- ISP
- Ten budeme používat
Já osobně využívám ISP programátor připojený na paralelní port počítače postavený podle STK200:
- GeorgeB – elektronika, motocykl Jawa
- FOLCOM – aplikace GSM a SMS zakázková výroba HW a SW
- AVR ISP (STK200/300) parallel port interface
Možností je i zakoupení programátoru firmy Atmel například v GM. Tato možnost Vám přinese profesionálně vyrobený programátor, ale také relativně vysoké náklady. Velkou podporu nabízí také servery www.hw.cz a www.mcu.cz. Druhý jmenovaný obsahuje také fórum, kam se můžete obrátit, když Vám něco nechce pracovat tak, jak má.
Také server www.robotika.cz přináši zajímavé informace spolu s návodem na stavbu možná nejjednoduššího programátoru, co jsem viděl. Spolu s tím uvádí příklad na jednoduché aplikace procesoru ATMEGA8 (programy jsou psány v C a kompilovány v GCC). Dále jsou u článků uvedeny další zdroje, ze kterých můžete čerpat.
Software
Držím se zásady „Co je free, je pro mě“. A podle toho vybírám i software pro programování jednočipů. Musím říct, že v této oblasti asi nemá konkurenci PonyProg. Umí programovat nejen procesory AVR, ale také spoustu jiných obvodů a myslím, že stavbou programátoru pro tento prográmek rozhodně neprohloupíte.
Konfigurační bity
Nezapomeňte, že je před programováním třeba nastavit konfigurační bity (oscilátor aj.) Konkrétní nastavení závisí na konkrétním užití procesoru. Praktickou ukázku si předvedeme příště. Jestliže byste však chtěli minule uvedený program vyzkoušet naživo, v datasheetu procesoru najdete všechny potřebné informace v přehledných tabulkách.