Rezistenta Programabila Digital Pentru O Sursa de Tensiune

CUPRINS

Introducere ………………………………………………………………………………………………………………….. 7

CAPITOLUL 1. Sinteza literaturii de specialitate ……………………………………………. 8

1.1 Elemente de hardware ………………………………………………………………. 8

1.1.1 Rezistența programabilă AD5274 ……………………………………………………… 8

1.1.1.1 Parametrii rezistenței …………………………………………… 9

1.1.1.2 Configurarea pinilor și descrierea funcțională ………………….. 10

1.1.1.3 Blocul functional ………………………………………………. 11

1.1.2 Microcontroller – ul PIC16F886 ………………………………………… 12

1.1.2.1 Performanțe ……………………………………………………. 12

1.1.2.2 Specificați electrice ……………………………………………. 13

1.1.2.3 Configurarea pinilor ………………………………………….. 13

1.1.2.4 Conversia analog – digitală ……………………………………. 15

1.1.3 MAX 232 ………………………………………………………………… 16

1.1.3.1 Specificații electrice …………………………………………… 16

1.1.3.2 Configurarea pinilor ……………………………………………. 17

1.1.4 LCD MC21605DC6W-BNMLW ………………………………………. 18

1.1.4.1 Date tehnice …………………………………………………… 18

1.1.4.2 Configurația pinilor ……………………………………………. 19

1.2 Elemente de comunicare …………………………………………………………… 19

1.2.1 Protocolul I2C …………………………………………………………….. 20

1.2.1.1 Generalități I2C ……………………………………………….. 20

1.2.1.2 Transferul de date pe I2C …………………………..………….. 21

1.2.2 Protocolul UART ……………………………………………………..… 22

1.2.2.1 Generalități UART …………………………………………….. 22

1.3 Transmisia serial ………………………………….……..………………………… 22

1.4 Elemente software ………………………………………………………..……….…………. 23

1.4.1 Labview ……………………………………………………..…………… 23

1.4.2 MikroC …………………….…………………………………………….. 24

CAPITOLUL 2. Descrierea proiectului …………………………………………………………… 26

2.1 Partea hardware ………………………………………………………….. 26

2.1.1 Schema bloc a circuitului ………………………………………… 27

2.1.2 Schema electronică ………………………………………………. 28

2.1.3 Proiectare circuit imprimat ……………………………………. 30

2.2 Labview – software ………………………………………………………… 31

2.2.1 Conexiune Labview – Microcontroller ……………………….…. 32

2.2.2 Selectarea rezistenței ………………………….…………………. 33

2.2.2.1 Calculul rezistenței ………………………………….…. 36

2.2.2.2 Selecția timpului ……………………………………….. 37

2.2.3 Măsurători practice ……………………………………………….. 38

2.3 Software microcontroller PIC ……………..………………………………. 39

2.3.1 Recepția datelor de la UART …………………………………. 39

2.3.2 Trimiterea datelor de la PIC pe I2C ………………………………. 40

2.3.3 Test rezistențe – scriere multiplă ………………………………… 43

2.4 Recepție ADC …………………………………………………………….… 44

2.5 Afișarea tensiunii citite de ADC ……………………………………….…… 44

CAPITOLUL 3. Concluzii …………………………………………………………………….. 47

Bibliografie ……………………………………………………………………………………. 48

INTRODUCERE

Scopul acestui proiect este acela de a regla tensiunea de ieșire a unei surse de tensiune DC-DC prin intermediul unei rezistențe comandată digital, obiectivul principal fiind acela de a permite generarea anumitor forme de undă specifice anumitor aplicații de testare printr-o bibliotecă software dedicată. Altfel spus, rolul acestui ansamblu este de a transmite tensiunea de comandă la bornele unui element de execuție în funcție de prescripțiile din programul software.

Parametrii sunt transmiși de la PC prin portul paralel sau USB iar un microcontroller le interpretează comunicând mai departe cu rezistența programabila care modifica tensiunea de ieșire. Valoarea tensiunilor programate vor fi afișate pe un LCD.

Am ales acest proiect din nevoia de a putea testa comportarea anumitor DUT-uri la diferite forme de undă cu difetiți timpi de comutație ***venind ca o imbunătățire a unei surse de tensiune DC-DC reglabilă realizată de unul din colegii mei, facând o sursa programabilă***.

CAPITOLUL 1

SINTEZA LITERATURII DE SPECIALITATE

În acest capitol voi descrie elementele hardware , elementele de comunicare și elementele software folosite pentru realizarea practică a rezistenței programabile digital. Se vor prezenta succint principalele funcții care se pot implementa și în detaliu funcțiile pe care le-am folosit.

Elemente de hardware

Elementele hardware reprezintă partea fizica a unui proiect. Componenta principală

folosită în acest proiect este rezistența programabilă AD5274 care va fi programată cu ajutorul unui microcontroller PIC16F886. PC-ul printr-un convertor MAX232 va trimite date directe spre microcontroller.

Rezistența programabilă AD5274

Rezistența programabilă este o rezistență reală variabilă care își modifică valuarea

pentru semnale analogice. Are o memorie internă de tipul NVM (Non-Volatile Memory) ceea ce face ca rezistența să poată fi programată fără nicio limitare de câte ori se dorește. Aceasta poate fi reglată pe o plajă de la 0Ω la 20KΩ cu o toleranță de 1% și oferă 50 de puncte memorabile permanent în regiștri din memorie. Programarea acesteia se face prin intermediul interfeței de comunicare I2C ceea ce oferă o metodă ușoară de scriere/citire a acesteia.

Capsula rezistenței este de tipul MSOP (Mini Small Outline Package) cu 10 terminale. Temperaturile standard de funcționare se încadrează în intervalul -40°C și +125°C. [1;datasheet res]

Parametrii rezistenței

Configurarea pinilor și descrierea funcțională

Figura 1:Configurarea pinilor [1]

Pinul 1: Alimentarea pozitivă de la sursa de alimentare +5V

Pinul 2: Terminalul A de la rezistența programabilă

Pinul 3: Terminalul W de la rezistența programabilă

Pinul 4: Alimenrarea negativa în cazul în care se folosește o sursă dublă , pentru o sursă simplă se conectează pinul la masă

Pinul 5: Se conecteaztă un capacitor extern între Ext_Cap și Vss cu capacitatea de 1µF

Pinul 6: Pinul de masă

Pinul 7: Resetare hardware, pinul este activat atunci când este conectat la masă, dacă nu se folosește se leagă la VDD.

Pinul 8: SDA (Serial Data Line), linia de transmisie de date prin interfața I2C

Pinul 9: SCL (Serial Clock Line), linia de transimisie a tactului prin interfașa I2C

Pinul 10: ADDR are 3 moduri de conectare la Gnd, VDD și neconectat. În funcție de modul ales se modifică biți de start transmiși pentru programarea rezistenței.

Blocul funcțional

Figure 2: Schema bloc [1]

Registrul RDAC controlează în mod direct valuarea rezistenței. Dacă, de exemplu, registrul RDAC este încărcat cu toți cei 10 biți pe „0” logic cursorul este conectat pe poziția A din rezistorul variabil ceea ce face ca rezistența nominală între terminalele A și W să fie minimă.

Blocul de memorie 50-TP conține o serie de 50 registre de memorie programabilă în cazul în care se dorește memorarea unor anumite valori de rezistență. Prima adresă la care se scrie în memorie este 0x01 următoarele programe se scriu în continuare pâna cand se umple memoria. Pentru memorare nu este nevoie de schimbarea tensiunii de alimentare. O singură scriere consumă aproximativ 4mA timp de 55ms, iar pentru finalizarea memorării are nevoie de 350ms timp în care nu se pot face modificări valorii rezistenței de ieșire.

Blocul interfață serială I2C poate fi conectat la o magistrală de date I2C ca și un dispozitiv slave condus de un alt dispozitiv master, sau poate fi un dispozitiv de tip master. Standardul de frecvență la care AD5274 poate să opereze este 100kHz iar viteza maximă suportată este 400kHz.[1]

Microcontroller – ul PIC16F886

Pic16F886 este utilizat în foarte multe proiecte începând de la industria de automobile și

electrocasnice, ajungând la controlul instrumentelor industriale, senzori comandați la distanță, încuietori electrici și dispozitive de siguranță. De asemenea, memoria EEPROM face mai ușoară aplicarea microcontrolerelor la dispozitive unde se cere memorare permanentă a diferiților parametri. Fiind un microcontroller de tip RISC (Reduced Instruction Set Computer) este foarte fiabil, ușor de invățat pentru că sunt foarte puține instrucțiuni, mai exact 35, care sunt bine optimizate în ceea ce privește viteza de operare, are o arhitectură simplă și codul este foarte compact.

Performanțe

Viteza de operare maximă cu un oscilator extern este de 20MHz rezultând un timp de

200ns pentru execuratea unei singure instrucțiuni (toate instrucțiunile au nevoie de un sigur ciclu pentru a se executa, excepție făcând instrucțiunile ramificate). Oscilatorul intern are o frecvență programabilă software de la 31kHz pana la 8MHz.

Sunt disponibili 24 de pini care se pot seta individual ca intrare/ieșire, având două comparatoare analogice programabile cu tensiunea de referință fixă 0.6V. Chip-ul mai cuprinde blocuri pentru conversia A/D cu o rezoluție de 10 biți, bloc PWM etc.

Microcontrolerul are în dotare blocuri pentru comunicare UART suportând portul serial RS-232, RS-485 și LIN 2.0. Altă variantă de comunicare adoptată de Microchip este protocolul I2C.[2]

Specificați electrice

Configurarea pinilor

Figure 3:Configurarea pinilor[2]

Pinul 1: Ștergerea memoriei se poate face prin metoda hardware la pinul MCLR. Recomandarea producatorului este să nu se facă direct la pinul VDD ci cu o configurație RC, sau software.VPP reprezintă tensiunea de programare.

Pinul 2: Se poate folosi ca pin de I/O, convertor A/D , intrare de Wake-up sau intrarea negativă a comparatorului C1 sau C2.

Pinul 3: Se poate folosi ca pin de I/O, convertor A/D sau intrarea negativă a comparatorului C1 sau C2.

Pinul 4: Se poate folosi ca pin de I/O, convertor A/D, tensiune de referință negativă a convertorului A/D, tensiune de referință pentru comparator sau intrarea pozitivă a comparatorului C2.

Pinul 5: Se poate folosi ca pin de I/O, convertor A/D, tensiune de programare sau intrarea pozitivă a comparatorului C1.

Pinul 6: Se poate folosi ca pin de I/O, intrarea timpilor de clock sau ieșirea comparatorului C1.

Pinul 7: Se poate folosi ca pin de I/O, convertor A/D, intrarea de selecție pentru slave sau ieșirea comparatorului C2.

Pinul 8: Ground (masă).

Pinul 9: Se poate folosi ca pin de I/O, generator de clock cu cristal de quartz sau retzonator, intrare de clock externă sau oscilator RC.

Pinul 10: Se poate folosi ca pin de I/O, generator de clock cu cristal de quartz sau retzonator, ieșire Fosc/4.

Pinul 11: Se poate folosi ca pin de I/O, ieșirea timpilor de clock.

Pinul 12: Se poate folosi ca pin de I/O, intrarea timpulor de clock, capturare/comparare/PWM2.

Pinul 13: Se poate folosi ca pin de I/O, ieșire PWM, capturare/comparare/PWM2.

Pinul 14: Se poate folosi ca pin de I/O sau clock pentru interfețele SPI sau I2C.

Pinul 15: Se poate folosi ca pin de I/O, intrare date SPI, intrare /ieșire date I2C.

Pinul 16: Se poate folosi ca pin de I/O, ieșire date SPI.

Pinul 17: Se poate folosi ca pin de I/O, comunicare UART clock.

Pinul 18: Se poate folosi ca pin de I/O, comunicare UART date.

Pinul 19: Ground (masă).

Pinul 20: Alimentarea pozitivă.

Pinul 21: Se poate folosi ca pin de I/O, convertor A/D, întrerupere externă.

Pinul 22: Se poate folosi ca pin de I/O, convertor A/D, ieșire PWM, intrarea negativă a comparatorului C1 sau C2.

Pinul 23: Se poate folosi ca pin de I/O, convertor A/D, ieșire PWM.

Pinul 24: Se poate folosi ca pin de I/O, convertor A/D, activare programare, intrarea negativă a comparatorului C1 sau C2.

Pinul 25: Se poate folosi ca pin de I/O, convertor A/D, ieșire PWM.

Pinul 26: Se poate folosi ca pin de I/O, convertor A/D.

Pinul 27: Se poate folosi ca pin de I/O, clock pentru programarea serială.

Pinul 28: Se poate folosi ca pin de I/O, ICSP I/O.

Conversia analog – digitală

Conversia analogică în digitală se face cu ajutorul unui circuit care convertește semnale

continue într-un număr binar. Semnalele externe sunt , de obicei, radical diferite de cele ale microcontrolerului și prin urmare trebuie să fie convertite în valori recunoscute. Rezultatul măsurării este un număr (valoare digitală) care se utilizează și se prelucrează ulterior în program.

Convertorul generează un rezultat binar pe 10biți prin metoda aproximărilor succesive, iar rezultatul este memorat în registrul ADRESL și ADRESH. Tensiunea de referință a ADC-ului se selectează software între tensiunea de alimentare a pic – ului sau cu ajutorul unei tensiuni de referință externă. [2]

Metoda aproximărilor succesive presupune accesarea pe rând a fiecărui bit începând cu MSB care se setează inițial pe “1” , restul de biți vor fi setați pe “0”. Această valoare va fi convertită înapoi în analogic și comparată cu intrarea. SAR (Successive Aproximation Register) conține o valoare binară care corespunde mijlocului tensiunii de refetință al ADC-ului tensiunea de referință maximă VREF+ și minimă VREF- , această tensiune nu trebuie sa fie depășită. Dacă intrarea este mai mare decât potențialul analogic VIN > VDAC , bitul MSB este lăsat pe “1”. În caz contrar VIN < VDAC MSB se resetează la “0”. Cu alte cuvinte se testează o singură valoare și în funcție de stare se trece bitul pe “1” sau “0”.

Această procedură se reia pentru restul biților pâna se ajunge la cea mai apropiată valoare în funcție de rezoluția ADC-ului în cazul nostru este de 10 biți.[3]

Figure 4:Cicli de conversie.[3]

Vin – tensiunea de intrare

Vref – tensiunea de referință

VDAC – tensiunea convertită în digital

TAD – timpul necesar de conversie din digital în analogic

Max 232

Max 232 este un circuit integrat care convertește semnalele de la portul serial de tip

RS-232 în semnale de tipul TTL sau CMOS. Există doua perechi de transmisie-recepție ceea ce face ca semnalele RTS (Request to Send) și CTS (Clear to Send) să poată fi puse în plus pe langă TX și RX pentru un control mai bun a fluxului de date transmis de către PC.[4]

Specificații electrice

Integratul este alimentat de la o tensiune continuă de +5V care consumă un curent maxim

de 10mA dacă toate ieșirile sunt activate. Temperatura de funcționare suportată de integrat este cuprinsă între valorile de -65°C și 150°C.

Nivelul cel mai înalt al tensiunii de intrare (VIH) pentru pinii (T1IN, T2IN) este minim de 2V, iar nivelul cel mai mic al tensiunii de intrare (VIL) pentru aceleași porturi este de maxim 0.8V.

Tensiunile de recepție pentru pe care MAX232N le suportă sunt de ±30V pentru comunicarea PC-PIC. În acest proiect se vor folosi tensiuni de ±7V.

Nivelul cel mai mare al tensiunii de ieșire (VOH) al portului de transmisie (T1OUT, T2OUT) este minim de 5V , iar nivelul cel mai mic al tensiunii de ieșire (VOL) pentru pini (T1OUT, T2OUT) este de maxim -5V.

Pentu recepție (R1OUT, R2OUT) avem nivelul mare de tensiune (VOH) minim 5V, iar nivelul minim al tensiunii (VOL) este maxim 0.4V.

Toate valorile sunt considerate pentru o tensiune de alimentare de 5V și temperatură ambientală 25°C.[5]

Configurarea pinilor

Figura 5:Configurarea pinilor și schema de conectare [5]

Pinul 1, Pinul 2 și Pinul 3: Între C1+ și C1- se pune un condensator pentru a dubla tensiunea de alimentare de la 5V la 10V pe ieșirea V+. Acest lucru este necesar când integratul nu este alimentat de la o tensiune diferențială.

Pinul 4, Pinul 5 și Pinul 6: Condensatorul C2 inversează tensiunea de la ieșirea V+.

Pinul 7 și Pinul 14: Reprezintă ieșirea RS-232.

Pinul 10 și Pinul 11: Reprezintă intrarea TTL sau CMOS .

Pinul 8 și Pinul 13: Reprezintă intrarea RS-232.

Pinul 9 și Pinul 12: Reprezintă ieșirea TTL sau CMOS.

LCD MC21605DC6W-BNMLW

LCD-ul este un ecran cu cristale lichide care se folosește des în aplicații cu

microcontrolere deoarece au un consum redus de energie și poate afișa atât alfanumeric cât și grafic, un dezavantaj poate fi unghiul de vizualizare foarte mic, sunt mai scumpe decât displayurile cu LED-uri și au nevoie de iluminare din spatele ecranului. Afișajele de Module LCD au fie o interfață paralelă (folosită în proiect), fie una serială.

Date tehnice

LCD-ul se va alimenta de la o sursă de tensiune continuă de 5V având un comsum de

1.5mA. Iluminatul din spate se face separat de alimentarea propriu- zisă necesitând o tensiune de 3V, iar consumul pe acesta este de maximum 20mA.

Display-ul are un format de 16 X 2 caractere, 16 reprezentând numărul de caractere pe o linie, 2 numărul de linii. Culoarea afișajului este albastră, iar caracterele vor fi albe datorită iluminatului din spate. Temperatura de operare este cuprinsă între -20°C și 70°C.

Modul de scriere poate fi făcut pe 8 biți sau pe 4 biți, în acest proicet voi folosi scrierea pe 4 biți. Pentu aceasta este nevoie de 4 linii de date DB4 până la DB7 iar restul pinilor de date nu sunt folosiți. Transferul de date este complet după ce se trimit 4 biți de date de 2 ori.

Afișajul poate afișa 192 de tipuri de alfanumerice, simboluri și caractere speciale care sunt stocate în ROM, dacă este nevoie de alte forme se poate implementa cu ajutorul memoriei ROM după un anumit tabel care se gasește în datasheet.

Principalele instrucțiuni de programare sunt: ștergerea afișajului, mutarea cursorului într-un punc fixat, cursorul să fie on-off, clipire caracter, deplasare text etc.

Configurația pinilor

Figura 6:Configurația pinilor[6]

Pinul 1: (Vdd) Alimentarea pozitivă de la sursă.

Pinul 2: (GND) Ground.

Pinul 3: (V0) Ajustarea contrastului, care se face cu un potențiometru conectat la sursa de alimentare.

Pinul 4: (RS)Selectarea registrului de semnal pentru scrierea/citirea memoriei RAM a LCD-ului.

Pinul 5: (R/W) Scrierea și citirea datelor.

Pinul 6: (E) Semnal de validare .

Pinul 7 – Pinul 14: (DB0 ~ DB7)Linia de transmisie date.

Pinul 15 și Pinul 16: (NC) Nu se conectează.

A – (LED+) reprezintă anodul ledului de iluminare a afișajului.

K – (LED-) este catodul ledului de iluminare a afișajului.

Elemente de comunicare

Interfețele de comunicare se utilizează în general pentru conectarea de circuite

periferice la microcontrollere permițând conectarea diverselor dispozitive cum ar fi: afișaj LCD, memorii nevolatile, interfețe cu senzori, rezistențe programabile și multe altele.

Interfețele seriale se împart în două categorii: sincrone și asincrone. Interfețele seriale asincrone sunte denumite deobicei „ serial comunication interface” (SCI sau UART), iar interfețele seriale sincrone poartă numele de „serial peripheral interface” (SPI). [7]

Protocolul I2C

Magistrala de date I2C (Inter Integrated Circuit ) a fost introdusă pentru prima oară în

anul 1980 de firma Philips Semiconductor și a devenit un standar pentru interfețele de comunicație serială. În acest context magistrala reprezintă un canal de comunicație în care există un transmițător și mai mulți receptori.[3]

Generalități I2C

Magistrala I2C este o magistrală sincronă multi-master, bidirecțională de viteză mică.

Viteza standrard de transmitere a datelor este de 100kbps, iar maximul la care se poate transmite este 400kbps. Fiecare dispozitiv conectat la magistrală are o adresă unică și poate lucra ca emițător sau receptor.

I2C mai este denumită și TWI ( Two-Wire serial interface) deoarece folosește 2 linii, pentru comutație half-duplex, adică comunicarea se face în ambele direcții (fiecare parte transmite pe rând).

SCL (Serial Clock Line) reprezintă semnalul de clock, iar SDA (Serial DAta) reprezintă semnalul de date.

Figura 7:Magistrala I2C [7]

Ambele linii (SDA și SCL) sunt activate de circuite open-drain pentru a putea suporta mai multe dispozitive master, iar liniile sunt conectate la tensiunea pozitivă prin rezistoare de pull-up, astfel că în repaus sunt la nivel înalt (1 logic sau sus).[7]

Transferul de date pe I2C

Condiția de repaus este atunci când linia SDA și SCL se află la nivel sus, acest lucru se

întâmplă la începutul unei transmisii.

Condiția de start apare când SDA trece de la nivel sus la nivel jos, iar SCL este sus semnalând începutul unei transmisii pe I2C. Primi biți după ce se dă condiția de start reprezintă biții de adresă care selectează unul din perifericele legate la magistrală. Se pot trimite mai mulți biți consecutivi.

Linia SDA este stabilă în momentul când SCL este sus și se poate schimba când SCL este jos. Ultimul bit din cei 8 este bitul de recunoaștere (acknowledge sau ACK) pe care linia SDA o primește de la receptor, dacă este recepționat bitul de recunoaștere SDA, trece jos. Dacă SDA nu trece jos transmițătorul consideră că a apărut o eroare și conexiunea se oprește.

Condiția de stop este definită de SDA când trece de la nivel jos la nivel sus, iar SCL este sus terminându-se transmisia I2C și magistrala se eliberează, permițând unui alt dispozitiv master să preia controlul asupra magistralei. După condiția de stop datorită rezistențelor de pull-up de pe liniile SDA și SCL vor fi trase sus.[3] (octeti)

Figura 8: Transferul datelor pe I2C [3]

Protocolul UART

Transferul serial de intrare/ieșire se face pe un singur fir pentru orice direcție, iar toate

interfețele de transmisie serie convertesc datele paralele în date seriale binar, iar receptoarele trebuie să facă conversia inversă. Exemple pentru o astfel de comunicație sunt: calculator și imprimantă, calculator și un control la distanță, calculator și PIC și multe altele.

Generalități UART

UART (Universal asynchronous reciver/transmitter) este asincronă pentru că nu se

transmite semnal de clock prin linia de date serială, receptorul recunoște valorile binare fără a avea nevoie de o linie comună pentru semnal de clock.

Această interfață are un receptor (reciver – RX) care face conversia fluxului serial de biți în date paralele pentru microprocesor și un transmițător (transmitter – TX) care convertește datele paralele de la microprocesor într-un flux serial de biți pentu transmisie. UART mai furnizează și informații de stare a datelor cum ar fi dacă receptorul a primit datele sau dacă receptorul așteaptă date.

Transmisia serială

Problema cea mai mare la trasmisia serială o constituie reconstrucția datelor de la

receptor apărând dificultăți la granițele dintre biții individuali, de exemplu dacă linia este jos pentru un anumit timp receprorul trebuie să stie dacă informația este „00” logic sau „000” logic, el trebuie să știe unde și când se oprește un bit. Aici fiecare dispozitiv are propriul clock local în funcție de ce se transmite. Dispozitivele care trasmit și cele care recepționează datele trebuie să lucreze la acceași frecvență, iar în plus trebuie să existe logică pentu detectarea fazei datelor transmise și pentru sincronizarea clok-ului receptorului la această fază. Acest mod de transmisie se folosește în general pentru transmiterea caracterelor și la sisteme în care intervalul dintre transmisia octeților se poate modifica în timp.

Formatul datelor transmise utilizează la începutul transmisiei pentru fiecare caracter un bit de start și la sfârșitul transmisiei 2 biți de stop. Receptorul își sincronizează clock-ul după ce recepționează bitul de start și apoi recepționează biți de date. Dacă receptorul nu primește condiția de stop presupune că clock-ul este defazat și apare o eroare numită eroare de cadru. În general aceste erori se rezolvă software.[7]

Toți pinii UART sunt compatibili TTL, de aceea se folosesc convertoarele TTL la nivelurile specifice RS-232 pe care le cunoaște PC-ul și invers microcontrolerul are nevoie de semanl TTL.

În figura următoare se prezintă transmiterea serială asincronă a datelor și anume caracterul „a” reprezentând data care vrem să o transmitem. Codul ASCII a caracterului „a” transformat în binar este „1100001” .

Figura 9: Secvență de transmisie UART

Elemente software

Prin software sau soft se înțelege un sistem de programe sau aplicații pentru calcuclator

incluzând procedurile lor de aplicare, acestea vin odată cu calculatorul sau sunt create ulterior. Softul reprezintă partea logică a oricărui sistem prin care se comandă hardware-ul. Pentru realizarea practică ca elemente software voi folosi MikroC și Labview. Cu ajutorul MickroC-ului am realizat un program specific microcontrolerului, iar cu Labview transmit valoarea rezistenței.

1.4.1 Labview

Labview este un mediu de programare grafică, mai precis un modul software, un

program, ce are o interfață cu utilizatorul numit generic, panou frontal care este foarte ușor de înțeles, intuitiv, iar parte de programare este de tip schemă bloc, adică o diagramă accesibilă programatorului.

Panoul frontal reprezintă interfața dintre utilizator și instrumentul virtual, el fiind cel mai important, deoarece cu ajutorul lui se pot introduce date sau extrage date necesare din mediul de programare. În panoul frontal, comenzile care implică intervenția utilizatoruli sunt cat se poate de simple folosinduse în general elemente de comandă și afișare grafică denumite controale sau indicatoare. În labview contoroalele reprezintă intrarile în mediul virtual adică prin ele se introduc datele, ieșirile cele care comunică utilizatorului datele rezultate în urma unui proces poartă numale de indicatoare.

Diagrama bloc este programul din spatele panoului frontal sau codul sursă cum este denumit în limbajele de programare clasică. Componentele acestuia definesc nodurile, legaturile, strucrurile de decizie, operatorii matematici, funcțiile de prolucrare ligice etc. Legăturile între componente se realizează cu fire ”wire” care descrie fluxul de date prin interiorul instrumentului virtual creat de program. În această diagramă se descrie algoritmul și raționamentul după care funcționează programul.

Labview permite achiziția semnalelor de la o varietate de echipamente cum ar fi GPIB, seriale, Ethernet având incorporate driverele. Driverele de comunicație sunt de un mare ajutor deoarece se pot dezvolta noi produse foarte ușor fără a mai fi nevoit să inveți protocoale de programare pentru fiecare istrument in parte. Visual Instrument Software Arhitecture (VISA) este folosit este un cod Labview care este folosit la comunicarea intre Labview și instrumente periferice, VISA preia controlul protocoalelor de comunicare indiferent de tipul bus-lui.

MikroC

MikroC este un compilator ANSI C (American National Standards institute pentru

programare în limbaj C) pentru microcontrolere PIC de la Microchip. Aceasta este cea mai bună soluție pentru dezvoltarea de cod pentru microcontrolere PIC. Acesta dispune de biblioteci intuitive, compilator puternic cu optimizări avansate, o mulțime de exemple atât hardware cât și software. Compilatorul vine cu o mulțime de exemple pregătite pentru utilizare care necesită doar adaptare pentru un proiect nou ceea ce reduce foarte mult timpul necesar implementării anumitor funcții. Se poate beneficia și de suport direct de la MikroElektronika realizatorii acestui compilator.

Compilatorul vine și cu un suport hardware pas-cu-pas ceea ce înseamnă că se poate face depanare de circuit rulând programul pas-cu-pas. De asemenea depanatorul cuprinde puncte de întrerupere care permite să se localizeze eroarea mult mai repede.

Pentru o productibilitate mai bună producătorii au realizat biblioteci pentu: LCD, editor 7 segmente, terminal UART, terminale I2C, tabelă ascii și multe altele.

CAPITOLUL 2

DESCRIEREA PROIECTULUI

Proiectul practic se împarte în două categorii principale. Prima parte cuprinde realizarea hardware a proiectului în care este descrisă schema circuitului, modul de funcționare și cablajul acestuia, iar cea de a doua parte cuprinde elementele software cu programele aferente folosite în proiect .

2.1 Partea hardware

Scopul acestei părți este de a realiza un circuit electric care să interconecteze componentele astfel încât ansamblul să funcționeze după cerințele inițiale.

Obiective:

Dfinirea unei scheme bloc a ansamblului

Explicarea funcțională a acesteia

Definirea unei scheme electrice

Proiectarea unui layout aferent ansamblului

2.1.1 Schema bloc a circuitului

Figura 10: Schema bloc a circuitului

Calculatorul trimite pe portul serial semnale de tip RS-232 care se convertesc în semanale TTL (0V – 5V) prin intermediul convertorului MAX232. Microcontrolerul recepționează datele primite pe portul UART al acestuia și comandă mai departe setarea rezistenței programabile trimițând prin I2C spre rezistență datele necesare programării acesteia. LCD-ul este comandat să afișeze tensiunile care le primește microcontrolerul pe porturile sale ADC, urmând ca transferul datelor să fie făcut paralel între microcontroler și LCD.

2.1.2 Schema electronică

Figure 11: Schema electronică

Alimentarea circuitului se face prin conectorul Alimentare-1 și Alimentare-2, iar tensiunea la care sistemul trebuie să fie alimentat este de 5V, tensiune continuă.

MAX232N are ca și condensatoare de decuplare C3, C4 și C10. Condensatorul C1 dublează tensiunea de alimentare, iar condensatorul C2 o inversează. Intrarea semnalului pe integrat se face printr-o mufă standard DB9, unde DB9-1 este conectat la R2IN, care receptionează datele de la PC, pinul T2OUT este conectat la DB9-2 prin care trimite datele spre PC, iar pinul DB9-3 este conectat la GND. T2IN este pinul prin care primește datele TTL de la microcontroler la pinul 17, iar T2OUT trimite date sper PIC la pinul 18.

Rezistența AD5274BRM-20 are ca și condensatoare de decuplare C5, C6, C8 și C9. Linia SCL (pinul 9) de la interfața I2C este conectat la PIC pe pinul 15, iar linia SDA (pinul 8) este conectată la pinul 14 de la microcontroler. Liniile de transimisie au rezistențe de pull-up (R1 și R2) pentru a menține tensiunea sus cand nu există comunicare.

LCD-ul este conectat printr-un conector cu 12 pini numerotați de la LCD-1 la LCD-12, iar conectarea acestora este următoarea:

LCD-1: VDD

LCD-2: GND

LCD-3: R/W conectat la GND

LCD-4: LED- conectat la GND

LCD-5: LED+ conectat la VCC printr-o rezistență de 500Ω pentru a limita curentul la 100mA prin led

LCD-6: DB4 conectat la pinul 21 de la PIC

LCD-7: DB5 conectat la pinul 22 de la PIC

LCD-8: DB6 conectat la pinul 23 de la PIC

LCD-9: DB7 conectat la pinul 24 de la PIC

LCD-10: RS conectat la pinul 25 de la PIC

LCD-11: E conectat la pinul 26 de la PIC

LCD-12: V0 conectat la un divizot de tensiune controlat de potențiometrul R3 care reglează intensitatea caracterelor afișate pe LCD

2.1.3 Proiectare circuit imprimat

Un circuit imprimat (PCB : Printed Circuit Board) este o placă care are rolul de a conecta electric un ansamblu electonic sau electric și totodată de a susține mecanic acest ansamblu pentru a putea fi considerat un produs finit și funcțional.

În acest proiect am folosit un cablaj imprimat cu două straturi pe care sunt conectate componente atât SMD (Surface Mounted Device) cât și THD (Trough Hole Device). Găurile de inserție pentru terminalele THD și viaurile vor fi metalizate.

Pentru proiectarea circuitului imprimat am folostit programul Eagle, iar fișierele Gerber au fost generate din program , apoi trimise la un producător de plăcuțe imprimate unde a fost realizat fizic.

Dimensiunea plăcuței este de 63 x 60mm, dimensiunea găurilor de fixare este de 3.2mm. Pentru componentele SMD am folosit standardele de capsulă 0805 și 1206 iar IC-urile DIP16 și DIP28.

Pentru a coincide pinii de la IC-uri în layout vor fi proiectate mirror, iar asamblarea acestora se va face pe spatele imprimatului. Toate elementele THD vor fi motate pe spatele plăcuței iar elementele SMD pe top.

2.2 Labview software

Scopul acestei aplicații este de a realiza, în mediul de programare LabView, o interfață grafică care să ofere posibilitatea programării unei rezistențe de pe un circuit extern.

Aplicația este împărțită în două părți:

transmiterea datelor catre uC prin intermediul portului serial,

introducerea unor indicatoare și controale în vederea programării rezistenței externe.

Obiectivele acestei aplicații sunt următoarele:

posibilitatea modificării valorii a unui numar de zece rezistențe, fiecare valoare putând fi modificată prin intermediul unui control.

un al doilea obiectiv ar fi implementarea unui cod care să permită posibilitatea setării unui timp diferit între transmiterea a două valori de rezistențe către uC în vederea programării rezistenței programabile.

posibilitatea trimiterii succesive, către uC a mai multor valori de rezistențe, adică posibilitatea programării succesive a rezistenței programabile.

În cele ce urmează voi face o scurtă descriere a celor două părți ale acestei interfețe grafice.

Conexiune Labview – Microcontroller

Prima parte constă în implementarea unui cod care îmi va da posibilitatea realizării unei conexiuni între PC și uC.

Mediul de programare LabView are două părți: o parte în care se pot modifica valorile diferitelor indicatoare și controale, pe scurt Panoul Frontal, și o parte în care toate acele indicatoare și controale folosite vor fi conectate între ele în vederea realizării corecte a operațiilor dorite – Diagrama Bloc.

Am utilizat un indicator numit ”Tab control” în vederea organizării acestei interfețe, în vederea separării etapei de configurare a portului de etapa de implementare propriu-zisă a aplicației.

În figura următoare este prezentată interfața grafică necesară configurării portului serial în vederea realizării conexiunii PC-uC. COM PORT selectează portul pe care să se facă transferul datelor, BAUD RATE reprezintă rata biților de transfer, aceasta trebuie să coincidă cu PIC-ul, DATA BITS este numărul de biți recepționați din datele de intrare, PARITY specifică paritatea folosită pentru fiecare cadru, fie ele transmise sau primite.

Figura 16: Controlul conexiunii

Pentru implementarea acestui cod am folosit un subIV prezent în biblioteca acestuia, numit “Visa”, în vederea configurării portului serial al PC-ului. Pentru a nu ocupa foarte mult spațiu în cadrul diagramei bloc am optat pentru varianta în care datele sunt plasate într-un cluster ( un indicator care poate să cuprindă mai multe indicatoare sau controale, ecomomisind astfel spațiu). Pentru a putea fi conectate toate controalele prezente în acest cluster am apelat la o funcție numită “Unbundle by Name”.

Am folosit, de asemenea încă trei funcții, una cu rolul de a da mărimea bufferului, cea de a doua funcție cu rolul de a scrie la portul serial și nu în ultimul rând o funcție de închidere a funcției “Vista”.

Figura 17: Diagrama bloc VISA

Selectarea rezistenței

Cea de-a doua pagină a tab-ului prezent în panoul frontal este prezentată în figura următoare și are rolul de a seta valorile rezistențelor trimise către portul serial.

Figure 18: Panou de date intrare

Pornind de la ideea că voi avea nevoie de un set de zece rezistențe, am decis să folosesc un tip de structură “Case structure” în care să pot prelua , pe rând fiecare valoare de rezistență, deoarece toate aceste controale au fost plasate într-un cluster în vederea optimizării codului.

Astfel, după cum se poate observa și în figură, s-a folosit o funcție pentru determinarea lungimii acestui cluster de rezistențe, pentru a putea compara această valoare cu un număr care se incrementează în momentul realizării primei transmisii către portul serial.

De asemenea, această incrementare este utilă și la aleagerea valorii repetate a rezistențelor. Această incrementare s-a realizat prin intermediul unui Shift Register care are rolul de a introduce o valoare (constanta 0) la intrarea acestuia și apoi, prin intermediul unei functii de incrementare cu 1 această valoare va crește.

S-a utilizat, de asemenea un alt ShiftRegister (dar de valoare booleană) cu scopul de a furniza la fiecare parcurgere a întregului program, valori de adevărat sau fals. Aceste valori au fost utilizate cu scopul de a sesiza dacă valoarea rezistenței urmatoare este 0 sau nu.

Figura 19: Determinare rezistență

În figura de mai sus se poate observa prezența unei structuri “ Case Structure” cu rolul , după cum am menționat și mai sus, de a realiza două seturi de operații în funcție de valoarea booleană pe care o primește la intrare. Dacă condiția de la începutul structurii este adevarată, atunci se vor efectua operațiile din partea de True a structurii, daca nu se vor executa operațiile din partea de False a structurii.

Condiția de la începutul acestei structurii de obținere prin comparare a valorii rezistenței cu 0. Dacă valoarea rezistenței este egală cu 0, atunci se efectuează partea de True (de trecere la următoarea valoare, nepermițându-i acestei valori să treacă mai departe către portul serial) din cadrul acestei structuri, dacă nu se va executa cealaltă parte în care valoarea rezistentei se va transmite mai departe.

Figura 20: Decizie valoare rezistență

Calculul rezistenței

Rezistența este programabilă pe 10 biți adică 210-1 (1024-1), valori cuprinse între 0 și

20KΩ. Formula de calcul din datasheet-ul rezistenței este:

R = ( D / 1024 ) x 20 x 103

unde D reprezintă valoarea biților transformți în decimal. Spre exemplu dacă vrem să setăm o rezistență de 10KΩ rezultă:

D = (10k x 1024) / 20k

D = 512

Dacă vom transforma acest număr în binar rezultă B = 10 0000 0000, aceasta reprezintă valoarea care trebuie transmisă rezistenței pentru a putea seta valoarea acesteia la 10kΩ.

Pentru aceasta în Labview am folosit următorul algoritm de calcul:

Se setează valoarea rezistenței de la 0-20000

Se înmulțește aceasta cu 1024

Rezultatul se împarte la 20000

Se extrage partea întreagă

Se împarte la 256

Restul împărirțiri reprezintă LSB ai rezistenței

Întregul împărțirii este adunat cu 4 (ultimi 2 biți din octet reprezintă MSB pentru scrierea rezistenței, iar 4 pune bitul 3 pe „1 logic” necesar pentru scrierea rezistenței)

Tot rezultatul se convertește în ASCII și se trimite pe UART-ul microcontrolerului.

Figura 21: Calculul rezistenței

Selecția timpului

Labview poate lucra doar cu secvențe de timp mai mari de 1ms, ceea ce reprezintă un

dezavantaj pentru scrierea rezistenței cu o viteză mai mare. Blocul de timp l-am atașat în schema bloc pe bucla de eroare în locul în care se face verificarea dacă transferul este bun sau nu de transmis mai departe pe UART. Această decizie de eroare trebuie să mai aștepte până când timpul inițiat în panoul frontal se scurge.

Blocul „Case” în care se află controrelul de timp este controlat de numărul de rezistențe inițiate, adică dacă se transmite rezistența 2 din tabloul de rezistențe atunci structura „Case” va lua valoarea 2 în care se află controlerul 2 de timp.

Figura 22: Blocul de timp

Calculul rezistenței și blocul de timp se va introduce într-o structură de tip “Case Structure” la intrarea căreia se va conecta un control. Rolul acestui control este să ofere posibilitatea trimiterii valorii către portul serial și ,de asemenea, calculării valorii rezistenței prin intermediul formulei.

Măsurători practice

Figura 23: Transmisie UART , Conversie TTL

În această captură se poate observa semnalul transmis din Labview, un semnal RS-232 având amplitudinea de 15.7V , -7.336V este tensiunea negativă maximă pe care portul serial o generează, iar tensiunea de 7.734 reprezintă tensiunea pozitivă generată de portul serial al PC-ului. Cu ajutorul circuitului integrat MAX232N tensiunile de pe portul UART sunt convertite în semnal TTL, după cum se observă în figură, tensiunea este de 4.934V ceea ce înseamnă că pic-ul convertește tensiunea RS-232 în tensiune TTL.

Formele de undă notate TTL, din imagine, ajung în microcontroller, care mai departe se va ocupa de programarea rezistenței. Semnalul transmis are ca scop setarea rezistenței programabile la o rezistență de 10kΩ.

Software microcontroller PIC

PIC-ul reprezintă creierul acestui proiect, el are rolul de a recepționa datele tramsmise de

Labview pe care le interpretează și le trimite mai departe spre programarea rezistenței. Un alt rol important pe care îl are microcontroller-ul este de a recepționa tensiuni de intrare prin intermediul ADC-urilor și să le afișeze pe un afișaj.

Obiectivele urmărite sunt:

Programarea PIC-ului pentru recepția datelor de la UART

Programarea PIC-ului pentru trimiterea datelor pe I2C

Programarea PIC-ului pentru recepție pe porturile ADC

Programarea PIC-ului pentru afișare pe LCD

Recepția datelor de la UART

În programul următor se vor recepționa datele de la portul serial al PC-ului care

vor fi scrise în registre de tip long int pe 8 biți. Inițializarea modulului UART1 se face cu un baud rate de 9600 adaptat cu modulul VISA din Labview.

Funcția “Delay_ms(100)” este timpul necesar portului UART să se inițializeze. Registrul bdate reprezintă primii 8 biți primiți pe UART ei fiind MSB pentru programarea rezistenței, următorii 8 biți recepționați vor fi memorați până la următoarea transmisie în registrul bcontrol în care ultimii 2 biți sunt MSB pentru scrierea rezistenței, iar ceilalți 6 biți vor fi biții de control adică cei care dau comanda de scriere pe rezistență. Bucla „while (1)” se va executa la nesfârșit, iar odată cu trmiterea din Labview a datelor regiștrii bdate și bcontrol vor fi continuu actualizați. La fiecare actualizare aceștea vor ajunge prin interfața I2C scriși pe rezistență.

Liniile de cod care încep cu „//” reprezintă comentarii, aceste linii au fost folosite pentru depanare. În faza de testare a conexiunii UART trimiteam caractere din labview și le observam în UART terminal cum se trimit și dacă se trimite ce trebuie.

long int bcontrol,bdate;

UART1_Init(9600); // initializare modulul UART1

Delay_ms(100); //uart1_write_text("Begin program\n");

void main()

while (1) {

. . .

if ( UART1_Data_Ready()) {

if ( UART1_Data_Ready ()) {

bdate=UART1_Read();

} // UART1_Write_TEXT("primit");

if ( UART1_Data_Ready ()) {

bcontrol=UART1_Read();

UART1_Write(bdate); // UART1_Write_TEXT("_");

UART1_Write(bcontrol); // UART1_Write_TEXT(";");

. . .

}

Trimiterea datelor de la PIC pe I2C

Frecvența clock-ului microcontolerului este setată de registrul OSSCON. Valoarea 0x71

setează clock-ul intern al PIC-ului să funcționeze la frecvențe înalte de la 125 kHz până la 8 MHz. Frecvența cu care scriu rezistența este de 370 kHz prin intermediul I2C. Valoarea ferecvenței este calculată de către compilator automat. Timpi cei mai mari care se pierd în transmisie sunt între Labview și PIC în jurul a 16ms între transmisii.

Pentru a putea programa rezistența la infinit cu valorile dorite este nevoie să trimitem 5 octeți după cum sunt prezentați în figura 24. Tot acest tren de impulsuri trebuie trimis pentru fiecare scriere de rezistență. Bitul de ACK este bitul de acknowledge care trebuie primit de la rezistență ca și răspuns că a primit corect biții. La fiecare 8 biți rezistența trebuie să trimită un ACK în caz contrar transmisia I2C va eșua. Acest lucru se poate observa cu ajutorul unui osciloscop atunci când se primește ACK linia trebuie să fie trasă jos la potențial 0V.

Figura 24: Scrierea multiplă a rezistenței

După cum se poate observa în cod biții de la figura 24 sunt transmiși pe rând pe interfața I2C, iar tot ce se modifică sunt biții de date D0 până la D9. Acești biți vor veni pe fluxul de date Labview – PIC – I2C, iar regiștri bcontrol și bdate care vor fi actualizați prin UART se vor scrie pe I2C, ei fiind transmiși după biții de inițializare, bineînțeles cu ACK între ei.

. . .

osccon=0x71;

. . .

while (1) {

. . .

I2C1_Init(800000); // inițializare comunicare I2C

I2C1_Start(); // trimitere biți de start

I2C1_Wr(0b01011000); // bit initiere

I2C1_Wr(bcontrol); // bit control + biti date MSB bitul 7 și bitul 8

I2C1_Wr(bdate); // bit date LSB

I2C1_Wr(0b00011100); // scrierea rezsitenței

I2C1_Wr(0b00000011); // scrierea rezistenței

I2C1_Stop(); // trimitere bit de stop I2C

. . .

}

În figura 25 este prezentată scrierea unei rezistențe de 10kΩ. Se pot observa cei 5 octeți care au fost prezentați mai sus. Clock-ul din figura de jos are o tensiune de 5.279V, iar timpul maxim de transmitere prin I2C al secvențelor care setează rezistența este aproximativ de 150us rezultând o frecvență de 6,666 kHz. Biți de date care sunt transmiși pentru o rezistență de 10kΩ sunt: 10 0000 0000, iar restul respectând configurațiile anterioare. Acest lucru se poate regăsi și pe grafic.

Figura 25: Programarea rezistenței

Test rezistențe – scriere multiplă

Pentru a testa timpul cel mai scurt pe care pot să îl obțin între două valori diferite de

rezistență am folosit un divizor de tensiune în care rezistența de jos va fi rezistența mea programabilă, valorile rezistențelor vor fi setate după cum se vede în figura 26.

Figura 26: Setare rezistențe

Figura 27: Captură osciloscop timp răspundere

Recepție ADC

Cel mai important lucru care trebuie precizat la acest ADC este rezoluția acestuia, care

este pe 10 biți. Tensiunea de referință pentru ADC-ul în confugurația folosită de mine este tensiunea de alimentare a PIC-ului, adică Vref- cu valoarea de 0V și Vref+ cu valoarea de 5V. În acest caz acuratețea se calculează în felul următor:

5/1024 = 4.8mV

Tensiunea minimă este afișată în cazul în care se aplică o tensiune de intrare pe ADC egală cu Vref-, conversie care rezultă este 0, iar dacă se aplică Vref+ rezultatul obținut este 1024 fiind valoarea maximă care se poate obține.

MikroC are o bibliotecă foarte bine pusă la punct și codul este foarte intuitiv de aceea îl voi trata împreună cu scrierea pe afișaj.

Afișarea tensiunii citite de ADC

// Setarea pinilor de ieșire

sbit LCD_RS at RB4_bit;

sbit LCD_EN at RB5_bit;

sbit LCD_D4 at RB0_bit;

sbit LCD_D5 at RB1_bit;

sbit LCD_D6 at RB2_bit;

sbit LCD_D7 at RB3_bit;

// Direcția pinilor

sbit LCD_RS_Direction at TRISB4_bit;

sbit LCD_EN_Direction at TRISB5_bit;

sbit LCD_D4_Direction at TRISB0_bit;

sbit LCD_D5_Direction at TRISB1_bit;

sbit LCD_D6_Direction at TRISB2_bit;

sbit LCD_D7_Direction at TRISB3_bit;

unsigned int valoare; // setarea valorii de intrare ADC ca întreg value

unsigned char x,y; // variabile d tip caracter x și y

char *tensiune = "00.00"; // pointer tensiune

long tens;

Rutină CalculTensiune

Convertește în Volt ceea ce citește ADC-ul . x reprezintă coloana,y reprezintă linia (acestea vor fi primite de la sfârșitul codului) .

void CalculTensiune (int x,int y, unsigned int valoare)

{

tens = (long)valoare* 5000; // valoarea este înmulțită cu 5000 reprezentând tensiunea

// de referință și este memorată în tens

tens = tens / 1023; // tens este împărțită la 1023

tensiune[0] = tens/10000 + 48; // în pointer la pe poziția 0 se pune tensiunea

tensiune[1] = (tens/1000)%10 + 48;

tensiune[3] = (tens/100)%10 + 48;

tensiune[4] = (tens/10)%10 + 48;

Lcd_Out (x,y,voltage);

delay_ms(200);

}

Programul Principal

void main() {

TRISA = 0x03; // RA0 și RA1 seta ca intrări

TRISB = 0; // PORTB setat ca ieșiri

C1ON_bit = 0; C2ON_bit = 0; // dezactivare comparatoare

Lcd_Init(); // inițializare LCD

Lcd_Cmd(_LCD_CLEAR); // ștergere LCD

Lcd_Cmd(_LCD_CURSOR_OFF); // dezactivare cursor

do {

valoare = ADC_Read(0); // citire valoare ADC de la portul RA0

Lcd_Out(1,1,"Ch1:"); // afișează pe LCD rândul 1 coloana 1 textul Ch1 CalculTensiune(1,5,valoare); // trimite date la CalculTensiune

Lcd_Out(1,10,"V"); // afișează pe LCD rândul 1 coloana 10 textul V

valoare = ADC_Read(1); // citire valoare ADC de la portul RA1

Lcd_Out(2,1,"Ch2:"); // afișează pe LCD rândul 2 coloana 1 textul Ch2

CalculTensiune(2,5,valoare); // trimite date la CalculTensiune

Lcd_Out(2,10,"V"); // afișează pe LCD rândul 2 coloana 10 textul V

} while(1);

}

CAPITOLUL 3

CONCLUZII

BIBLIOGRAFIE

datasheet rezistență

datasheet PIC

Microprocessors Robert B Reese

Echipamente electonice de interfațare Dorina Isar

Datasheet Max 232N

Datasheet LCD

Vega.unitbv.ro link

Similar Posts