Sunteți pe pagina 1din 12

Laborator 1. Arhitecturi integrate de calculatoare de timp real. Microcontrolerul AVR ATMEGA128.

Medii de dezvoltare software pentru aplicaii de timp real. IAR pentru AVR. 1. Arhitecturi de calculatoare de timp real. AVR ATMEGA128 ntre un calculator de timp real i unul pentru aplicaii uzuale nu exist deosebiri eseniale. n esen un sistem de timp real trebuie s asigure un rspuns imediat la evenimente externe. Acesta presupune disponibilitatea pentru captarea evenimentului i tratarea rspunsului la acesta n orice moment al programului. Deci, ceea ce deosebete un sistem de timp real de unul obinuit este modul n care este organizat programul, astfel nct, avnd un singur procesor care poate opera la un anumit moment, s poat totui ndeplinii o cerin tipic mai degrab unor sisteme paralele. Aceasta se poate realiza prin descompunerea sarcinilor care trebuie s le asigure sistemul i repartizarea acestora pe procese care se execut concurent. n aceste condiii, singura cerin hardware impus pentru a putea realiza un sistem de timp real este ca s fie asigurate resursele pentru a putea implementa procesele concurente. n figura 1 este prezentat o arhitectur tipic de calculator de timp real:

Fig.1. Schema bloc al unui calculator de timp real

Cnd vorbim de resurse necesare pentru un STR ne referim la: - memorie de program pentru implementarea tehnicilor de programare concurent (administrarea proceselor, comutare context, etc); - memorie de date pentru lucrul cu variabile contor, semafoare i pentru salvarea temporal a contextului; - circuite periferice pentru captarea i contorizarea timpului, necesare pentru contorizarea proceselor, a evenimentelor, sincronizare comunicaii; - alte circuite periferice care permit comunicarea cu procesele externe controlate interfee paralele, seriale, analogice n funcie de specificul aplicaiei. ATmega128 este un microcontroler pe 8 bii realizat cu o arhitectur avansat de tip RISC. Are capacitatea de executare a mai multor instruciuni ntr-un singur ciclu de ceas, ATmega128 poate realiza cu aproximaie 1 MIPS / MHz, inndu-se cont la proiectarea sistemului de optimizarea consumului energetic n raport cu viteza de procesare. Nucleul microcontrolerului AVR l constituie un set bogat de instruciuni alturi de cei 32 de regitri de lucru cu scop general. Toi cei 32 de regitri sunt conectai la Unitatea Aritmetic i Logic (ALU), acest lucru permite accesarea a doi regitri independeni ntr-o singur instruciune executat ntr-un ciclu main. Arhitectura rezultat este mult mai eficient codat putnd realiza viteze de zece ori mai mari dect un microcontroler convenional de tip CISC. Atmega128 conine urmtoarele structuri de memorie: 128 Kb n sistem de programare rapid alturi de capacitatea de a citi i scrie simultan, 4 Kb de memorie SRAM, 32 de regitri de lucru cu scop general. Din punct de vedere al resurselor I/O amintim 53 de linii tip port paralel I/O, un numrtor n timp real (RTC), patru numrtoare/ temporizatoare cu mod de comparare i PWM, 2 USART-uri, o interfa serial pe doua fire, 8 canale analogice de intrare, respectiv difereniale cu ctig variabil, un convertor analog-digital pe 10 bii, numrtorul pentru circuitul Watchdog programabil cu ajutorul oscilatorului intern, un port serial SPI. n cele ce urmeaz vom face o trecere n revist a circuitelor periferice insistnd mai mult pe aspectele legate de configurarea acestora n vederea executrii anumitor programe. Vor fi prezentate doar circuitele periferice care vor fi folosite n laboratoarele care urmeaz, pentru detalii se va consulta foaia de catalog a microcontroler-ului. Porturile paralele Microcontrerul ATMEGA128 are 7 porturi paralele notate cu litere A,B,..G. Dintre acestea 6 sunt pe 8 bii (A..F) i unul pe 5 bii (G). Toate porturile se pot configura ca intrri sau ieiri la nivel de bit.

Fig.2. Schema bloc AVR ATMega128 (foaie de catalog) Configurarea direcionalitii unui port paralel se face scriind n registrul DDRx (x corespunde unui port A..G) cu urmtoarea organizare: DDRx IO7 IO6 IO5 IO4 IO3 IO2 IO1 IO0

La fiecare bit din registru i corespunde un bit de pe portul paralel direcionat astfel: IOi = 1 => bitul i al portului va fi configurat ca ieire, IOi = 0 => bitul i al portului va fi configurat ca intrare. Scrierea pe un port, daca acesta a fost configurat ca ieire, se face prin scrierea n registrul PORTx (x: A..G) iar citirea de pe un port, dac acesta a fost configurat ca port de intrare se face prin citirea din registrul PINx. Organizarea regitrilor PORTx i PINx este similar. PORTx este accesibil numai pentru scriere iar PINx numai pentru citire.

PORTx WR7 PINx RD7

WR6 RD6

WR5 RD5

WR4 RD4

WR3 RD3

WR2 RD2

WR1 RD1

WR0 RD0

Fiecare pin de port paralel are o funcie alternativ pe care o poate executa n condiiile n care se dorete acest lucru. n tabelele de mai jos sunt prezentate funciile alternative pentru toate porturile ATMega. Pin port PORTA PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 PORTB PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 PORTC PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 PORTD PD7 PD6 PD5 PD4 PD3 PD2 Funcie alternativ AD7 (adres/dat extern) AD6 (adres/dat extern) AD5 (adres/dat extern) AD4 (adres/dat extern) AD3 (adres/dat extern) AD2 (adres/dat extern) AD1 (adres/dat extern) AD0 (adres/dat extern) OC2/OC1C (ieire timer 2 sau ieire canal C timer 1) OC1B (ieire timer 1 canal B) OC1A (ieire timer 1 canal A) OC0 (ieire timer 0) MISO (interfa SPI comunicaie serial sincron) MOSI (interfa SPI comunicaie serial sincron) SCK (interfa SPI comunicaie serial sincron) SS (interfa SPI comunicaie serial sincron) A15(adres extern) A14(adres extern) A13(adres extern) A12(adres extern) A11(adres extern) A10(adres extern) A9(adres extern) A8(adres extern) T2 (intrare ceas timer 2) T1 (intrare ceas timer 1) XCK1 (intrare ceas comunicaie serial asincron canal 1) IC1 (intrare captur canal 1) INT3/TXD1 (ntrerupere extern 3 sau transmisie serial canal 1) INT2/RXD1 (ntrerupere extern 2 sau recepie serial canal 1)

PD1 PD0 PORTE PE7 PE6 PE5 PE4 PE3 PE2 PE1 PE0 PORTF PF7 PF6 PF5 PF4 PF3 PF2 PF1 PF0 PORTG PG4 PG3 PG2 PG1 PG0

INT1/SDA (ntrerupere extern 1 sau comunicaie I2C serial sincron) INT0/SCL (ntrerupere extern 0 sau comunicaie I2C serial sincron) INT7/IC3 (ntrerupere extern 7 sau intrare captur timer 3) INT6/T3 (ntrerupere extern 6 sau intrare ceas extern timer 3) INT5/OC3C (ntrerupere extern 5 sau ieire canal C timer 3) INT4/OC3B (ntrerupere extern 5 sau ieire canal B timer 3) AIN1/OC3A (intrare analogic 1 sau ieire canal A timer 3) AIN0/XCK0 (intrare referin analogic 0 sau intrare ceas comunicaie serial asincron canal 0) PDO/TXD0 (ieire programare sau transmisie comunicaie serial asincron canal 0) PDI/RXD0 (intrare programare sau recepie comunicaie serial asincron canal 0) ADC7/TDI (interfa analog-digital sau interfa JTAG) ADC6/TDO (interfa analog-digital sau interfa JTAG) ADC5/TMS (interfa analog-digital sau interfa JTAG) ADC4/TCK (interfa analog-digital sau interfa JTAG) ADC3 (interfa analog-digital) ADC2 (interfa analog-digital) ADC1 (interfa analog-digital) ADC0 (interfa analog-digital) TOSC1 (intrare oscilator timp real) TOSC2 (intrare oscilator timp real) ALE (comand magistral extern) RD (comand magistral extern) WR (comand magistral extern)

Dac se lucreaz n oricare din aceste funcii alternative n mod evident pinul alocat nu mai poate fi folosit i ca pin general IO. Configurarea unui port paralel se face n urmtorii pai: 1. se seteaz direcionalitatea liniilor portului (intrri sau ieiri); 2. se efectueaz pentru liniile de ieire iniializarea lor prin scrierea valorilor de pornire. Circuitele temporizatoare-numrtoare ATMEGA are 4 circuite temporizatoare-numrtoare: dou circuite pe 8 bii (numrtor/temporizator 0 i numrtor/temporizator 2) i alte dou pe 16 bii

(numrtor/temporizator 1 i numrtor/temporizator 3). Circuitele pe 16 bii au 3 canale independente pe care se poate face captura semnalelor externe, adic pot numra 3 semnale externe distincte. Toate circuitele lucreaz n mai multe moduri. Ele primesc un semnal de ceas, extern sau intern, n ritmul cruia numr, n sens cresctor. Intervalul de numrare maxim este pentru cele pe 8 bii ntre 00 i FFh (256) iar pentru cele pe 16 bii ntre 0000h i FFFFh (65535). Circuitul semnalizeaz momentul n care a depit valoarea maxim, n modul numrtor sau cnd a atins o valoare aflat n registrul OCRx n modul comparator. Valoarea curent a numrtorului (temporizatorului) se afl stocat n regitrii TCNT0 i TCNT2 (pe 8 bii) i n regitrii TCNT1 i TCNT3 (pe 16 bii). Alturi de constanta de divizare care se configureaz scriind registrul TCNTx circuitele numrtor mai conin i in plus i un prescaler. Acesta poate realiza divizri ale ceasului cu: 1, 8, 64, 256, 1024. Circuitele de numrare au mai multe moduri de lucru: - numrtor normal (normal) divizor de frecven: va numra n sens cresctor pornind de la valoarea scris n registrul TCNT. Va semnaliza momentul n care a ajuns la maxim (FFh sau FFFFh). n acest moment numrtoarea se va opri. Reluarea numrri se va face prin rencrcarea registrului TCNT. Circuitul poate genera cere de ntrerupere n momentul n care a ajuns la maxim; - comparare cu o valoare (clear timer on compare match): va numra in sens cresctor pornind de la valoarea scris n TCNT. Va semnaliza momentul n care starea curent a numrtorului este egal cu valoarea care exist n registrul OCR. Automat reseteaz valoarea lui TCNT deci se va relua numrtoarea. Ieirea corespunztoare circuitului sau canalului (OCi) va fi setat ntr-o stare opus celei anterioare la fiecare sfrit al numrrii. Circuitul poate genera cerere de ntrerupere cnd se ajunge la egalitate n urma comparrii; - modulator impulsuri n lime (fast PWM): va numra n sens cresctor pornind de la valoarea scris n TCNT. Va semnaliza momentul n care a ajuns la o valoare egal cu cea aflat n registrul OCR. n acest moment ieirea OCi va fi resetat (pus n 0). Se va continua numrarea pn cnd va ajunge la valoarea maxim. Este semnalizat i atingerea acestei valori iar ieirea OCi este pus n 1. Se reia numrarea. Circuitul poate genera cerere de ntrerupere cnd se ajunge la egalitate cu OCR i/sau cnd este atins valoarea maxim; - modulator impulsuri n lime defazat (phase correct PWM): va numra n sens cresctor. La fel ca i n modul anterior, cnd ajunge la o valoare egal cu cea din registrul OCR reseteaz ieirea OCi. Circuitul continu numrarea. Semnalizeaz n momentul n care ajunge la valoarea maxim. Din acest moment reia numrarea n sens descresctor. Cnd ajunge din nou la valoarea lui OCR seteaz ieirea OCi n 1. Continu numrarea descresctoare pn la 0 dup care reia. Circuitul poate genera cerere de ntrerupere cnd este atins valoarea din OCR att pe frontul cresctor ct i pe cel descresctor. Pentru operarea cu canale timer se va proceda astfel: 1. se stabilete modul de lucru; 2. se stabilete sursa ceasului (temporizator sau numrtor);

3. se stabilete valoarea registrului OCR dac se lucreaz n modul comparator, modulator PWM sau modulator PWM defazat i a registrului TCNT dac se lucreaz n modul normal; 4. se activeaz lucrul cu ntreruperi dac se dorete.

Circuite seriale ATMEGA are 2 canale seriale UART0 i UART1. Acestea pot lucra independent fiecare putnd avea urmtoarele caracteristici: ceas generat intern sau extern (pe pinii XCK0 sau XCK1) pentru stabilirea ratei de transfer; pot asigura transmisie i (sau) recepie serial asincron i sincron; pachetul poate conine 5,6,7,8 sau 9 bii de date; pachetul poate avea sau nu bit de paritate; pachetul poate conine 1 sau 2 bii de stop; viteza de comunicaie se poate seta prin configurarea regitrilor UBRRLx i UBRRHx (care concatenai constituie registrul pe 16 bii UBRRx) corespunztori fiecrui canal astfel:

Calcul vitez de Calcul valoare UBRR n comunicaie (bps) n funcie funcie de viteza de de UBRR comunicaie Asincron, mod normal f osc f osc Viteza = UBRR = 1 (U2X = 0) 16( UBRR + 1) 16 Viteza Asincron, mod vitez dubl f osc f osc Viteza = UBRR = 1 (U2X = 1) 8( UBRR + 1) 8 Viteza Sincron, mod master f osc f osc UBRR = 1 Viteza = 2 Viteza 2( UBRR + 1)

Mod de operare

ntreruperea poate aprea la recepie sau la emisia unui octet.

Pentru lucrul cu circuitele seriale se procedeaz astfel: 1. Se stabilete frecvena de comunicaie si se calculeaz valoarea din registrul UBRR; 2. Se stabilete numrul de bii de date pe un pachet; 3. Se stabilete numrul de bii de paritate i numrul de bii de stop; 4. Se activeaz ntreruperile, dac se dorete lucrul cu ntreruperi.

Medii de dezvoltare software pentru aplicaii de timp real. Pachetul IAR IAR Make Application

Este utilizat pentru configurarea facil a microcontrolerului AVR ATMega. Acesta implic att nucleul de procesare ct i circuitele periferice. Sunt introduse opiunile referitoare la configuraia circuitelor perifericelor. Se obine un set de librrii descrise n limbajul C (fiiere .c i .h). Modul de utilizare este urmtorul: 1. se ruleaz aplicaia MakeApplication (shortcut pe desktop); 2. primul ecran al aplicaiei este unul cu un proiect gol deja deschis ca n figur;

3. Se salveaz proiectul (director pe discul D); 4. Din lista cu microcontrolere din stnga se trage folosind mouse-ul ATmega128; 5. Dac manevra a fost executat corect va aprea afiat pe ecran fereastra de mai jos:

n cmpul editabil User defined name se introduce numele configuraiei (opional, poate fi i numele proiectului) i se apas apoi OK; 6. Fereastra proiectului ca trebui s arate acum ca n figura de mai jos:

Se observ n ecranul principal circuitul cu numele configuraiei pe el introdus i o list cu butoane care reprezint tot ce se poate configura la microcontroler (nconjurat n figur). Pentru exemplificare se apas butonul I/O din list ceea ce semnific o configurare a porturilor paralele. 7. Va aprea fereastra pentru configurarea porturilor I/O ca n figura de mai jos:

Se observa n fereastr cte un TAG pentru fiecare port (A..G). Conform celor menionate la prezentarea porturilor paralele, iniializarea lor se face n doi pai: setarea direciei i configurarea valorii iniiale pentru pinul respectiv. Se poate observa ca la fiecare pin, de pe fiecare port, i corespunde dou setri: Pin function care

se refer la direcionalitatea pinului i Output data care se refer la valoare (este luat n considerare numai dac pinul a fost configurat ca ieire). Configurarea se face accesnd lista derulant corespunztoare liniei fiecrei setri (click mouse pe valoarea fiecrei setri). Pentru exemplificare se vor configura la portul A pinii 7,5,3 ca ieiri i pinii 6,4,2,1,0 ca intrri. Fereastra va arta ca mai jos:

Output data pentru ieiri a fost lsat setat cu valoarea low adic vor avea iniial valoarea 0. 8. Se selecteaz ultimul TAG din fereastr numit Output generation. Vom avea o fereastr ca mai jos:

n aceast fereastr sunt reprezentate toate funciile care vor fi generate si cele dou fiiere numite ma_io.c i ma_io.h . Funciile au urmtoarele semnificaii: MA_Init_IO iniializeaz porturile I/O conform setrilor care au fost realizate; MA_Reset_IO reseteaz porturile I/O la setrile iniiale (toi pinii sunt neutilizai); MA_SetPortIn configureaz pini din port ca intrare; MA_SetPortOut_IO configureaz pini din port ca ieire; MA_ReadPort_IO citete pini din port (pinii au fost configurai ca intrri); MA_WritePort_IO scrie pini din port (are efect numai dac pinii au fost configurai ca ieiri). Se d click pe numele fiierului ma_io.c i apoi se apas butonul Generate all functions ceea ce nseamn c toate funciile de mai sus vor fi generate ca funcii. 9. Dup ce setrile au fost realizate se apas OK pentru a fi nchis fereastra de setri pentru porturile IO. Paii 6,7 i 8 se repet i pentru setarea altor componente. Dup ce toate setrile au fost realizate se selecteaz din meniul Project opiunea Project Settings (sau se apas butonul Project Settings din bara cu butoane). Va aprea urmtoarea fereastr:

n dreptul cmpului Output directory se apas butonul de navigare (etichetat cu 3 puncte) i se selecteaz directorul unde a fost salvat i proiectul. Se apas OK. 10. Se selecteaz din meniul Project opiunea Generate all (sau se apas butonul Generate output and project report). Este verificat corectitudinea setrilor i sunt generate librriile care vor putea fi apoi importate ntr-un proiect, pentru construirea unei aplicaii. Fiierele pot fi deschise cu un editor text i se poate observa codul din acestea, precum i explicaiile date la fiecare funcie, n limba englez. De asemenea este construit un raport referitor la funciile realizate n fiierul report.html, aflat chiar n directorul unde au fost create librriile.

Probleme. 1. S se consulte fiierele ma_io.c i ma_io.h generate dup urmrirea etapelor de mai sus. S se determine parametrii i valorile returnate de funcii. 2. Urmrind paii prezentai s se realizeze fiierele librrie cu urmtoarele configuraii: Portul A: 7,6,5,4 : intrri, 3,2,1,0 : ieiri. Portul B: 7,6,3,2, : ieiri 5,4,1,0 intrri. 3. Urmrind etapele prezentate la configurarea circuitelor temporizatoare s se configureze circuitul temporizator, cu sursa ceasului intern, n modul normal de lucru i un prescaler de 256. Se vor consulta librriile i se vor observa funciile. Ce se schimb n librrie la activarea ntreruperii? 4. S se configureze circuitul UART0 s poat recepiona i transmite pachete de date pe 8 bii, 1 bit de stop fr paritate. Rata de transfer a datelor dorit este 9600 bps. Frecvena de lucru a sistemului este de 16MHz.

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