Sunteți pe pagina 1din 8

Arhitecturi cu microprocesor

Curs 3
3.1. Porturi de Intrare/Ieire. Functii si registri utilizate de porturi

Una din cele mai importante trasaturi ale unui microcontroler este numarul de pini intrare/iesire folositi pentru conexiunea cu perifericele. In cazul microcontrolerului PIC16F887 sunt disponibili 35 de pini generali de I/E (intrare/iesire), numar sufficient pentru majoritatea aplicatiilor. Pinii sunt organizati pe 8 biti, in mode similar unor registre in 5 porturi A, B, C, D si E. Din motive practice, multi pini I/E au doua sau trei functiuni. Daca un pin are o anumita functionalitate, el nu mai poate fi utilizat ca pin de intrare iesire. Fiecare port are un registru TRIS asociat: TRISA, TRISB, TRISC, etc., care determina performantele portului. Acest registru nu contine informatia in biti a portului la momentul respectiv. Configurarea pinilor portului pentru iesire se face prin stergerea unor anumiti biti din registrul TRIS (bit = 0). Configurarea pinilor portului pentru iintrare, se face prin setarea unor anumiti biti din registrul TRIS (bit = 1).

Fig. 3-1 IO Porturi I/E

Portul A si Registrul TRISA Port A is an 8-bit wide, bidirectional port. Bits of the TRISA and ANSEL control the PORTA pins. All Port A pins act as digital inputs/outputs. Five of them can also be analog inputs (denoted as AN). In cele ce urmeaza, vom nota cu: R/W bit care poate fi citit sau scris, (x) dupa reset, starea bitului nu este cunoscuta (impredictibila), (1) dupa reset bitul este setat pe 1, (0), dupa reset, bitul este setat pe 0.

Similar bitilor registrului TRISA, care determina care din pini vor fi configurati ca intrari si care care din pini vor fi configurati ca iesiri, bitii din registrul ANSEL sunt setati in conform cerintelor daca pinii sunt intrari analogice, sau intrari/iesiri digitale. RA0 = AN0 (bit ANS0 registru ANSEL); RA1 = AN1 (bit ANS1 registru ANSEL); RA2 = AN2 (bit ANS2 registru ANSEL); RA3 = AN3 (bit ANS3 registru ANSEL); RA5 = AN4 (bit ANS4 registru ANSEL).

Fiecare bit al acestui port are functii suplimentare care sunt legate de unitatile periferice component ale microcontrolerului. Acestea se refera numai la pinii RA0 si la functiile referitoare la portul A.
// PORTA.2 pin este configurat ca intrare digitala. // Toti ceilalti pini PORTA sunt iesiri digitale ANSEL = ANSELH = 0; // Toti pinii I/O sunt configurati I/O digitale PORTA = 0; // Stergem toti pinii PORTA TRISA = 0b00000100; // Totii pinii PORTA cu excepta PORTA.2 sunt configurati ca // iesiri ...

Unitatea ULPWU Microcontrolere sunt utilizate in mod obisnuit in aplicatii care trebuie sa functioneze in perioade determinate de timp (sau la aparitia unui eveniment) complet independent, folosind o baterie de alimentare. In astfel de cazuri, una din prioritati devine consumul cit mei mic de energie. Exemple de astfel de aplicatii sunt: termometre, senzori detector de incendiu, monitorizarea parametrilor viatli ai unui pacient, etc. Se cunoaste faptul ca reducerea frecventei ceasului utilizat la un processor reduce consumul de energie si ca urmare, una din solutiile posibile a fi utilizate este folosirea unui micsorarea frecventei ceasului (cristal de cuart de 32KHz in loc de 20MHz). Alta modalitate utilizata este asa numitul setare in mod somn (sleep mode). Oricare din aceste doua metode ridica o noua problema, si anume cum revenim la starea normala. Este nevoie de un semnal extern care sa schimbe starea logica a unor pini. Microcontrolerul detecteaza aceasta stare noua si actioneaza ca atare, trecind din nou la starea normal de functionare. Solutia implica utilizarea unor component electronice externe, dar asta implica un consum suplimentar de energie. O solutie ideala este ca microcontrolerul sa se trezeasca periodica pentru a trece in modul normal de functionare.

Principiul este urmatorul. Se configureaza un pin ca iesire logica si se seteaza pe valoarea logica 1. In exterior este sunt doua component, un resistor si un condesator. Condensatorul se incarca, iar rezistenta R limteaza curentul. Imediat pinul este setat ca intrare, si schimbarea logica determina o intrerupere, iar microcontrolerul este setat in mod Sleep. Descarcarea treptata a condensatorului va duce la schimbarea valorii de intrare a pinului si vom avea o noua intrerupere, care va duce la starea normal a microcontrolerului.

Portul B si Registrul TRISB

Fig. 3-5 Portul B si registrul TRISB register Sase pini ai acestui port actioneaza ca intrari analogice. Bitii registrului ANSELH sunt utilizati pentru setarea acestori pini ca intrari analogice sau intrari/iesiri digitale. RB0 = AN12 (bit ANS12 registru ANSELH); RB1 = AN10 (bit ANS10 registru ANSELH); RB2 = AN8 (bit ANS8 registru ANSELH); RB3 = AN9 (bit ANS9 registru ANSELH); RB4 = AN11 (bit ANS11 registru ANSELH); RB5 = AN13 (bit ANS13 registru ANSELH).

Toti pinii portului au construite rezistoare pull-up, utilizate in conexiuni butoate, switch-uri sau optocuploare. Pentru a conecta aceste rezistoare la porturile microcontrolerului, trebuie setati bitii registrului WPUB. De asemeni, mai exista un bit care este afectat de utilizarea rezistoarelor pull-up , si anume, bitul RBPU din registrul OPTION_REG

Fig. 3-6 Registru WPUB

Daca sunt validati, fiecare bit al portului B poate cauza o intrerupere prin schimbarea starii sale logice. Pentru a valida intreruperile la acesti pini, trebuie setati bitii corespunzatori ai registrului IOCB.

3.2.

Exemple de aplicatie simpla care utilizeaza portul A.

Prima aplicatie are ca scop aprinderea unor LED-uri la portul A sau B. In exemplu este dat portul B, iar ca exercitiu se tranalateaza codul in C si schema pentru portul A.

void main() { ANSEL = 0; ANSELH = 0; PORTB = 0b01010101; TRISB = 0; }

// Configuram toti pinii I/O digital // // Combinatie binara port B Pinii B sunt configurati ca iesiri

O aplicatie mai intersenta este ca diodele sa clipeasca, eventual dupa un anumit program si intr-o anumita ordine.
int k;

void main() { ANSEL = 0; ANSELH = 0; PORTB = 0xFF; TRISB = 0; Delay_ms(1000); PortB = 0;

// Configuram toti pinii I/O digital // Reset port B // Pinii B sunt configurati ca iesiri // Intiriziere 1s

// Incepe bucla for for(k=1; k<20; k++)

// ramine in bucla k=120, k este incrementat cu 1 // dupa fiecare iteratie switch(PORTB) { // Monitorizare stare Port B prin switch case 0x00: PORTB = 0xFF; // Daca PORTB=0, schimba starea in 0xFF Delay_ms(100); // intirziere 100 ms Break; Case 0xFF: PORTB = 0x00; // Daca PORTB=0xFF, schimba starea in 0 Delay_ms(500); // intirziere 500 ms Break; } // combinatia binara Port B

} PORTB = 0b01010101; while(1) { PORTB = ~PORTB; Delay_ms(200); }

// inversare stare logica Port B

O alta aplicatie foarte des utilizata este folosirea in sisteme care utilizeaza tastatura cu butoane tip tastatura. Una din trasaturile portului B (de vazut cum se aplica in cazul portului A) este de a genera intrerupere la apasarea unei taste. Ca urmare nu este necsar sa se scaneze permanent portul de iesire pentru a vedea daca a s-a schimbat starea, adica a fost apasat un buton.

Fig. 3-9 Exemplu utilizare tastatura

/* Pinii PORTB.1 sunt configurati ca iesiri digitale. Orice schimbare in starea lor va cauza o intrerupere. Iesirile au rezistoare pull-up. Toti ceilalti pini ai portului B sunt configurati ca iesiri digitale.*/ ANSEL = ANSELH = 0; // Toti pinii I/O sunt configurati ca logici (digitali) PORTB = 0; // Sterge toti pinii portului PORTB TRISB = 0b00000010; // Toti pinii portului PORTB cu exceptia PORTB.1 sunt //configurati ca iesiri RBPU = 0; // Validare rezistori Pull-up WPUB1 = 1; // Rezistorul Pull-up conectat la pinul PORTB.1 IOCB1 = 1; // Pinul PORTB.1 poate genera o intrerupere pe schimbare stare // logica RBIE = GIE = 1; // Validare intrerupere ...

Pinul RB0/INT Pinul RB0/INT este o sursa intrerupere valid pe true. El poate fi reconfigurat pentru a reactiona la front crescator (tranzitie zero-unu) sau la front descrescator (tranzitie unu-zero). Bitul INTEDG al resgistrului OPTION_REG selecteaza semnalul. Se observa ca microcontrolerul PIC16F887 nu are pini speciali pentru programare (scrierea programului in ROM). Pinii porturilor sunt de uz general si sunt uitilizati ca pini I/O pentru programare (pinii Port B pentru ceas, RB6 si transfer de date RB7. In plus, este necesar sa se aplice o tensiune suplimentara Vdd (5V) si Vss (0V) ca tensiune pemtru meoria programabila FLASH Vpp (12-14V). In timpul programarii se aplica tensiunea Vpp pe pinul MCLR. Programul poate fi incarcat chiar daca el este deja inlclus in dispozitivul tinta.. Aceasta functionalitata este descrisa ca fiind ICSP (InCircuit Serial Programming). Este necesar a se utilize un conector cu 4 pini in dispozitivul tinta pentru a putea fi aplicate tensiunile corespunzatoare la pinii microcontrolerului. Pentru ca aceste tesniuni sa nu interfere cu alte circuite, este necesara proiectarea unor unui circuit de separare cu rezistoare sau jumpere. Aceste tesniuni se plica la soclul dispozitivului unde este plasat microcontrolerul.

Portul C si registrul TRISC

Portul D si registrul TRISD

Port E and TRISE Register Portul E etse un port pe 4 biti, bidirectional. Registrul TRISE determina functionalitatea pinilor. Un 1 logic configureaza pinul ca intrare cu exceptia RE3 care este intrare numai cind bitul sau TRIS este intotdeaunna citit ca 1.

Similar porturilor A si B, trei pini pot fi configurati va intrari analogice, folosind registrul ANSELH: RE0 = AN5 (bit ANS5 al registrului ANSEL); RE1 = AN6 (bit ANS6 al registrului ANSEL); RE2 = AN7 (bit ANS7 al registrului ANSEL).

/* Pinul PORTE.0 este configurat ca intrare analogica in timp ce ceilalti trei pini ale aceluiasi port sunt configurati ca logici (digitali). */ ... ANSEL = 0b00100000; // Pinul PORTE.0 pin este configurat ca analogic ANSELH = 0; // Toti celalti pini I/O sunt configurati ca logici TRISE = 0b00000001; // Toti pinii PORTE exceptat PORTE.0 sunt configurati ca iesiri PORTE = 0; // Toti pinii PORTE sunt stersi ...

Registri ANSEL si ANSELH Registri ANSEL si ANSELH sunt folositi la configiurare intrari ca logice sau analogice.

Pentru configurare intrare analogical, bitul corespunzator din ANSEL sau ANSELH trebuie setat pe 1. Pentru intrare/iesire logica, bitul bitul corespunzator din ANSEL sau ANSELH trebuie setat pe 0. Incercarea de a citi unii pini configurati ca intrare analogical ca functie digitala va da 0.

/* Pinul PORTB.1 configurat ca intrare digitala. Orice schimbare in starea sa logica va crea o intrerupere. De asemeni are un rezistor pull-up. Toti pinii All PORTB sunt iesiri digitale.*/ ANSEL = ANSELH = 0; PORTB = 0; TRISB = 0b00000010; RBPU = 0; WPUB1 = 1; IOCB1 = 1; RBIE = GIE = 1; // // // // // // // Toti pinii I/O sunt configurati ca logici Toti pinii PORTB sunt stersi Toti pinii PORTB except PORTB.1 sunt configurati ca iesiri Rezistorii Pull-up sunt validati Rezistor Pull-up conectat la pin PORTB.1 Pinul PORTB.1 poate ridica o intrerupere in stare logica Validare intrerupere

3.3. PCB (Printed Control Board) in sistem minimal cu microcontrolere Proteus (Altium Designer) Cadence Allegro Orcad NI, Multisim Un PCB este sete folosit pentru a suporta din punct de vedere mecanic i pentru a conecta din punct de vedere electric componente electronice folosind trasee cablate de cupru laminat pe diverse straturi i substraturi (n mod obinuit 2 straturi de cupru). Software pentru proiectarea i simularea aplicaiilor cu microcprocesoare i microcrontrolere sunt furnizate industrial la diverse nivele de aplicaie. A nu se confunda simulatoare de microprocesoare/microcontrolere, IDE de dezvoltare pentru aplicaii cu microprocesoare i microcontrolere i medii integrate pentru proiectare PCB.

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