Sari la conținut
ELFORUM - Forumul electronistilor

PIC 12F675 - Milivoltmetru


78ATI

Postări Recomandate

Buna tuturor. Am o mica problema legata de masurarea unei tensiuni pe o rezistenta de valare mica 2 Ohm. Doresc sa fac un voltmetru cu PIC16F675, cat mai simplu posibil. Ma puteti ajuta cu exemple de scheme electronice si/sau exemple de conversie A/D pentru acest controler. Problema in cazul meu este ca voi masura tensiunea intr-un curcuit exterior celui de 5V (24V), si nu stiu cum as putea seta tensiunea de referinta. Sincer nu as dorii sa folosesc surse calibrate pentru tensiunea de referinta, deoarece precizia sau rezolutia nu este foarte importanta. Va multumesc!

Link spre comentariu
  • Răspunsuri 15
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • 78ATI

    8

  • cirip

    3

  • XAN77

    2

  • Abram Burel

    2

Top autori în acest subiect

1. roblema este ca va trebui sa pui 0V de la montajul PIC la 0V de la montajul cu 24V.2. Pe rezistenta ta de masura 2 Ohmi pui in paralel un divizor rezistiv de exemplu 5K+20K, daca nu pot sa apara semnale mai mari de 24V, si iei semnalul de masura de pe rezistenta de 5 K care are un capat legat la masa.3. Pentru sursa de referinta eu iti recomand MCP1541, care este un SMD care iti da 4, 096V tocmai 4 mV pe diviziune daca ai 1024 de diviziuni sau 16 mV pe diviziune daca ai 256 de diviziuni.4 pentru reglaj poti utiliza un potentiometru de 1k in serie cu rezistenta de 5K care devine rezistenta de 3,9K (mai ales daca folosesti monzajul de la pt. 3)

Link spre comentariu

Am simulat in ElectronicWorkbanch, pentru 12V si 10A, cu rezistenta de 0.1Ohm as avea o cadere de tensiune de 1V.In cazul in care voi avea 24V / 10A rezistenta de 2Ohm as avea o cadere de tensiune 18.5V. Nu este nici o problema realizarea unui divizor rezistiv, ceea ce ma intereseaza este cum fac montajul de voltmetru? Pentru varianta 12V/10A as avea o cadere de maxim 1V ceea ce s-ar incadra in carcateristicile de masura 0-5V.Montajul il doresc sa fie exact ca in figura de mai jos (voltmetrul sa fie inlocuit cu 12F675).

Link spre comentariu
  • 2 săptămâni mai târziu...

Revin cu problema mea, conversia A/D facuta cu un pic 12F675.

M-ar interesa o schema electronica pentru montajul de masura a tensiunii ce cade pe rezistenta.

Este corect? GPIO.1 conectat la masa (ce coincide cu primul picior a rezistorului

GPIO.0 conectat la celalat picior al rezistorului.

 

 

Va multumesc

Link spre comentariu

Este corect? GPIO.1 conectat la masa (ce coincide cu primul picior a rezistorului

GPIO.0 conectat la celalat picior al rezistorului.

Nu este corect. F675 masoara o tensiune pozitiva fata de masa pe cate o intrare de convertor A/D. Tensiunea de masurat trebuie aplicata intre Vss-ul picului si una dintre intrarile A/D: AN0...AN3

Cirip

Link spre comentariu

Cirip, am inteles, voi conecata masa F675 cu reyistorul meu, iar la celalat capat voi conecat una din intrarile AD.

Intrebare:

Ce trebuie, sau cum trebuie sa setez Vref? Nu am surse calibrate de tensiune.

Link spre comentariu

Ce trebuie, sau cum trebuie sa setez Vref? Nu am surse calibrate de tensiune.

Daca nu iti trebuie o precizie mare, poti folosi Vcc ca referinta. Eu asa fac in general. Daca vrei ceva putin mai pricopsit, foloseste referinta saracului, adica un TL431 la pinul dedicat referintei si configureaza picul corespunzator. Sper ca asta a fost sensul intrebarii.

Cirip

Link spre comentariu

Acesta a fost sensul intrebarii. Precizia nu este deosebita, ci mai presus de tot ma intereseaza depasirea unui prag al tensiunii (1V). Am sa setez ca si referinta tensiunea de alimentare.Va multumesc inca o data tuturor pentru ajutor

Link spre comentariu
  • 2 săptămâni mai târziu...

Am facut un programel in Proton PicBasic, insa nu reusesc sa fac sa porneasca conversia...sau cel putin...nu stiu ce ar putea avea.

Va rog daca puteti arunca o privire:

 

Device = 12F675 Dim ADVAL  as ADRESL.Word Delayms 30				  GPiO=0     CMCON=7      TRISIO = %00000100      ' GPI0.2 Input     ANSEL =  %00110100     ADCON0 = %10001001     ' ADC input on GPIO.2/AN2/pin5		Convert: 			ADCON0.1 = 1					' Start Conversion				While ADCON0.1 = 1: Wend			Delayms 500       				 ' Wait 0.5 second	        If ADVAL > 200 then	           GPIO.5=1                                                'Led ON	        Else	           GPIO.5=0                                                 'Led OFF	        End ifGoto Convert

Rog o mana de ajutor daca se poate, bininteles!

Multumiri!

Link spre comentariu

Secventa de cod e corecta. Singura chestie care ma intriga este declararea variabilei rezultat. Nu ma pricep la Basic-ul ala, dar esti sigur ca in felul asta variabila iti intoarce resultatul din ADRESL?

Link spre comentariu

Din cele citite ca si "tutotial" si ceva exemple mai complexe...acesta este modalitatea extragerii conversie..insa, la mine nu functioneaza!In mod normal 10biti pentru o tensiune de 5V trebuie sa fie un word cu valoarea 1024.Sper sa nu fi gresit cu ceva socotelile!...mai incerc pe un alt controler, poate asta nu vrea :)

Link spre comentariu

Nici eu nu ma pricep la Basic; lucrez cu picii in special in asembler, dar...Rezultatul conversiei este depus in ADRESH:ADRESL prin hardware. De acolo trebuie citit si adus in variabila ADVAL, care este apoi testata. Unde se face citirea rezultatului in cadrul buclei?"Nu functioneaza" este extrem de vag. Ce tensiune aplici la intrare? Care te astepti sa fie rezultatul conversiei? Cat citesti in realitate? ... si asa mai departe. Ai posibilitatea sa simulezi? Rularea pas cu pas pe un simulator iti permite sa vezi in orice moment ce se intampla in procesor. Poti forta, de exemplu, un rezultat al conversiei si apoi sa vezi daca este preluat si testat in bucla de decizie. MPLAB stie sa faca asa ceva.Proton asta genereaza si un fisier asembler? Daca da, ar fi o solutie sa il postezi ca sa vedem ce face picul de fapt. De asta nu-mi plac limbajele de nivel inalt la controlere ptr ca nu stii ce face de fapt procesorul.Cirip

Link spre comentariu

nu stiu de ce te astepti sa gasesti in ADVAL valoarea conversiei, trebuia sa folosesti un ADVAL = ADIN 2, in exemplul din proton este foarte simplu si este folosita instructiunea variabila = ADIN_chanel, adica ADIN2. Nu stiu de ce teai complicat singur.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări