41 0 961KB
MINISTERUL EDUCATIEI AL REPUBLICII MOLDOVA UNIVERSITATEA TEHNICA A MOLDOVEI CATEDRA DE MICROELECTRONICA SI INGINERIE BIOMEDICALA
Raport Lucrare de laborator Nr.1 La disciplina Microprocesoare
Tema : „Initializarea in programarea assembler. Modulul periferic GPIO.”
A efectuat :
st. gr. MN – 131 Ignat Ion
A verificat:
lector asistent Lazari Eugeniu
Chisinau – 2014
Tema lucrării: De a face cunoştinţă cu limbajul de programare Assembler şi modulul periferic GPIO.
Obiective: O1.Sa utilizeze cu success cunostintele capatate referitor la sintaxa in ASM; O2.Sa propuna metode de formare a aplicatiei ce v-a satisfice conditia problemei; O3.Sa execute in proteus aplicatia alcatuita in Atmel studio; Definiția problemei: Sa se dezvolte o aplicatie care ar permite aprinderea si respectiv stingerea unui LED prin intermediul actionarii unui buton.
Noţiuni teoretice: Microcontrolerul reprezinta
un circuit electric digital care realizează orice funcţie în
dependenţă de programul care este înregistrat în el. Microcontrolerele din familia AVR prezinta o organizare de tipul RISC executînd o instucţiune / ciclu maşina. Prezenţa unor blocuri interne ca: oscilator intern, timere, unitate UART, SPI, rezistoare pull-up, PWM (pulse widith modulation), ADC, comparatoare, determină utilizarea acestor microcontrolere într-o gamă foarte largă de aplicaţii. Posibilitatea programării memoriei FLASH şi a memoriei EEPROM, determină ca aceste microcontrolere să aibă o largă utilizare datorită costului mic de dezvoltare a unei aplicaţii (timpul de proiectare scurt). O altă calitate remarcabilă a acestor microcontrollere este consumul foarte mic de energie. Domeniul tensiunilor de alimentare este cuprins între 1.8 si 5V. Prezintă 6 moduri diferite de stand-by ceea ce ne asigură că aceste microcontrolere nu vor consuma energie decît atunci cînd este nevoie. Utilizarea acestor microcontrollere poate reduce semnificativ timpul de dezvoltare a unei aplicaţii datorită prezenţei pe acestea a unui bloc de depanare în timp real, circuitul aflîndu-se chiar pe placa ce reprezintă aplicaţia. Se pot face în timp real operaţii de “watch” asupra unor regiştri, operaţii de rulare pas cu pas, operaţii de oprire în breakpoint. Printre cele mai utilizate microcontrollere de uz general putem specifica: ATMEGA 8, ATMEGA 16, ATMEGA 32, ATMEGA 128, ATMEGA 162 etc. ATmega 16 este un microcontroler CMOS de 8 biţi de mică putere bazat pe arhitectura RISC AVR îmbunătăţită. Dispune de un set de 131 instrucţiuni şi 32 de registre de uz general. Cele 32 de registre sunt direct adresabile de Unitatea Logica Aritmetică (ALU), permiţînd accesarea a două registre independente într-o singură instrucţiune. Se obţine astfel o eficienţă sporită în execuţie (de pînă la zece ori mai rapide decît microcontrolerele conveţionale CISC). Caracteristicile principale ale microcontrolerului ATmega16 sunt:
- 16KB de memorie Flash reînscriptibilă pentru stocarea programelor; - 1KB de memorie RAM; - 512B de memorie EEPROM; - două numărătoare/temporizatoare de 8 biţi; - un numărător/temporizator de 16 biţi; - conţine un convertor analog – digital de 10 biţi, cu intrări multiple; - conţine un comparator analogic; - conţine un modul USART pentru comunicaţie serială (port serial); - dispune de un cronometru cu oscilator intern; -oferă
32
de
linii
I/O
organizate
în
patru
porturi
(PortA,
PortB,
PortC,
PortD).
ATmega16 conţine 32 de registre de uz general si 64 de registre speciale pentru modulele I/O. Aceste registre sunt mapate la adrese din memoria RAM cuprinse între 0000h si 005Fh.
Fig.1 Schema generala a microcontrolerului Program counter – permite selectarea consecutivă a instrucţiunilor de memorie din program. Instruction Decoder – decodificator de comenzi care configurează nucleul pentru execuţia instrucţiunii curente, luînd în consideraţie starea curentă a nucleului. ALU – unitatea aritmetico-logică, permite realizarea operaţiilor aritmetice şi logice între 2 operanzi, generînd un rezultat în dependenţă de funcţia selectată. Regiştrii de uz general sunt considerate conteinere care participă nemijlocit la orice operaţie, la oricare operaţie (cu excepţii). RAM – este memoria ce permite păstrarea temporară a datelor pe parcursul executării unui program.
i/o – este sistemul de intrare/ieşire, permite contactul nucleului cu mediul extern; contactul este realizat în baza modulelor periferice (GPIO, ExtInt, TIMER, ADC, AC, UART, SPI, I2C, EEPROM). Modulul periferic GPIO (General Purpose Input/Output) este un pin generic pe un cip al cărui comportament poate fi controlat (programat) prin soft. Pinii GPIO n-au nici un scop special definit şi sunt nefolosite în mod implicit. Un microcontroler interfaţază nişte pini care fac legătura cu mediul extern. Cea mai simplă comunicare cu mediul extern poate fi transfer la nivelul logic, citirea niveluli logic de pe pin sau setarea pinului la un anumit nivel. Fiecare pin a microcontrolerului, în afară de cele de alimentare şi unele specializate, poate fi utilizat ca pin de intrare sau ieşire. Descrierea pinilor: - VCC – Sursa de current ; - GND – Masa; - Port A (PA7 ... PA0) - XTAL 1: Intrare pentru amplificatorul inversor al Oscilatorului; - XTAL 2: Ieşire pentru amplificatorul inversor al Oscilatorului. -AVCC: AVCC este pin de alimentare pentru Port-ul A si Convertorului A/D. Trebuie conectat extern la VCC, chiar dacă ADC nu este folosit. Dacă ADC este folosit, ar trebui conectat la VCC printr-un filtru trece-jos. - AREF: AREF este pinul de referinţă analogică pentru Convertorul A/D.
Fig. 2 Schema unui port fizic PINx - serveşte pentru citirea valorii logice de pe terminalul fizic, acest registru este accesibil doar pentru citire. Operaţia de scriere către acest registru nu va afecta valoarea fizică a terminalului fizic.
PORTx - registru de setare a valorii portului pentru cazul când este setat catre ieşire şi activarea rezistentei de pull-up în cazul când este setat către intrare.
DDRx - Registrul de setare a direcţiei portului, intrare sau ieşire.
În cazul când o locaţie a DDRx va conţine "1", pinul respectiv va fi setat către ieşire, iar valoarea logică din PORTx de la aceeaşi locaţie va fi tranferată către terminalul fizic. În cazul în care o locaţie a DDRx va conţine "0" , terminalul fizic respectiv va fi setat către intrare. În acest caz valoarea din registrul PORTx va conecta rezistenţa de pull-up cu valoarea logică "1", valoarea logică "0" va seta pinul în starea de impedanţă înaltă - "HiZ". Se recomandă de a evita starea de Hi-Z pe terminal, fapt ce are loc când terminalul nu este conectat la o sursa de semnal, pentru a evita introducerea de zgomote în interiorul cipului microcontrollerului, ce ar putea în cazurile critice duce până la defectarea circuitului. Toţi pinii I/O au diode de protecţie atât la VCC cât şi la împământare. Locaţia pinilor port intrare este read only, in timp ce Registru de Date şi DDR sunt read şi write. In plus, bitul PUD (dezactivare pull-up) din SFIOR dezactivează funcţia pull-up pentru toţi pinii din toate porturile când este setat. Majoritatea pinilor au funcţii alternative pentru caracteristicile periferice ale dispozitivului. Este de remarcat faptul ca activarea funcţiilor alternante ale unor pini port nu afectează utilizarea altor pini din port ca I/O general digital.
Registrii porturilor ( DDR, PORT, PIN) DDR=0 portul este setat intrare semnal DDR=1 portul este setat iesire semnal Daca DDR=0: PORT=0 rezistenta deconectata PORT=1 rezistenta conectata Daca DDR=1 PORT=0 la iesire 0 logic PORT=1 la iesire 1 logic
Mersul lucrării: 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 conţinut într-o structură de tip proiect. Paşii care trebuie urmaţi pentru a crea un proiect nou sunt: 1) 2) 3) 4)
Din fereastra initiala, selectam „New Project…” Apare fereastra „New project” unde alegem „AVR Assembler” si dam denumirea dorita Alegem tipul microprocesorului din fereastra „Device Selection” Scriem programul dupa care urmeaza a fi executat pentru depistarea eventuelelor erori
Înainte de a scrie programul propriu-zis, se introduce următoarea linie: include”m32def.inc”. Această linie este o directivă de compilare care indică numele fişierului ce conţine descrierea regiştrilor şi caracteristicilor microcontrolerului. Pentru efectuarea lucrării vom folosi microcontrolerul ATMega32, un buton si un LED ce emite lumină de culoare roşie. Cel mai comod este ca sa conectăm 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 conectăm butonul, să fie de intrare, iar cel la care conectăm LED-ul să fie de ieşire. Vom folosi portul B ca port de ieşire, iar portul C ca port de intrare. Schema funcţionează în felul următor: când butonul nu este acţionat, la ieşire avem cadere de tensiune care corespunde „1” logic, iar cand acţionăm butonul, la ieşire tensiunea scade până la zero („0” logic), şi astfel se formează o diferenţă de potenţial între port şi sursă şi se aprinde LED-ul. Rezistenţa R1 are rol de a limita curentul care trece prin diodă. Schema o vom testa folosind softul „Proteus”.
START
Commented [G1]: Aici avem skema bloc
Main_loop:
rjmp L1:
F
PortA 0=0
T
PortC,3=0
PortC 3=0
Finis
Listing-ul programului : .include "m32def.inc" .org 0 .cseg main: init: ldi out ldi out
R16,0b00000000 DDRB,R16 R16,0b00001000 PORTB,R16
ldi R16,0b11111111 out DDRC,R16 ldi R16,0b00000000 out PORTC,R16 end_init: main_loop: L1: sbic PINB,3 rjmp L3 L2: SBI PORTC,5 rjmp end_main_loop L3: CBI PORTC,5
; Sare dacă bitul din registrul I/O este şters
; Setarea bitului în registrul I/O ; Ştergerea bitului din registru I/O
end_main_loop: rjmp main_loop end_main:
Schemele electrice:
Fig.8 Schema electrica principiala
Fig.9 Schema la simulare dupa actionarea butonului
Concluzie: Efectuand aceasta lucrare de laborator, am insusit cum se programeaza un microcontroler cu ajutorul softurilor AVR Studio 5 si Proteus. Astfel, am scris un program in limbajul Assembler si cu ajutorul programului Proteus am programat virtual microprocesorul ATMEGA32. De asemenea, am studiat arhitectura acestui microprocesor si a modulului sau periferic GPIO.
Bibliografie : http://www.microlab.club/ reteua Internet