04 jaanuar 2013

Arduino bootloader ATmega1284P mikrokontrollerile

Levinuim mikrokontrolleri tüüp Arduino arendusplaatidel on ATmega328P, näiteks Arduino UNO komplektis. Mahukamate projektide puhul võib jääda 20-st sisse-/väljaviigust või 32 KB programmeeritavat flash-mälust puudu. Suurepärane lahendus probleemile on ATmega1284P.

Põgus võrdlus:

Omadus
328P (UNO)
1284P
2560 (Mega)
Flash-mälu
32 KB
128 KB
256 KB
SRAM
2 KB
16 KB
8 KB
EEPROM
1 KB
4 KB
4 KB
UART
1
2
4
I/O-viigud
23
32
86
Analoogsis.
6
8
16


Mida on vaja, et ATmega1284P maketeerimisplaadil käima ajada?


Bootloaderi laadimiseks pole tegelt isegi kvartsi vaja külge ühendada.

  • 6. klemm ühendada Arduino-plaadi 11. klemmiga
  • 7. klemm ühendada Arduino-plaadi 12. klemmiga
  • 8. klemm ühendada Arduino-plaadi 13. klemmiga
  • 9. klemm ühendada Arduino plaadi 10. klemmiga, läbi 10K takisti 5 V liini külge JA läbi 100 nF kondensaatori GND liini külge
  • 10. klemm ühendada otse 5V liini külge
  • 11. klemm ühendada otse GND liini külge
  • 12. ja 13. klemmid ühendada 22pF kondensaatoritega GND liini külge ja nende vahele ühendada kvarts
  • 2. klemmi külge võib katsetamisteks ühendada LED-pirni anoodi, katood läbi sobiva takisti maaliinile


Seletame lahti ka!

Arduino klemmid 11, 12, 13 (1284 puhul klemmid 6, 7, 8) esindavad SPI-liidest. Nende nimetused on vastavalt MOSI, MISO ja SCK. Tegu on kahesuunalise sünkroonse andmesideühendusega. Ühenduse algataja on alati üks keskne seade (nn Master). Iga alluva seadme (nn Slave) jaoks on lisaks veel üks signaalikanal, mida nimetatakse näiteks SS (Slave Select) või CS (Chip Select).

ATmega1284P 9. klemm on reset. Kuna tegu on madalaktiivse klemmiga, siis normaalolekus peab tema tase olema kõrge. Just selleks puhuks on ta ühendatud läbi 10K takisti 5 V liiniga. Arduino 10. klemmiga ühendatakse ta seepärast, et selle kaudu tehakse talle bootloaderi laadimise ajal õigetel ajahetkedel restarte. Kondensaator GND liini ühendatuna on selleks, et eirata Arduino UNO automaatse reseti funktsiooni. Selle nipi väljaselgitamine võttis mul päris tükk aega.

ATmega1284P klemmid 10 ja 11 on vastavalt VCC ja GND.

Klemmid 12 ja 13 on kvartsi jaoks. Nende vahele läheb kvarts ise, mõlemad klemmid tuleb ka 22pF kondendaatorite abil maaga ühendada. Tegelikult öeldakse, et bootloaderi laadimise ajaks seda vaja pole, sest 8 MHz ostsillaator on kõikidele AVR-idele sisse ehitatud, see pole lihtsalt nii täpne kui on väline kvarts ja ei kasuta mikrokontrolleri potentsiaalist pooltki ära. Kvartsi valikust sõltub ka bootloader - erinevate sageduste jaoks erinev.


Järgnevalt - tarkvara!

Bootloaderiks kavatsesin kasutada Mighty 1284P. Lingil toodud ZIP-fail tuleb alla laadida ja arduino hardware kataloogi lahti pakkida. Kõigest täpsemalt on juttu ka maniacbug'i enda blogis. Kuna olin ise endal elu raskeks teinud ja hoopis 20 megahertsise kvartsi ostnud, leidsin asjakohast abi Arduino foorumist.

Nüüd veendu, et Arduino-plaat oleks USB-ga arvutiga ühendatud ja ava Arduino IDE. Vali File -> Examples -> ArduinoISP.
Arduino kodulehel ArduinoISP juhendis on välja toodud, et 1.0 tarkvara puhul on vaja heartbeat() funktsioonis asendada "delay(40);" rida reaga "delay(20);". Minul on see 92. rida.
Veendu, et Tools -> Board, Serial Port ja Programmer oleksid seatud õigeks. Hetkel võiksid need olla vastavalt näiteks Arduino Uno, /dev/ttyUSB0 ja AVRISPmkII.
Vajuta Upload-nuppu ja oota kuni see on lõpule viidud.

Kui veateateid ei tekkinud, siis

  • Tools -> Board - "Mighty 1284p 16MHz using Optiboot"
  • Tools -> Programmer - "Arduino as ISP"
  • Tools -> Burn Bootloader

... ja oota paar minutit, kuni asi rahuneb. Sellega peaks bootloader ATmega1284P peale laetud olema. Järgmine samm on programmikoodi laadimine. Tulekul!

Kommentaare ei ole:

Postita kommentaar