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

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

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.