Uvod v programiranje AVR mikrokontrolerjev
Domen Puncer (domen@coderock.org)
1 Uvod
Dokument je namenjen vsem, ki so se vedno želeli ukvarjati z mikrokontrolerji, pa ne vedo kako začeti.
Čeprav mogoče malo površno, opisuje vse kar je potrebno za osnovni projekt.
2 Predpostavke
Avtor predpostavlja, da bralec pozna vsaj osnove programskega jezika C in da je na njegov računalnik možno inštalirati AVR toolchain (je možno v Linux distribucijah, verjetno tudi pod Cygwin v Microsoft Windows, v *BSD in Mac OS). Računalnik mora imeti paralelna tiskalniška vrata (aka LPT).
3 Potrebščine
3.1 Hardware
- Atmelov AVR mikrokontroler (at90s, atmega, attiny... kar pač podpira GCC)
- quartz kristal in dva 20 pF kondenzatorja, v primeru, da mikrokontroler nima vgrajenega oscilatorja (glej datasheet)
- plastična testna plošča (breadboard)
- Moški Sub D 25 konektor
- pol metra 6-žilnega kabla, UTP ali kaj podobnega
- LED
Najdražja pride testna plošča, 4 do 8 Eurov, ampak je vredna vsakega tolarja. Ostale komponente skupaj so okrog 4 Eurov, če ne vzameš prehudega AVR-ja.
3.2 Software
- binutils preveden za AVR
- gcc preveden za AVR (in po potrebi s patchem kot je
gcc-3_4_0-avr-new-devs.patch)
- avr-libc
- uisp
Uporabniki Slackware distribucije lahko pakete downloadajo z
ftp://nd47.coderock.org/packages/slackware-10.2/, ostali naj se znajdejo ;-).
4 Programator
Ena od vrlin AVR-jev je enostavni programator. Sestavljen je iz žic.
V izvorni kodi uisp je dokument uisp-parport-connect.txt, ki opisuje kako povežeš LPT z AVR-jem:
Connect AVR with parallel port
AVR Parallel Port
Signal name Pin Pin Signal name
GND 20 ------------ 19 GND
GND 20 ------------ 21 GND
SCK 8 ------------ 1 Strobe
MOSI 6 ------------ 2 Data 0
MISO 7 ------------ 11 Busy
Reset 9 ------------ 16 Init
Copyright (C) 1998 by Alexey Lapshin and Sergey Larin.
Če uporabljaš AVR brez internega oscilatorja (ali pa z disejblanim), ga je treba dodat programatorju.
V jedru rabiš podporo za CONFIG_PARPORT, CONFIG_PARPORT_PC in CONFIG_PPDEV, to je LPT preko /dev/parport0. Ne pozabit naložit modulov ppdev in parport_pc.
uisp poženeš s:
uisp -dprog=dapa -terminal
Če izpiše kaj podobnega sledečemu je OK, drugače se bo treba še malo potruditi.
domen@nd47:~/avr$ uisp -dprog=dapa --terminal
Atmel AVR ATmega16 is found.
Entering the AVR Terminal. ?-help, q-quit.
avr>
Uporabniški vmesnik je dokaj enostaven, zato ga ne bom opisoval.
5 Prvi program
5.1 Izvorna koda
Enostaven programcek, ki posreduje vrednosti PORTB[4-7] na PORTB[0-3]:
#include <avr/io.h>
int main()
{
DDRB = 0x0f; /* stirje MSB za vhod, LBS za izhod */
PORTB = 0x0f;
for (;;) {
uint8_t tmp;
tmp = PINB;
tmp >>= 4;
PORTB = tmp;
}
return 0;
}
5.2 Prevajanje
Prevajanje (atmega16 zamenjaj s tvojim cipom):
avr-gcc -Wall -mmcu=atmega16 -o leds leds.c
avr-objcopy -j .text -j .data -O ihex leds leds.hex
5.3 Makefile
Ali pa se bolje, z Makefile:
TARGET:=atmega16
OBJ=leds
CC:=avr-gcc
OBJCOPY:=avr-objcopy
default: $(OBJ).hex
%: %.c
$(CC) -Wall -mmcu=$(TARGET) -o $@ $<
%.hex: %
$(OBJCOPY) -j .text -j .data -O ihex $< $@
clean: $(OBJ) $(OBJ).hex
rm -f $(OBJ) $(OBJ).hex
File translated from
TEX
by
TTH,
version 3.74.
On 30 Apr 2006, 12:43.