Mikrokontrolery AVR


Mikrokontrolery AVR Wykład 1

Konsultacje SR 15-17

CZ 13-15

Pok 304a/E1

Kolokwium zaliczeniowe na początku maja na ostatnim wykładzie kolokwium poprawkowe

Można korzystać z własnych materiałów , będzie 30 pytań na 60 minut

Plan wykładu :

Ogólne przedstawienie i klasyfikacja mikrokontrolerów rodziny AVR

Architektura mikrokontrolerów AVR - porównanie z rodziną 8051

Przesyłanie danych w AVR

Operacje arytmetyczno-logiczne.Procedury mnożenia wielobajtowego

Operacje na liczbach ułamkowych w technice stałoprzecinkowej

Instrukcje warunkowe

Operacje bitowe.Podstawowe schematy aplikacyjne kontrolerów AVR

System przerwań , porty , pamięć EEPROM

Timery i PWM

Kontroler LCD w ATMEGA169

Kolokwium

Przetwarzanie A/C i C/A

Programowanie pamięci FLASH i EEPROM

Poprawka

Będą dostępne wydruki wykładów

Literatura: noty aplikacyjne producenta na stronie atmela w języq angielskim (szlag)

AT90S2313

AT90S1200

AVR - zaawansowany RISC

CISC- complex Instruction Set Computer(duży zestaw instrukcji , krótki kod programu, długi czas wykonywania instrukcji)

RISC- Reduced Instruction Set Computer(mały zestaw instrukcji , długi kod programu , krótki czas wykonywania instrukcji)

Zestaw instrukcji CISC w RISC-wei implementacji

Kompletny zestaw instrukcji zawierający:

Instrukcje arytmetyczno-logiczne

Instrukcje skoków warunkowych

Instrukcje transferu danych

Instrukcje operacji bitowych i testowania pojedynczych bitów

Większośc operacji jest wykonywana w jednym cyklu maszynowym

Cykl maszynowy=Cykl zegarowy(AVR)!

Klasyczny 8051: cykl maszynowy = 12 cykli zegarowych

Ulepszony rdzeń 8051 (maxim): cykl maszynowy = 4 cykle zegarowe

(cygnal): cykl maszynowy=cykl zegarowy

Rdzeń procesora AVR

Pytanie na kolokwium: różnica pomiędzy rdzeniem 8051 a AVR:

Brak w AVR akumulatora w miejsce którego są 32 rejestry ogólnego przeznaczenia na których wykonywane są operacje arytmetyczno-logiczne

Rozdzielona pamięć programu i danych - architektura Hardvard

Reprogramowalna w układzie pamięć programu (FLASH)

Wszystkie kontrolery są wyposażone w pamięć EEPROM niektóre posiadają interfejs do podłączenia zewnętrznej pamięci danych

Statyczny rdzeń procesora

Brak wydzielonego akumulatora

32 rejestry na których wykonywane są operacje arytmetyczno-logiczne

3 16-bitowe rejestry wskaźnikowe do adresowania pamięci danych : X,Y,Z

16-bitowe instrukcje

Watchdog

Stos lokowany w pamięci danych

Konfigurowalne porty wejścia-wyjścia

Możliwość taktowania wewnętrznym oscylatorem RC

1-poziomowy pipeline (pobieranie instrukcji, wykonanie instrukcji - niewielkie opóźnienie w przypadq skoq )

statyczny rdzeń umożliwia taktowanie dowolnym zegarem byle nie przekraczać wartości maxymalnej AVR można taktować do 20 MHz przetaktowanie może skutkować zaburzeniem zakresu temperaturowego pracy

16-bitowość instrukcji jest spowodowana tym , że instrukcje zawierają również argumenty , jednakże w przypadku instrukcji bez argumentów np. NOP następuje marnowanie pamięci

stos jest ulokowany w pamięci danych , wskaźnik stosu nie jest inicjalizowany w momencie startu procesora, więc trzeba to zrobić samodzielnie, na ogół stos lokuje się na końcu pamięci , wskaźnik stosu jest dekrementowany

powstaje problem przy wysyłaniu komunikatów na porty z uwagi na szybkość 100ns, w ciągu tak krótkiego czasu nie ma możliwości ładowania pasożytniczych pojemności

AVR posiada 2 rejestry odpowiedzialne do sterowania portami : pierwszy do zapisu i drugi do odczytu

Wykład 2

Kody wygenerowane dla 51 i avr - porownanie

Instrukcje dla 8051

Mov r7, wielkoscbloku

Skok:

Mov dpl,r6

Mov dph,r5

Movx a,@dptr

Inc dptr

Mov R6,dpl

Mov R7,dph

Mov dpl,r4

Mov dph,r3

Movx @dptr,a

Inc dptr

Mov r4,dpl

Mov r3,dph

Djnz r7,skok

R5 r6 - adres zrodla

R3 r4 - adres docelowy

Instrukcje dla AVR

LDI R16,wielkoscbloku

Skok:

LD R17,Z+

ST X+,R17

DEC R16

BRNE skok

z-adres żródła

x-adres docelowy

zasilanie i taktowanie AVR

pobor pradu w trybie power down : 0.1 uA

3 uA w trybie budzenia przez uklad Watchdog

napiecia zasilania - 1.8- 5.5 V w szczególnych przypadkach <7V

czas wyjscia z trybu Powr Down: <1us

4 MIPS przy napięciu zasilania 1.8 V

1.8 V, 4 MHz

2.7 V, 10 MHz

4.5 V, 20 MHz

liniowa zależnośc między częstotliwością taktowania i napięciem zasilania

porownanie historii AVR

AT90S1200 (1997)

89 instrukcji - brak sprzętowego mnożenia

1kB pamięci FLASH (512 instrukcji , 1000 cykli programowania)

Brak pamięci RAM

64 B pamięci EEPROM

Taktowanie do 20 MHz

Wewnętrzny komparator napięcia

Jeden 8-bitowy timer z prescalerem

ATMEGA169(2002)

130 instrukcji

16kB pamięci FLASH (8192 instrukcje 10000 cykli programowania)

1kB pamięci RAM

512 B pamięci EEPROM

Taktowanie do 16 MHz

Wewnętrzny komparator napięcia

3 timery (1 - 16bitowy 2 - 8bitowe) z prescalerami

RTC

Interfejs JTAG

Sterownik matrycy LCD (4*25)
4 kanały PWM

Przetwornik A/C z 8-kanałowym multiplekserem

Interfejsy szeregowe: UART, SPI, I2C

Wewnętrzne źródło napięcia odniesienia

Przerwa

Rodzina ukladow ze sterownikiem LCD

Kompatybilnosc funkcjonalna i zgodnosc wyprowadzen

Sterowanie do 160 segmentow LCD - programowa regulacja kontrastu

Niewielki pobór mocy

Dostepne wersje ukladow bez sterownika LCD

Koniec pokazu slajdów

www.microschematic.com

AT2313

Przesylanie danych w kontrolerach AVR

32 rejestry ogólnego przeznaczenia ;)

stałe mozna wpisywać tylko do rejestrów R16-R31

rejestry 30 i 31 tworzą rejstry wskaźnikowe Z

rejestry 28 i 29 tworzą rejstry wskaźnikowe Y

rejestry 26 i 27 tworzą rejstry wskaźnikowe X

mozna sie do rejestrow odwolywac zarowno przez ich nazwe jak i ich adres

Ładowanie stałych do rejestru - instrukcja LDI

LDI R16, 15 wartość 15

LDI R17, $15 warość 15 szesnastkowo

Ładowanie adresu 1000 do rejestru wskaźnika Z

LDI R30, low(1000) = LDI ZL, low(1000)

LDI R31, high(1000) = LDI ZH, high(1000)

Przesłania między rejestrami

Operacja 8-bitowa

MOV R0,R16; kopiuje zawartosc rejestru R16 do R0

Operacja 16-bitowa (procesory ATMEGA):

MOVW R17:R16,R1:R0 kopiuje zawartość rejestrów r1 i r0 do r17 i r16 w jednym cyklu maszynowym

MOVW ZH:ZL,R3:R2 kopiuje zawartosc rejestrow r3 i r2 do wskaznika Z

Istnieje konwencja kopiowania rejestrów taka , że najpierw ma być rejestr starszy nieparzysty

Mapa pamięci RAM

Obszar dostepny pamieci dla uzytkownika zaczyna sie od adresu 0x0100 w ATMEGA169

Zapis , odczyt rejestrów I/O

Wszystkie rejestry konfigurujące peryferia, procesor, porty, są w architekturze AVR rejestrami I/O

Zapis i odczyt rejestrów I/O odbywa się zawsze poprzez 32 rejestry ogólnego przeznaczenia

Zapis/odczyt rejestrów I/O może być wykkonywany przez instrukcje „in” i „out”, jeśli rejestry są ulokowane poniżej adresu 60h w pamięci RAM

Zapis wartosci 1 do portu A

LDI R16,1; zapis do rejestru 16

OUT PORTA,R16; prezepisanie wartości do portu

Odczyt zawartości licznika T0

IN R16, TCNT0; odczyt z TCNT0 do R16

Adresowanie bezpośrednie pamięci RAM

Dostęp do rejestrów I/O od adresu 60h jest możliwy tylko przez wykorzystanie instrukcji do adresowania pamięci RAM

STS $0FF,R2; zapisuje zawartość rejestru 2 do komórki pamięci o adresie FFh

STS UDR,R2; zapisuje zawartość rejestru 2 do portu szeregowego

LDS R2,$0FF; odczytuje zawartość komórki o adresie FFh do R2

LDS R2,UDR; odczytuje z portu szeregowego do rejestru 2

Dostep do rejestrow I/O od adresu 60 h jest mozliwy tylko przez wykorzystanie instrukcji do adresu pamięci RAM

Wyklad 3 8 03 2006

Do adresowania pośredniego są wykorzystywane 3 rejestry wskaźnikowe X,Y,Z

Adresowanie pośredni

LDL XL,low ($0FF); ładuje adres do rejestru wskaźnikowego

LDL XH,high($0FF);

ST X,R2; zapisuje zawartość rrejestru R2 do komórki pamięci o adresie FFH

LD R2,X; odczytuje zawartość komórki o adresie FFH do rejestru R2

Adresowanie pośrednie z post inkrementacją wskaźnika

ST X+,R2; po zapisaniu komórki pamięci o adresie X wartość w rejestrze X jet zwiększana o 1

Adresowanie pośrednie z predekrementacją wskaźnika

ST -X, R2; przed zapisaniem komórki pamięci wartość w rejestrze X jest zmniejszana o 1 zapis następuje do komórki o adresie (X-1)

Adresowanie pośrednie z przesunięciem jest uzyteczne przy odwoływaniu się do elementów tablicy lokowanych w pamięci RAM

STD Y+q,Rr gdzie 0<=q<=63

LDD Rd,Y+q

Np:

LDI XL,low($0FF); ładuje adres początku tablicy do rejestru wskaźnikowego X

LDI XH,high($0FF);

STD X+1,R2; zapisuje zawrtość R2 do komórki pamięci o adresie 100h

LDD R2,X+2; odczytuje zawartość komórki o adresie 101h do R2

Wykonanie komend „lds sts ld std ldd” wymaga dwóch cykli maszynowych niezależnie od tego , czy jest używane postinkrementowanie lub predekrementowanie wskaźnika bądź przesunięcie

Pobieranie danych z pamięci programu

Pamięć programu może być adresowana tylko pośrednio z wykorzystaniem wskaźnika Z

Pamięć programu jest zorganizowana w słowa 16-bitowe

Instrukcja „LPM” adresuje bajtowo

Wykonanie instrukcji „LPM” wymaga 3 cykli maszynowych

LDI Zh, high (tablica<<1); załadowanie wskaźnika Z

LDI Zl, low (tablica <<1); przesunięcie konieczne ze względu na adresowanie bajtowe

LPM R17, Z+; pobranie pierwszego elementu z tablicy do R17 wskaźnik Z pokazuje na drugi element tablicy

Tablica:

Db 1,2,3

Rozkazy arytmetyczno- logiczne

Operacje na rejestrach

Dodawanie

ADD R15, R16; R15=R15+R16

Operacje ze stałymi (tylko rejestry 16-31)

Dodawanie brak

Odejmowanie SUBI R16,7;

SBCI R16,7;

Iloczyn logiczny ANDI R16,7;

Suma logiczna ORI R16,7;

Dodanie stałej do wartości rejestru w trybie 8-bitowym można zrealizować przez operację odejmowania stałej o przeciwnym znaku

SUBI R16,-7;

Dodanie , odjęcie stałej od liczby 16-bitowej

ADIW R17:R16,7; (R17:R16 + 7)

SBIW R17:R16, 7; (R17:R16 - 7)

Wykonanie instrukcji adiw i sbiw zajmuje 2 cykle maszynowe

Instrukcje COM i NEG

CLR R17

NEG R17

COM R17

LDI R17, 1;

NEG R17;

LDI R17, 1;

COM R17;

Instrukcja NEG neguje wartość w kodzie U2

Pozostałe instrukcje

Zerowanie rejestru CLR R16;

Ustawienie rejestru SET R16;

Inkrementacja rejestru INC R16;

Dekrementacja rejestru DEC R16;

Ustawienie bitu w rejestrze SBR R16,6

Kasowanie bitu w rejestrze qrwa

Instrukcje mnożenia 8-bitowego

Mnożenie dwóch liczb bez znaku MUL R12 , R13

Mnożenie dwóch liczb ze znakiem MULS R12 , R13

Mnożenie liczby ze znakiem przez liczbe bez znaku MULSU R12 , R13

R12 -> ze znakiem

R13 -> bez znaku

Wynik mnożenia znajduje się zawsze w rejestrach R1 i R0

Instrukcje mnożenia zawierają tylko procesory serii ATMEGA

Wykonanie mnożenia zajmuje 2 cykle maszynowe

Instrukcje mnożenia z przesunięciem wyniku o 1 pozycję w lewo: fmul, fmuls, fmulsu

LDI R17, low(RAMEND);

OUT SPL, R17;

LDI R17, high(RAMEND);

OUT SPH, R17;

LDI Zh, high(tablica<<1);

LDI Zl, low(tablica<<1)

LDI Xh, high($100)

LDI Xl, low($100)

LDI R16,7

Skok:

LPM R17,Z+

ST X+,R17

DEC R16

BRNE Skok

Petla:

RJMP Petla

Tablica:

DB 1,2,3,4,5,6,7

Wykład 4

Metody wykonywania mnożenia :

L1= a<<8 + b;

L2= c<<8 + d;

A i c - liczby ze znakiem

B i d - liczby bez znaku

(L1:L2) = (a<<8+b)*(c<<8+d)=(a*c)<<16+(b*d)<<8+(a*d)<<8+b*d

r19:r18:r17:r16 = (r23:r22)*(r21:r20)

muls16_16

clr r2

muls r23:r21

movw r19:r18,r1:r0

mul r22:r20

movw r17:r16,r1:r0

mulsu r23:r20

sbc r19,r2

add r17,r0

adc r18,r1

adc r19,r2

muls r21,r22

sbc r19,r2

add r17,r0

adc r18,r1

adc r19,r2

Instrukcje skoków w AVR

Skoki bezwarunkowe

Bezwzględny : jmp (jump)

Względny : do +/- 2kB rjmp (relative jump)

Pośredni - rejestr Z ijmp (indirect jump)

(zawartość licznika Z jest przepisywana do licznika rozkazów)

Wywołanie podprogramu:

Bezwzględne (4 cykle maszynowe) call

Względne do +/- 2 kB (3 cykle) rcall

Pośrednie rejestr Z (3 cykle) icall

(zawartość rejestru Z jest przepisywana do licznika rozkazów)

Skoki warunkowe - zależne od ustawienia flag w rejestrze statusowym (zakres skoku

-64,+63 względem licznika rozkazów)

Skok jeśli stan flagi : 1 0

C brcs brcc

Z breq brne

N brmi brpl

V brvs brvc

S brge brlt

H brhs brhc

T brts brtc

Brcs - branch carry set

Brcc - branch carry clear

Breq - branch equal

Brne - branch not equal

Status Register (SREG)

7 6 5 4 3 2 1 0

I T H S V N Z C

S - znak wyniku operacji na liczbach U2 - uwzględnia przekroczenie zakresu (V xor N)

V - flaga przekroczenia zakresu dla operacji U2

N - flaga wartości ujemnej

Z - flaga zera

I - flaga włączenia / wyłączenia przerwań (sei,cli)

T - flaga wykorzystywana do kopiowania bitów (bld,bst)

H - flaga przeniesienia między bitem 3 a 4 „Half carry”

C - flaga przeniesienia carry

Wykład 5 22 - 03 - 2006

Operacja C Z N V S

1+1 = 2 0 0 0 0 0

1 + (-1) = 0 1 1 0 0 0

-1 + (-1) = -2 1 0 1 0 1

-1 + (-128) = -129 1 0 0 1 1

1 + 127 = 128 0 0 1 1 0

Instrukcja TST:

Tst r15 - testuje zawartość rejestru - ustawia flagi Z,N,V

Może być wykorzystywana, jeżeli nie wykonywano operacji arytmetyczno - logicznej ustawiającej flagi np.: zawartość rejestru pobrano z pamięci

Porównywanie liczb 16 - bitowych

Porównanie zawartości rejestru ze stałą

Przeskok następnej instrukcji

Zachowywanie SREQ i blokowanie przerwań



Wyszukiwarka

Podobne podstrony:
Bootloader dla mikrokontrolerów AVR
język C dla mikrokontrolerów AVR od podstaw do zaawansowanych aplikacji
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji jcmikr
Obsługa timerów w mikrokontrolerach AVR, część 1
Mikrokontrolery Avr W Praktyce Dolinski
mikrokontrolery avr isp pl
Mikrokontrolery AVR programowanie w języku C Przykłady zastosowań
Bootloader dla mikrokontrolerów AVR
Marcin Wiazania Programowanie mikrokontrolerow AVR w jezyku Bascom
Mikrokontrolery Avr W Praktyce Dolinski
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji
AVR GCC kompilator C dla mikrokontrolerów AVR, cz 13
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji jcmikr
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji
Jezyk C dla mikrokontrolerow AVR Od podstaw do zaawansowanych aplikacji 2
Bootloader dla mikrokontrolerów AVR

więcej podobnych podstron