AVR/Arduino from the Scratch
AVR/Arduino From Scratch
Kad se kupi novi AVR 8-bitni mikrokontroler, on dolazi potpuno prazan. U njemu nema npr. Arduino bootloadera i zato nam treba elektronički sklop koji ga može programirati od nule.
Odabrali smo za početak DASA (direct AVR serial adapter) kompatibilni programator zbog toga što je najjednostavniji. A vjerojatno i najsporiji kad ide preko običnog usb2serial adaptera. Brzina se postiže originalnim PC serijskim portom ili neobičnim usb2serijskim adapterom sa custom firmwareom za stk500v2 protokol.
DASA može sflashat bilo koji image u AVR, a možemo i postaviti fuse bitove, pogotovo je interesantan "disable reset" bit nakon kojega se AVR više neće moći programirati sa DASA (to je neka vrsta write protecta a ni reset više ne radi).
Ali može ga se vratiti sa HVP, što bi uskoro moglo biti k'o stvoreno za naš slijedeći projekt. Nakon što disableamo resete na svim našim AVR-ovima trebaće nam ovo: AVR High Voltage Serial Programmer
Davorova part lista:
Moja shema za dasa-kompatibilni programator (direktno AVR serijsko programiranje) treba:
Osnovni alat:
- kliješta za skidanje izolacije, blankirke
(Vedran si je kupio neka za 124.01 kn u Chipoteci, Davor kaže da može i jeftinije)
- univerzalni instrument za provjeru napona i spojeva (bitno da mjeri volte i ome)
- RS232 serijski port (može i USB2Serial adapter, 90kn u Chipoteci)
- linux
- uvijek dobro dođe oprema za lemljenje (lemilica kupljena za hacklab za 41.89 kn), tinol (24.64kn 100g), mokra spužvica (oko 1kn, došla sa stalkom za lemilicu koji košta 27.22kn))
Dijelovi:
- 5 otpornika od 390Ω (oma) za DASA, otpornik 470Ω-1kΩ za LED diodu
- 5 zener dioda 4.7V (bilo koja mala, npr. BZX 4V7)
- 5 schottky dioda (bilo koja mala schottky, npr BAT43),
- 1 običnu diodu (bilo koja za više od 200mA, npr 1N4007)
- 1 solid state kondenzator (blok 0.1uF ili veći, recimo tantal 1uF/15V)
- stabilizirani izvor napajanja od 5V (može charger za mobitel od 5V, USB kabel za napajanje ili stabilizator 7805 i nekakav izvor istosmjerne struje npr charger između 7-12V)
- DB9 ženski konektor za RS232
- Konektor za napajanje (power jack ili sl.)
- protoboard (pikalica, ikebana, breadboard) (77.28 kn u Chipoteci),
- puna tanka izolirana zica 2-3m da to spojimo (ok je UTP kabel sa punom žilom, ali neki s malo većom debljinom je još bolji za naš breadboard),
- i bilo koji AVR ćemo sprogramirat s time
- dodao sam par LED dioda za testiranje
Shema sa štampanom pločicom
se otvara sa programom eagle (apt-get install eagle), ali imamo i Shemu u PDF.
Na lijevom dijelu je stabilizator napajanja 7805 - može se zamijeniti sa gotovim
stabiliziranim izvorom 5V/150mA (charger za mobitel 5V, napajanje 5V iz USB porta
kompjutera ili USB chargera, može više mA samo ne više V ili baterija od 4.5V recimo
3x1.5V). Kondenzator 1uF solid state spojiti blizu na AVR-ov VCC (+) i GND (-),
po mogućnosti ne predugim žicama i paziti na polaritet. Na kondenzatoru piše
mali (+) pokraj izvoda koji ide na (+).
Desni dio, tj. onaj koji ide iz serijskog porta spojiti na svoj model AVR-a
(naći MISO, MOSI, SCK, RESET, VCC i GND na datasheetu). Obratiti pažnju da AVR-ovi
često imaju dva VCC i dva GND - sve ih treba spojiti na plus (+) i minus (-) napajanja.
Većinom radi bez schottky dioda, ovisno o serijskom portu i vodljivom naponu zener dioda
(oko 0.6-0.7V), ali...
Negativni napon na pin-u AVR-a veći od -0.7V u kombinaciji sa jakim 5V napajanjem može
dovesti do tiristorskog efekta na substratu chipa -> svi pinovi AVR-a postanu vodljivi ->
povuče jaku struju iz napajanja -> pregrije se -> ispusti famozni Bijeli
Dim, od kojeg su sve komponente napravljene. Zato su schottky diode sa
svojim naponom manjim od 0.3V veoma korisne.
30.10.2009 napravili smo dva sistema na 2 protoboard-a: Jedan sa attiny84, jedan sa atmega16.
ATMEGA16 datasheet (23.41 kn u Chipoteci): http://www.atmel.com/dyn/resources/prod_documents/doc2466.pdf
ATTINY84 datasheet (nema ga u ZG za kupit, možda netko može nabavit): http://www.atmel.com/dyn/resources/prod_documents/doc8006.pdf
Softverski dio priče:
apt-get install gcc-avr avr-libc avrdude
Hello world AVR svijeta (blinkenlights LED na pinu PB0):
#include <avr/io.h>
#include <stdlib.h>
#define LED (1<<PB0)
void main()
{
int i;
unsigned char t = LED;
DDRB = t;
for(;;)
{
PORTB = t;
t ^= LED;
for(i = 0; i < 10000; i++);
}
}
- spajanje AVR-a po shemi i spajanje na serijski port i 5V napajanje
- spojiti LED diodu u seriju sa otpornikom tako da ide: PB0 -> otpornik 470Ω -> LED -> gnd.
- Skinuti blinkenlights za atmega8
za ATMEGA8 ili za ATMEGA16 ili za ATTINY84 i spojiti ga prema fajlu connections.txt
- ako želimo brojač zapisivanja u AVR flash, mkdir -p ~/src/avr/ && touch ~/src/avr/.upload_counter
- make (nakon modifikacija led.c fajla)
- make led.au za upload na AVR (modificirajte Makefile za podešavanje serijskog porta, vrste mikrokontrolera (atmega8 npr.), vrste programatora (naš je dasa) itd)
- make led.av za naknadni verify bez uploada
evo kako to izgleda sa ATMEGA16:
ili ATTINY84 ovako:
i ATMEGA8 radi sa schottky diodama ovako:
Slični projekti:
http://itp.nyu.edu/physcomp/Tutorials/ArduinoBreadboard#toc9 - ali mi ne trebamo AVR programmer! (naravno mi još moramo riješiti kako pričati sa AVRom nakon što smo stavili softver, tj dobiti podatke iz njegove memorije.
Evo što se još može napraviti sa AVRom (Atmega644):
http://rossum.posterous.com/avr-homebrew-device-with-iphone-aspirations
Zanimljiv link na usenet diskusiju:
USBasp - USB programmer for Atmel AVR controllers http://www.fischl.de/usbasp/