Pentru a obţine cât mai mult de la numeroasele microcontrolere moderne, este necesar ca perifericele din cadrul microcontrolerelor să fie configurate corespunzător. Uneori este nevoie de configurarea lor pas cu pas înainte de a le pune să lucreze împreună. Acest lucru este important în special acolo unde microcontrolerul a fost ales datorită potrivirii perifericelor sale la necesităţile unei aplicaţii particulare. Dacă nu se acordă atenţie suficientă, perifericele pot să nu ofere rezultatele dorite. Ca exemplu, putem analiza familiile de microcontrolere de clasă medie pe 8 biţi, PIC16F7X şi PIC16C7X de la Microchip. PIC16F7X este un dispozitiv flash, iar PIC16C7X un dispozitiv OTP (one-time-programming). Perifericele pentru ambele dispozitive includ un convertor analog/digital (ADC), temporizatoare, capturare-comparare PWM (CCP) şi transmiţător receptor sincron asincron universal (USART).
Modul ADC
Modulul ADC converteşte un semnal de intrare analogic într-un număr digital corespunzător pe 8 biţi. Ieşirea circuitului intern de eşantionare şi memorare reprezintă intrarea în convertor, care generează rezultatul prin aproximări succesive. Tensiunea de referinţă analogică este selectabilă software, fie ca tensiunea pozitivă a sursei dispozitivului (VDD), fie ca nivelul de tensiune de pe pinul Vref. ADC dispune de caracteristica unică de capabilitate de operare şi atunci când dispozitivul este în mod de aşteptare.
În figura 1 este prezentată o schemă a circuitului. Modulul are 3 registre; cele două registre de control sunt ADcon0 şi ADcon1, iar registrul pentru rezultate este ADres. ADcon0 controlează operarea modulului ADC. Registrul este utilizat pentru selectarea frecvenţei de ceas pentru conversie şi a canalului digital. ADcon1 configurează funcţiile pinilor portului. Microcontrolere au fie 5, fie 8 pini de I/O, ce pot fi configuraţi ca intrări analogice.
După ce ADcon0 şi ADcon1 sunt configurate, bitul go/done din ADcon0 este configurat pentru pornirea conversiei şi apoi monitorizat pentru a urmări când conversia este completă. Atunci când conversia A/D este completă, rezultatul este încărcat în registrul ADres, bitul go/done este eliminat, iar bitul de întrerupere A/D (ADif) este configurat. Este disponibil un exemplu de program ce citeşte registrul ADres şi transmite citirea către modulele USART şi CCP. Comutarea între cele două canale de intrare analogice este realizată prin schimbarea valorilor biţilor registrului ADcon0, CHS2:CHS0. Figura 1 prezintă numai AN1 şi AN0, dar oricare dintre canalele de intrare analogice poate fi selectat prin CHS2:CHS0.
Temporizatoare
Microcontrolerele au trei module temporizatoare – timer0, timer1 şi timer2 – fiecare dintre ele putând genera o întrerupere pentru a indica apariţia unui eveniment, precum depăşirea timpului. Timer0 este un temporizator-numărător simplu pe 8 biţi. Timer1 este un temporizator – numărător pe 16 biţi, constând din două registre pe 8 biţi ce permit scrierea şi citirea. Timer2 este un temporizator pe 8 biţi cu un registru de perioadă, pre-scalare şi post-scalare. Utilizând pre-scalarea şi post-scalarea la configurarea lor maximă, perioada de timp maximă este aceeaşi cu a unui temporizator pe 16 biţi. Timer2 este baza de timp PWM atunci când modulul CCP este utilizat în mod PWM.
Pentru modul PWM, registrele ce trebuie să fie configurate sunt registrul de perioadă al timer2 (PR2), registrul de control al timer2 (T2con) şi registrul PIR1. Ieşirea PWM este caracterizată de o bază de timp (perioadă) şi durata de timp în care ieşirea stă în nivel logic superior (factor de umplere). Frecvenţa semnalului PWM este inversul perioadei. Perioada PWM este specificată prin scrierea registrului PR2.
Module captură – comparaţie PWM (CCP)
Există două module CCP, fiecare conţinând un registru pe 16 biţi care poate opera ca un registru de capturare pe 16 biţi, ca registru de comparaţie pe 16 biţi sau ca registru factor de umplere PWM master-slave. Modulele CCP sunt identice în operare cu excepţia evenimentelor de declanşare speciale.
USART
Modulul USART este unul dintre cele două module seriale IO, celălalt fiind modulul SSP. USART este de asemenea cunoscut ca interfaţă serială de comunicaţie, sau SCI. El poate fi configurat ca un sistem asincron full-duplex ce poate comunica cu dispozitive periferice precum terminale CRT şi computere personale, sau poate fi configurat ca sistem sincron half-duplex ce poate comunica cu dispozitive periferice precum circuite integrate A/D sau D/A şi EEPROM-uri seriale. În cadrul programului de exemplificare, este configurat un sistem asincron full-duplex pentru a comunica cu un PC. În această aplicaţie, USART este utilizat numai pentru transmisie. Registrele necesare pentru configurare sunt registrul generator al vitezei de transmisie (SPBRG), registrul de stare şi control ale transmisiei (TXSTA), registrul de stare şi control ale recepţiei (RCSTA) şi registrul de date transmise (TXreg).
SPBRG-ul dedicat pe 8 biţi controlează perioada unui temporizator pe 8 biţi cu rulare liberă. În mod asincron, un bit controlează de asemenea viteza de transfer de date. În mod sincron, acest bit este ignorat. TXSTA este locul de selecţie al modului asincron şi al transmisiei pe 8 biţi. Bitul de activare a transmisiei (TXen) al TXSTA activează transmisia, iar bitul de stare al registrului de transmisie (TRMT) este un bit numai de citire, ce indică starea registrului de transmisie (TSR). Pentru a începe transmisia este necesar să se configureze bitul de activare al portului serial (SPen) din registrul RCSTA. Scrierea în TXreg iniţiază transmisia. Exemplul de program copiază rezultatul conversiei A/D în TXreg. Valoarea este mutată automat în TSR şi trimisă pe pinul RC6/TX.
Integrarea perifericelor
După ce fiecare periferic a fost configurat, acestea trebuie să fie integrate între ele pentru a putea funcţiona împreună. Segmentul de program în buclă din programul oferit ca exemplu, arată modul în care fiecare periferic este conectat cu celelalte. Schema logică a firmware-ului prezentată în figura 2 combină procesele de configurare şi integrare.
Toate porturile de intrare/ieşire sunt la început iniţializate. Porturile seriale sunt de asemenea activate pentru transmisie USART, procedură urmată de configurarea perifericelor timer2, ADC, CCP şi USART. Pentru ADC, în cadrul procesului de configurare este selectat numai un singur canal de intrare analogic. Timer2 este activat, iar programul începe să opereze cu bitul TMR2IF. Acesta stabileşte când apare o potrivire între registrele TMR2 şi PR2. La apariţia unei potriviri, TMR2IF este eliminat în software şi începe conversia A/D.
După finalizarea conversiei A/D, programul monitorizează bitul TRMT ce indică momentul în care registrul TSR al USART este gol şi gata de transmisie. Valoarea A/D este apoi scrisă în registrele TXreg şi CCPR2L. Următorul canal analogic este apoi selectat, iar procesul se repetă. Ieşirile USART şi CCP sunt recepţionate şi procesate de dispozitive hardware externe.
Hardware
În figura 3 este prezentată diagrama schematică a hardware-ului. Aceasta este în principiu o parte a schemei PICDEM 2 Plus, ce are adăugate câteva componente suplimentare.
Trimmerele RP1 şi RP2 sunt utilizate pentru a permite prezentarea unei metode de comutaţie între canalele de intrare analogice. Ele determină de asemenea nivelele de tensiune de intrare pentru convertorul A/D.
LED L1 este conectat la pinul de ieşire PWM, RC1/CCP2 şi se află în serie cu o rezistenţă de limitare a curentului, R1. U2 este un driver de linie RS232 ce oferă o interfaţă electrică între USART şi conectorul de port serial P1.
Când tensiunea de intrare analogică este trimisă către convertorul A/D, acesta o converteşte într-o valoare digitală corespunzătoare. Intrarea vine de la AN0 sau AN1, depinzând de canalul de intrare analogică ce a fost configurat. Rezultatele digitale vor fi trimise atât către USART, cât şi către CCP. USART trimite valoarea către un program de terminal serial, care afişează o valoare de ieşire într-un format ce depinde de configurarea terminalului.
În mod similar, PWM-ul din CCP variază factorul de umplere al pulsului de ieşire pentru a controla strălucirea unui LED.
Pentru transmisie serială şi afişare, ieşirea USART este trimisă programului terminal serial prin conectarea convertorului serial USB-UART la conectorul de port serial al plăcii demonstrative PICDEM 2 Plus şi pe portul USB al unui PC, după cum se poate observa în figura 4. MCP2200 de la Microchip poate fi utilizat ca şi convertor serial USB-UART.
Deoarece în convertorul A/D sunt utilizate două canale analogice, pe monitorul PC-ului vor fi afişate de asemenea două valori. Pentru capturarea, controlul şi depanarea fluxurilor de date binare este utilizat un program de terminal serial. El trebuie să fie stabilit la o frecvenţă de 2400baud, opt biţi de date, un bit de stop şi fără paritate, pentru a se potrivi cu configurarea software a USART. Valoarea afişată poate fi de asemenea stabilită ca ASCII, ANSI, hexazecimal, binar sau alte tipuri de reprezentare numerică, depinzând de caracteristicile programului terminal.
Concluzie
Pentru a obţine valorile de ieşire dorite şi pentru a le afişa, este adesea necesară configurarea pas cu pas a fiecărui periferic înainte de a le pune să funcţioneze împreună. Convertorul A/D, temporizatoarele, CCP şi USART trebuie să fie configurate, implementate şi integrate pentru a obţine şi afişa valorile de ieşire dorite de la convertorul A/D.
Microchip Technology | www.microchip.com