Mikroprocesory i mikrosterowniki 2009 kolokwium 1

background image

Mikroprocesory i mikrosterowniki

kolokwium 1

1

1. Mikrokontroler



2. Rejestry

W mikrokontrolerze rozróżniamy dwa rodzaje rejestrów- uniwersalne oraz specjalne.

Rejestry uniwersalne służą do wykonywania operacji arytmetycznych, logicznych itp. Możemy do nich
dowolnie wpisywad lub sczytywad dane, które następnie używane są przez mikrokontroler.
W Atmega8535 rejestrów uniwersalnych jest 32 ( o nazwach od R0 do R31)

Rejestry specjalne są przypisane do konkretnego urządzenia wewnętrznego mikrokontrolera (np. 3
rejestry specjalne portów I/O) i w odpowiedni sposób nim steruje. Użytkownik nie ma bezpośredniego
dostępu do tych rejestrów, wszelkie operacje wykonuje się z wykorzystaniem rejestrów uniwersalnych.


W Atmega8535 rejestrów specjalnych jest 64, ich nazwy są skrótami np. SREG- Status Register

3. Porty WE/WY (I/O)


Atmega8535 ma 4 (A,B,C,D) porty I/O, po 8 pinów każdy. Do wszystkich portów przyporządkowane są po
3 rejestry specjalne:
- DDR (Data Direction Register) w którym ustalany czy dany pin wysyła (1) czy sczytuje informacje (0)
- PORT w którym ustawiamy wartośd, którą chcemy z mikrokontrolera wysład
- PIN do którego szczytujemy wartośd z zewnątrz

przykład zastosowania:

background image

Mikroprocesory i mikrosterowniki

kolokwium 1

2

Ustawiając dany port(pin) jako wejście możemy spodziewad się że będą się na nim generowały stany
losowe, które następnie mogą byd sczytane przez mikrokontroler i zaburzad jego pracę. Aby
wyeliminowad stany losowe stosuje się pull-up.

Pull-up polega na wpisaniu do rejestru PORT wartości 1.

LDI R16, $00
OUT DDRA, R16 ; ustawanie portu A na wyjście
LDI R16, $FF
OUT PORTA, R16 ; ustawienie pull-up na tym porcie A

4. Inicjalizacja stosu

Inicjalizacja stosu jest niezbędna gdy chcemy używad podprogramów (tzn. instrukcji RCALL, ICALL, RET,
RETI) lub gdy chcemy odkładad/zdejmowad jakieś dane na stos (PUSH, POP)
Polega ona na „powiedzeniu” mikrokontrolerowi, gdzie w pamięci Internal SRAM znajduje się
wierzchołek stosu (czyli określenie stack pointer SP- pierwszy wolny wiersz stosu)

Ponieważ adres wiersza jest 16-bitowy, SP dzielimy na częśd młodszą (SPL) i

starszą (SPH)






Przykład inicjalizacji stosu :

low (RAMEND) jest stałą odpowiadającą młodszej części adresu ostatniego wiersza ($5F)

high (RAMEND) odpowiada starszej części adresu ostatniego wiersza($02)




5. Podstawowe instrukcje


LDI – load immediate- załadowanie stałej do rejestru uniwersalnego
np. LDI R16, 128 ; załadowanie wartości 128 do rejestru R16
Przy LDI możemy używad rejestrów od R16 do R31 mikrokontrolera i stałych od 0 do 255 zapisanych w
kodzie binarnym, dwójkowym lub szesnastkowym.

OUT- przepisanie wartości z rejestru uniwersalnego do rejestru specjalnego
np. OUT PORTC, R11 ; wczytanie do rejestru PORTC zawartości rejestru R11
Przy tej instrukcji można używad dowolnych rejestrów uniwersalnych i specjalnych.

background image

Mikroprocesory i mikrosterowniki

kolokwium 1

3

IN – przepisanie zawartości z rejestru specjalnego do rejestru uniwersalnego
np. IN R23, PIND ; przepisanie wartości rejestru PIN do rejestru R23
Również możemy stosowad dowolne rejestry.

RJMP – relative jump- skok do określonej etykiety, lub linijki o danym numerze
np. pętla:
jakiś kod
RJMP pętla
Najczęściej służy do zapętlenia jakiejś czynności

RCALL- odnośnik do podprogramu, RET – powrót z podprogramu (RETI – powrót z podprogramu obsługi
przerwania)
np. RCALL zwolnij

jakiś kod
jakiś kod

zwolnij:
jakiś kod
jakiś kod
RET


SBRS/ SBRC – skip if bit in register set /cleared- opuśd linijkę kodu poniżej, jeśli dany bit w danym
rejestrze jest 1/0
np. SBRC R17,4 ; pominięcie następnej linijki jeśli 4 bit w rejestrze R17 ma wartośd 0

BRNE – testuje flagę Z w rejestrze SREG. Jeśli Z=0, wykonywany jest skok do podanej etykiety lub linijki
kodu, jeśli Z=1 instrukcja nie jest wykonywana i program idzie dalej.
np. BRNE OP ; skok do etykiety OP jeśli Z=0

6. Pętla opóźniająca

Jeśli chcemy zauważyd efekty pracy mikrokontrolera gołym okiem, np. przy pracy z diodami, musimy
opóźnid czas trwania jakiejś czynności tak aby była ona zauważalna. Stosujemy do tego pętlę
opóźniającą:

LDI R17, $FF ; załadowanie do rejestru wartości 255
OP:
DEC R17 ; dekrementowanie wpisanej wartości
BRNE OP ; skok do etykiety OP, dopóki wartośd rejestru R17 się nie wyzeruje

Taka najprostsza pętla opóźniająca trwa około 766 cykli zegara, co ciągle nie jest zauważalne gołym
okiem. Dlatego pętlę można rozbudowad:



background image

Mikroprocesory i mikrosterowniki

kolokwium 1

4

LDI R17, $FF
OP1:

LDI R18, $FF
OP:
DEC R18
BRNE OP

DEC R17
BRNE OP1

Taka pętla trwa ponad 190 tys. cykli, czyli około 200 ms, i jest już zauważalna gołym okiem.

7. Działanie CPU


Centralna jednostka obliczeniowa (CPU) składa się z:

jednostki arytmetyczno-logicznej (ALU), która wykonuje wszystkie instrukcji logiczne i
arytmetyczne

rejestrów uniwersalnych

STATUS REGISTER (SREG)- składa się z 7 flag, zawiera m.in. informacje na temat wyników
ostatnio wykonanych instrukcji arytmetycznych, umożliwia także włączenie przerwao (bit 7 – I)

wskaźnik stosu (STACK POINTER-SP) – określający gdzie w pamięci SRAM znajduje się
wierzchołek stosu

licznik rozkazów (PROGRAM COUNTER-PC) wskazuje adres spod którego pobierane są kolejne
instrukcje

pamięci (SRAM, Flash)

8. Rodzaje pamięci

W Atmedze8535 wyróżniamy 3 rodzaje pamięci:

Pamięd programu – FLASH EEPROM

Zawiera 8kB pamięci służącej do przechowywania programu. Dla bezpieczeostwa
oprogramowania, podzielona jest ona na częśd bootowalną (BOOT PROGRAM SECTION) i częśd
aplikacji (APPLICATION PROGRAM SECTION). Zorganizowana jest w komórki 4K x 16 bajtów.
Wytrzymuje 10 000 cykli.

Pamięd danych – SRAM

Zawiera 512B pamięci służącej do przechowywania tymczasowych danych. Podzielona jest 608

lokacji: rejestry uniwersalne i specjalne (96 lokacji) oraz Internal SRAM (stos- 512 lokacji)

Pamięd dodatkowa (użytkownika) – EEPROM
Jest to 512B pamięci, z której może korzystad użytkownik.

background image

Mikroprocesory i mikrosterowniki

kolokwium 1

5

9. Tryby adresowania

Możemy wyróżnid 5 rodzajów adresowania pamięci SRAM:

Bezpośrednie

Pośrednie

Pośrednie z predekrementacją

Pośrednie z postinkrementacją

Pośrednie z przesunięciem (tylko rejestry Y i Z)

Adresowanie bezpośrednie polega na bezpośrednim podaniu adresu w ramce instrukcji.

Adresowanie pośrednie wykorzystuje rejestry X, Y, Z ( są to rejestry od R26 do R31, które oprócz bycia
rejestrem uniwersalnym mają dodaną funkcję 16-bitowych wskaźników adresu)

10. Przerwania


W mikrokontrolerze Atmega8535 występuje 21 przerwao (reset, 3 zewnętrzne, 17 wewnętrznych) o
malejących priorytetach. Wystąpienie przerwania powoduje natychmiastowe przerwanie programu
głównego i przejście do podprogramu obsługi przerwania.
Aby korzystad z przerwao należy

włączyd przerwania globalne (7 bit w SREG- flaga I) np. komendą SEI

aktywowad konkretne przerwanie

Np. w rejestrze TIMSK aktywujemy przerwania od licznika

w rejestrze GICR aktywujemy przerwania zewnętrzne

użyd na początku dyrektywy .org z odpowiednim wektorem przerwania (np. .org $000-
przerwanie RESET)


W momencie obsługi podprogramu przerwania, flaga I jest automatycznie wyzerowywana, aby żadne
inne przerwanie nie mogło w tym czasie nastąpid. Po powrocie z podprogramu (RETI) flaga jest
ponownie ustawiana na 1.

11. Przerwania zewnętrzne


Możemy wyróżnid 3 przerwania zewnętrzne :
INT0 (priorytet 2), INT1 ( priorytet 3), INT2 (priorytet 19).
INT0 I INT1 mogą reagowad na dowolne zbocze lub stan niski. INT2 jest wyzwalany wyłącznie zboczem.
Czas trwania impulsu wyzwalającego to min. 1 cykl zegara przy wyzwalaniu zboczem (50 ns dla INT2) lub
poziom niski na tyle długi aby zakooczyła się obecnie wykonywana instrukcja.
Przerwania zewnętrzne używają następujących rejestrów specjalnych:

 GICR- gdzie aktywujemy konkretne, bądź wszystkie przerwania zewnętrzne
 GIFR- gdzie występują flagi przerwao zewnętrznych (1- gdy przerwanie jest wykonywane, 0- gdy

się zakooczyło)

 MCUCR- gdzie ustawiamy reakcje INT0 lub INT1 (tzn. czy ma byd wyzwalane zboczem

opadającym, rosnącym, czy poziomem)

 MCUSCR- ustawienie reakcji INT2 (zbocze opadające lub rosnące)

background image

Mikroprocesory i mikrosterowniki

kolokwium 1

6

12. Licznik

Licznik służy do zliczania impulsów zegarowych lub zewnętrznych, generowania sygnału PWM bądź
generowania częstotliwości. Ma jedno wejście T0 i jedno wyjście OC0.

Z licznikiem związane są 3 rejestry specjalne

 TCCR0- wybieramy w nim tryb pracy, sterowanie wyjściem(zależne od trybu pracy), ustawiamy

prescaler

 TCNT0- w którym zapisywana jest obecna wartośd do której licznik doliczył
 OCR0- w którym podajemy wartośd do której licznik ma zliczad

Używamy również rejestru TIMSK w którym włączamy przerwania od licznika oraz TIFR w którym
znajdują się flagi przerwao.

Z licznikiem związane są dwa przerwania:

Od przepełnienia (gdy doliczy do 255) i się przekręci – TOV0

Od doliczenia do zadanej wartości- OCF0

Licznik oferuje 4 tryby pracy:

 Normalny - po doliczeniu do wartości maksymalnej (255) następuje przekręcenie licznika do

wartości 0. Wartośd TCNT0 można modyfikowad w dowolnym momencie. Flaga przepełnienia
TOV0 ustawiana jest przy przejściu MAX->0.
Tryb ten można stosowad do generowania impulsów, ale nie jest to rozwiązanie optymalne.
Najczęściej stosuje się go do zliczania impulsów.

 CTC (clear on compare)- w rejestrze OCR0 zapisujemy wartośd do której licznik ma zliczad. Po

zrównaniu się TCNT0 z OCR0 następuje przekręcenie licznika. Flaga przepełnienia TOV0
ustawiana jest przy przejściu MAX->0, a flaga zrównania OCF0 ustawiana przy przejściu TOP->
Tryb ten jest odpowiedni do generowania impulsów o określonej częstotliwości. W tym celu
korzystamy ze wzoru

f

OC0

- częstotliwośd generowana

f

clk

- częstotliwośd zegara

N- prescaler
OCR0- wartośd jaką należy wpisad do rejestru aby otrzymad f

OC0

 Fast PWM- w tym trybie licznik zlicza od wartości 0 do wartości maksymalnej(255). Po

doliczeniu do 255 następuje przekręcenie licznika. W tym trybie licznik reaguje tylko na jedno
zbocze (narastające) przez co jest szybszy niż zwykły PWM.
Na pinie OC0 ustawiane jest 0 przy zrównaniu i 1 przy przepełnieniu.
Tryb ten używany jest to generowania impulsów o zadanej częstotliwości i wypełnieniu.

background image

Mikroprocesory i mikrosterowniki

kolokwium 1

7

Do OCR0 wpisujemy wartośd w*256, gdzie w jest zadanym
wypełnieniem w %


 PWM z korekcją fazy- jest to tryb dwa razy wolniejszy ale dokładniejszy niż fast PWM, gdyż

reaguje na oba zbocza. Zliczanie przebiega 0->MAX->0.
Na pinie OC0 pojawia się 0 przy zrównaniu na zboczu narastającym, 1 przy zrównaniu na zboczu
opadającym

Glitch – drobne zakłócenie w systemie, spowodowane np. impulsem krótszym lub o mniejszej

amplitudzie niż zakłada specyfikacja . W liczniku glitch może wystąpid gdy np. zmiana wartości na
OCR0 wystąpi podczas zliczania w rejestrze TCNT0. Zakłóca to przebieg sygnału wejściowego.
Aby tego uniknąd zmiany OCR0 są zsynchronizowane z przekręceniem się licznika.

13. Konwerter analogowo- cyfrowy


Wejścia konwertera znajdują się na porcie A. Dodatkowo posiada on 3 piny- uziemienie, napięcie
odniesienia i zasilania. Wyniki konwersji są 10 bitowe. Typowo konwersja trwa 65-260 us.
Konwerter może przeprowadzad konwersję bez wzmocnienia lub ze wzmocnieniem 1x, 10x, 200x(wynik
jest wtedy 8 bądź 7 bitowy)

background image

Mikroprocesory i mikrosterowniki

kolokwium 1

8

Z konwerterem związane są następujące rejestry:

 ADMUX- ustala się w nim źródło napięcia referencyjnego, wybiera kanał wejściowy i tryb

prezentacji wyników

 ADCSRA- tutaj włączamy konwerter, startujemy konwersję, wybieramy rodzaj konwersji,

aktywujemy przerwania i wybieramy prescaler

 ADCL+ADCH- rejestry wyniku
 SFIOR- wybór zdarzenia które wywoła konwersję

Występuje też przerwanie od zakooczenia konwersji. Aktywacja przerwania jaki i jego flaga zawarte są w
rejestrze ADCSRA.

Typy konwersji:

Pojedyncza
Konwersja rozpoczyna się wraz z pierwszym zboczem narastającym zegara po starcie konwersji
(ADSC <<1). Konwersja trwa 13 cykli zegara (z wyjątkiem pierwszej, która trwa 25 cykli).
Pomiędzy pojedynczymi konwersjami następuje odstęp długości 1,5 cyklu zegarowego.

Wielokrotna (free running)
Pierwsza konwersja rozpoczyna się tak samo jak konwersja pojedyncza, jednak pomiędzy
kolejnymi konwersjami nie ma żadnego odstępu czasu. Aby uruchomid tę konwersję należy w
rejestrze ADCSRA ustawid ADATE<<1 oraz w rejestrze SFIOR na bitach ADTS2..0 << ‘000’

Wyzwalana zdarzeniem
Odstęp pomiędzy zdarzeniem wyzwalającym a startem konwersji to 2 cykle zegara. Pomiędzy
poszczególnymi konwersjami jest duży odstęp w celu synchronizacji. Aby uruchomid tę
konwersję należy w rejestrze ADCSRA ustawid ADATE<<1 oraz w rejestrze SFIOR wybrad
zdarzenie wyzwalające (przerwanie zewnętrzne lub jedno z przerwao liczników).

Eliminacja zakłóceo

Aby zminimalizowad bądź całkowicie wyeliminowad zakłócenia z przebiegu konwersji należy przede

wszystkim stosowad jak najkrótsze kable, a wszelkie przełączniki trzymad jak najdalej od kontrolera.

Napięcie zasilania do konwertera należy podłączad poprzez filtr LC.

W czasie konwersji mikrokontroler powinien byd uśpiony (tryb Noise Reduction, Idle) oraz żadne porty

I/O nie powinny byd wykorzystywane.

Z doświadczenia wiadomo, że obudowa PDIP daje najmniej dokładne wyniki konwersji.

Wynik konwersji

Całkowita niedokładnośd konwersji wynosi maksymalnie ±2 LSB

background image

Mikroprocesory i mikrosterowniki

kolokwium 1

9

Zakres konwersji

𝐴𝐷𝐶 =

𝑉

𝑖𝑛

∙ 1024

𝑉

𝑅𝐸𝐹

= [$000, $3𝐹𝐹]

1024 − 𝑟𝑜𝑧𝑑𝑧𝑖𝑒𝑙𝑐𝑧𝑜ść

Zakres konwersji dla sygnałów różnicowych

𝐴𝐷𝐶 =

(𝑉

+

− 𝑉

) ∙ 512 ∙ 𝐺

𝑉

𝑅𝐸𝐹

= $200, $1𝐹𝐹 = [−512,511]

512 − 𝑟𝑜𝑧𝑑𝑧𝑖𝑒𝑙𝑐𝑧𝑜ść

𝐺 − 𝑤𝑧𝑚𝑜𝑐𝑛𝑖𝑒𝑛𝑖𝑒

Odczytując wyniki konwersji najpierw należy odczytad rejestr z młodszą częścią wyniku - ADCL

14. Magistrala szeregowa SPI

Magistrala szeregowa umożliwia komunikację mikrokontrolera z urządzeniami zewnętrznymi, takimi jak inne
mikrokontrolery, sterowniki, układy scalone itd. Magistrala pracuje w dwóch trybach: master i slave.

Piny magistrali znajdują się na pinach portu B:

PB4 - SS- slave select- wybór slave’a następuje poprzez wysłanie z mastera 0 na pin SS
wybranego urządzenia

PB5 – MOSI- master output/slave input

PB6 – MISO – master input/slave output

PB7 – SCK – zegar magistrali

Należy pamiętad aby przy łączeniu mastera ze slavem łączyd pin MOSI z MOSI, nie z MISO.










background image

Mikroprocesory i mikrosterowniki

kolokwium 1

10

Z magistralą związane są następujące rejestry specjalne:

 SPCR – control register - w którym włączamy magistralę, ustalamy tryb pracy (master/slave),

wybieramy sposób wysyłania bitów (LSB -> MSB lub MSB -> LSB), wybieramy prescaler

 SPSR – status register - w którym znajduje się dodatkowy bit do wyboru prescalera oraz dwa bity

wyłącznie do odczytu informujące o przerwaniu (flaga SPIF) i kolizji danych

 SPDR – data register – w którym znajdują się przesyłane dane

Magistrala wywołuje jedno przerwanie – od zakooczenia transmisji. Jego flaga znajduje się w rejestrze
SPSR.


DODATEK
(na podstawie A.Skorupski Podstawy techniki cyfrowej i mikroprocesorowej)

A. KOD BINARNY


Zamiana kodu dziesiętnego na binarny
np. liczba 89








czytamy od tej strony

89

10

= (1011001)

2

Zamiana kodu binarnego na dziesiętny



B. KOD U2


Liczby dodatnie reprezentowane są tak samo jak w kodzie binarnym, tylko trzeba dodad na najstarszym
bicie 0 np.
19

10

=(10011)

2

=(010011)

U2

Liczby ujemne natomiast można obliczyd według następującego algorytmu:
010011

U2

+19

101100 odwraca się bity
+1 i dodaje 1
101101

U2

- 19


background image

Mikroprocesory i mikrosterowniki

kolokwium 1

11

C. KOD SZESNASTKOWY

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

Zamiana kodu binarnego na szesnastkowy
np.
110

2

= 6

10

= 6

HEX

1100

2

=10

10

=A

HEX

1111

2

=15

10

=F

HEX

001101

2

= 00|1101= 0

10

13

10

= 0D

HEX

11101101

2

=1110|1101= 14

10

13

10

= ED

HEX

Zamieniając z dziesiętnego na hexagonalny, najłatwiej zamienid jest najpierw dziesiętny na binarny a
następnie binarny na hexagonalny.

D5B423

HEX

= 13x16

5

+ 5x16

4

+ 11x16

3

+ 4x16

2

+ 2x16

1

+ 3x16

0

= 14005283

10







Wykonane przez:
CVercetti
.:Spinx:.
na podstawie wykładu dra Piotra Markowskiego i datasheet ATmega8535.


Wyszukiwarka

Podobne podstrony:
Mikroprocesory i mikrosterowniki 2009 kolokwium 2
2008 2009 kolokwium 1id 26585
2009 Kolokwium pop 2
2009 Kolokwium 2
AMII 2009 kolokwium zaoczne przyklad1
2009 Kolokwium poprawkowe 1
Mikrostruktury Społeczne - kolokwium 1, Opracowania moje
Mikrostruktury Społeczne - kolokwium 3, Opracowania moje
Mikrostruktury Społeczne - kolokwium 4, Opracowania moje
GIEŁDA - szyja i klatka 2009, kolokwium KLATKA I SZYJA
AMII 2009 kolokwium zaoczne przyklad2
PRAKTYK - szyja i klatka 2009, kolokwium KLATKA I SZYJA
2008 2009 kolokwium 1id 26585
2009 Kolokwium pop 2
2009 Kolokwium poprawkowe 2
2009 Kolokwium 2
2009 Kolokwium poprawkowe 1
Mikroprocesory i mikrosterowniki
kolokowium 2 nowe pytania 2009, Anatomia człowieka, Kolokwium 2

więcej podobnych podstron