Sunteți pe pagina 1din 7

Ministerul Educaiei si Tineretului al Republicii Moldova Universitatea Tehnica a Moldovei Catedra MDS

Raport
Microcontrolere Lucrarea de laborator nr.1

TEMA: Initiere in programarea microcontrolerelor.

A elaborat studentul grupei ME-061: A verificat

Andoni Andrei Bragarenco Andrei

CHIINU 2008

Scopul lucrrii: De construit un dispozitiv de control a unui LED. Cnd butonul e acionat, LED-ul trebuie sa se aprind, altfel LED-ul e stins. 1. Noiuni generale ATmega16 este un microcontroler RISC pe 8 biti realizat de firma Atmel. Caracteristicile principale ale acestuia snt: 16 KB de memorie flash reinscripribil pentru stocarea codului ; 1 KB de memorie ROM ; 512 B de memorie EEPROM ; dou numrtoare/temporizatoare de 8 bii ; un numrtor/temporizator de 16 bii ; conine un convertor analog-digital cu intrri multiple ; conine un comparator analogic ; conine un modul USART pentru comunicaie serial ; dispune de oscilator intern ; ofer 32 de linii I/O organizate in 4 porturi ; Structura intern general a controlerului este prezentat in figura 1. Se poate observa c exist o magistral de date la care sunt conectate mai multe module: unitatea aritmetic i logic (ALU) ; registrele generale ; memorial RAM i memoria EEPROM ; liniile de intrare (porturile I/O lines) i celelalte blocuri de intrare / ieire ; Aceste ultime module sunt controlate de un set special de registre, fiecare modul avnd asociat un numr de registre specifice. Memoria Flash de program mpreun cu ntreg blocul de extragere a instruciunilor, decodare i execuie comunic printr-o magistral proprie, separat de magistrala de date menionat mai sus. Acest tip de organizare este conform principiilor unei arhitecturi de tip HARVARD i permite controlerului s execute instruciunile foarte rapid.

Figura 1: Structura general a microcontrolerului ATmega16

ATmega16 conine 32 de registre de uz general i 64 de registre speciale pentru modulele I/O. Aceste registre sunt mapate la adresele din memoria RAM cuprinse ntre 0000h i 005Fh. ATmega16 dispune de 32 de linii de I/O grupate n 4 porturi de 8 bii. Porturile sunt denumite cu literele A, B, C i D. Fiecare pin al oricrui port se poate seta individual ca intrare sau ieire fr s afecteze ceilali pini. n plus, anumii pini se pot utiliza pentru funcii speciale ale microcontrolerului. n figura 2 este prezentat structura general a unui pin. Toi cei 32 de pini au fiecare cte o rezisten pull - up care poate fi activat sau dezactivat.

Figura 2: Structura general a unui pin

Operaiile cu porturile se fac prin intermediul unui set de patru regitri alocai fiecrui port: PORTx, PINx i DDRx; x poate fi A, B, C sau D. Aceti registri fac parte din categoria de regitri de intrare/ieire, de aceea instruciunile care pot lucra direct cu ei sunt CBI, SBI, IN i OUT. Regitrii DDRx stabilesc dac un pin este intrare sau ieire. Astfel, un bit cu valoarea 1 n registrul DDRx face ca pinul corespunztor s fie considerat ieire, altfel pinul va fi intrare. Regitrii PORTx sunt utilizai pentru a scrie o valoare n portul corespunztor, iar regitrii PINx se folosesc pentru a citi valoarea prezent pe pinii unui port. Activarea sau dezactivarea rezistenelor pull up este determinat de bitul PUD din registrul SFIOR i de valorile regitrilor PORTx i DDRx aa cum se poate de obsrvat n tabelul urmtor: Bitul din DDRx Bitul din PORTx 0 0 0 1 0 1 1 0 1 1 * Valoare implicit Bitul PUD nu conteaz 0* 1 nu conteaz nu conteaz Tipul pinului intrare intrare intrare ieire ieire Rezisten pull - up inactiv activ inactiv inactiv inactiv

2. Prezentarea general a mediului software AVRStudio AVRStudio este un mediu de software dezvoltat de Atmel pentru nscrierea n limbaj de asamblare, compilarea i simularea de programe destinate microcontrolerelor produse de aceast companie. Orice program scris n AVRStudio este coninut ntr-o structur de tip proiect. Paii care trebuie urmai pentru a crea un proiect nou sunt: dup lansarea programulu apare o fereastr similar cu cea din figura 3. Se va alege opiunea Create New Project ; Figura 3: Fereastra de dialog primar

n acest moment se va afia o fereastr asemntoare cu cea din figura 4. Se bifeaz opiunile Create Initial File i Create Folder, se completeaz cmpurile Project Name i Location iar apoi se apas butonul Next ; . Figura 4: Fereastra de dialog pentru denumirea proiectului

Din fereastra care apare se selecteaz AVR Simulator ca Debug Platform , apoi se selecteaz din list microcontrolerul ATMega16 i n final se apas butonul Finish;

Figu

ra 5: Alegerea tipului de microcontroler

nainte de a scrie programul propriu-zis, se introduce urmtoarea linie: .includem16def.inc Aceast linie este o directiv de compilare care indic numele fiierului ce conine descrierea regitrilor i caracteristicilor microcontrolerului. Dup scrierea programului, se aleg opiunile Save Project i Built din meniul Project.Orice erori de sintax vor fi semnalate de compilator ; Pentru a scrie un nou program, din meniul Project se va alege opiunea Project Wizard. Dup ce se apas butonul OK din fereastra de dialog aprut, se vor repeta paii prezentai mai sus ;

3. Descrierea lucrrii: Pentru efectuarea lucrrii vom folosi microcontrolerul ATMega16, un buton si un LED ce emite lumin de culoare roie. Cel mai comod este ca sa conectm butonul la un port al microcontrolerului, iar LED-ul la altul. n acest caz programul pe care l voi scrie trebuie s seteze portul la care conectm buonul s fie de intrare, iar cel la care conectm LED-ul s fie de ieire. Vom folosi portul D ca port de ieire, iar portul B ca port de intrare. Schema funcioneaz n felul urmtor: cnd butonul nu este acionat, la ieire avem cadere de tensiune care corespunde 1 logic, iar cand acionm butonul, la ieire tensiunea scade pn la zero (0 logic), i astfel se formeaz o diferen de potenial ntre port i surs i se aprinde LED-ul. Rezistena R1 are rol de a limita curentul care trece prin diod. Schema electric a circuitului folosit este reprezentat n figura 6. 5

Programul l vom testa folosind softul Proteus. Figura 6: Schema electric dispozitivului.

4. Algoritmul Pentru a scrie programul, avem nevoie de un algoritm. n cazul nostru algoritmul este: Dup setrile iniiale ale porturilor, microcontrolerul trebuie s intre intr-un ciclu nentrerupt, n procesul cruia el trebuie s verifice starea portului de intreare, conectat la buton, i n dependen de starea lui s controleze LED-ul cnd s se aprind i cnd s se sting. Operaii de iniializare a controlerului: iniializarea stivei; setarea portului B ca port de ieire; se d la ieirea PB.0 semnalul uniii logice(se stinge LED-ul); configurm portul D ca port de intrare; activm rezistena pull-up a portului D; Operaii ce se conin n interiorul ciclului: citim starea pinului PD.0 a portului D ; dac la acest pin este 1 logic, se stinge LED-ul ; dac la pinul PD.0 este 0 logic, se aprinde LED-ul ; se ncepe ciclul de la nceput ; 5. Listingul programului: 1 2 3 4 5 6 7 8 .includem16def.inc .list .def temp=R16 .cseg .org 0 ldi temp, HIGH (RAMEND) out SPL, temp ldi temp, 0 ; se include fiierul de descriere a controlerului ; activarea listingului ; definirea registrului cu care vom lucra ; se alege segmentul codului de program ; se stabilete adresa curent la 0 ; se alege adresa vrfului stivei ; nregistrarea adresei n registru ; scrim 0 n registrul temp 6

9 10 11 12 13 14 15 16 17 18

out ldi out out out ldi out main :

DDRD, temp temp, 0xFF DDRB, temp PORTB, temp PORTD, temp temp, 0x80 ACSR, temp in temp, PIND out PORTB, temp rjmp main

; scrim 0 n DDRD (setm portul D ca port de ieire) ; scrim cifra $FF n registrul temp ; scrim temp n DDRB (setm portul B la ieire) ; scrim temp n portul B (se stinge dioda) ; scrim temp n portul D (activm rezistena pull-up) ; se dezactiveaz comparatorul ; se citete coninutul portului PD ; se transfer coninutul n portul PB ; salt la nceputul ciclului

6. Descrierea programului n listingul programului se folosesc cteva directive. Directivele snt nite instruciuni special ajuttoare, care determin regimul compilrii i realizeaz diferite funcii ajuttoare. Am folosit urmtoarele directive: .include - aceasta este o directiv de compilare care indic numele fiierului ce conine descrierea regitrilor i caracteristicilor microcontrolerului; .list aceast directiv activeaz funcia de generare a listingului programului. n listingul generat se gsete codul programului i eventualele greeli. Dac programatorul nu are nevoie de listing, nu trebuie sa scrie aceast directiv ; .def aceast directiv permite de a asocia diferitor regitri orice nume dorim noi, ca n timp ce scrim/citim programul s ne fie mai comod ; .cseg directiv de alegere a segmentului de memorie utilizat ; Comenzile folosite n program: ldi, out, in i rjmp. Comanda ldi (load immediate) ncarc o constant ntr-un registru. Comenzile in i out citesc i respectiv scriu ntr-un registru valoarea altui registru. Comanda rjmp (relative jump) are funcia de a sri ntr-un anumit loc al programului, unde este marcat printr-o etichet. n programul nostru rjmp sare la eticheta main. n urma compilrii programului, dac nu snt erori, obinem un fiier cu extensia *.hex. Acest fiier se va folosi ca Program File pentru microcontrolerul ATmega16, funcionarea cruia o vom simula folosind softul Proteus. 7. Concluzii n aceast lucrare am scris primul program n assembler pentru microcontrolerul ATmega16. Am folosit cteva comenzi de baz pentru a programa microcontrolerul s efectuieze funcia necesar (de aprindere a LED-ului). Am vzut cum programul lucreaz direct cu regitrii microcontrolerului pentru a efectua pas cu pas comenzile scrise. Simulnd circuitul electric al dispozitivului n Proteus putem vedea n timp real cum funcioneaz microcontrolerul programat.

S-ar putea să vă placă și