Sari la conținut
ELFORUM - Forumul electronistilor

Voltmetru cu PIC


Blacksmith

Postări Recomandate

Da, asa am facut, dar citirea aia pe care nu o iau in seama ce scop are ?

 

Am facut 20 de citiri la 1ms si s-a mai imbunatatit treaba. La 887 variaza de la 8.3V la 8.7V iar la 877A de la 8.6V la 8.7V. Treaba e ca eu vreau sa fac cu 887.

Totusi eu zic ca ADC-ul n-ar trebui sa joace chiar atat de mult fara oversampling. E ceva in neregula undeva...

Editat de Dudikoff
Link spre comentariu

Salut! Pentru eliminarea fluctuatiilor LSB iti recomand si eu o mediere a esantioanelor masurate, cum a mai postat cineva anterior. Iti atasez o rutina scrisa pentru un 16F676, in limbaj de asamblare. O folosesc in multe aplicatii pe mai multe tipuri de PIC, difera doar valoarea contorului, in functie de viteza de masurare. O explicatie simpla: esti intr-un lift la etajul 5. Daca masuratoarea curenta coincide cu cea anterioara, liftul urca un etaj. Daca difera, liftul coboara. Daca masuratorile coincid in mod repetat, urci cu liftul pana la ultimul etaj (10) si valoarea masurata este cea curenta (registrul ajunge la valoarea maxima), daca nu, in final cobori pana la zero si valoarea masurata este cea anterioara.

In afara de acestea, nu uita sa decuplezi alimentarea uC chiar langa capsula (100nF) si sa ai grija la buclele de masa.

Daca masori o tensiune si PIC-ul se alimenteaza chiar din acea tensiune (de ex. monitorizezi o baterie) cel mai bine este sa folosesti ca referinta VDD, nu externa. Daca-l folosesti ca aparat de masura independent, atunci o referinta de 2.5V cu TL431 este excelenta.

Spor.

 

masurare
movlw b'00001001' ;AN2, internal Vref, left justified & enables A/D
bank0
movwf ADCON0
bank1
movlw b'00110000' ;Fosc/16
movwf ADCON1
nop
bank0
bsf ADCON0,GO ;start A/D
wait1
nop
btfsc ADCON0,GO
goto wait1
bank0
movf ADRESH,0 ;trunchiere biti 0,1
movwf Vbat
;rutina pentru medierea valorii Vbat
xorwf Vbat_tmp,0
btfss z ;Vbat == Vbat_tmp?
goto next11 ;nu
movf contor_Vbat,0 ;da
xorlw .15
btfsc z ;contorul a atins valoarea maxima?
goto next13 ;da
incf contor_Vbat ;contor_Vbat < 15
movf Vbat_tmp,0
goto next12
next11
movf contor_Vbat,1
btfsc z ;contorul a atins valoarea minima?
goto next13 ;da, contor_Vbat == 0
decf contor_Vbat ;nu, contor_Vbat > 0
movf Vbat_tmp,0
goto next12
next13
movlw .15
movwf contor_Vbat ;contor_Vbat reinitializat
movf Vbat,0 ;refresh valoare masurata
movwf Vbat_tmp
next12
movwf Vbat_med
return
Link spre comentariu

 

 

As vrea sa fac cum a zis UDAR, 16 citriri la 1.25ms... dar nu am functie pentru delay cu virgula. As putea sa fac 20 de citiri la 1ms, sau e musai 16 la 1.25 ?

 

Cum sa nu ! procedura se numeste

delay_us( )

mai departe cred ca te descuri.

Link spre comentariu

Dupa cum e scris programul - achizitia in functia de afisare, tu nu faci nici un fel de medieri intre afisari, asa ca n-ai cum sa obtii rezultate stabile prin mediere. Asta pe de o parte.

procedure Voltm_Update;
begin
 ADC:=ADC_Sample;
 WordToStr(ADC,txt);

Pe de alta, ai 5 locuri in care "citesti" adc-ul si afisezi rezultatele. 5. Incearca sa le "comasezi" cumva.

  PORTC:=128;      // Busy
  Voltm_Update;
  for i:=1 to steps-1 do begin
   Delay_ms(100);
   Voltm_Update;
   v:=Vin+byte(floor((i*r)+0.5));
   if v>63 then v:=v+31;
   v:=v or 128;
   PORTC:=v;
   for j:=1 to 5 do begin
    Delay_ms(50);
    Voltm_Update;
   end;
   PORTC:=128;
  end;
  Delay_ms(100);
  Voltm_Update;
  if x>63 then x:=x+31;
  x:=x or 128;
  PORTC:=x;
   for j:=1 to 5 do begin
    Delay_ms(50);
    Voltm_Update;
   end;

Link spre comentariu

Nu cred ca are nici o treaba cu medierea. I-am facut si mediere si intradevar mai reduce ceva. Medierea se face cand iti variaza ultimul bit, dar mie imi variaza chiar si ultimi 5 biti ! Asta inseamna ca pic-ul vede fluctuatii de 80mV pe intrarea ADC-ului... ori nu are de unde sa fie asa fluctuatii pe bornele unei baterii. Eu banuiesc ceva bucle de masa...

Link spre comentariu

Ai ceva consum din pinii PIC care variază în timpul măsurătorii ? În orice caz, masa de lângă portul A trebuie considerată ca masă analogică .

 

 

PS Nu am măsurat ieri nimic cu Zener-ul ăla . M-am întors de la dentist stors de orice chef ....

Editat de UDAR
Link spre comentariu

Incredibil ! Am descoperit problema ! E de la referinta ! Am setat pe referinta lui interna de 5V si nu mai imi oscileaza nici o cifra, si asta fara nici un fel de mediere !

 

De fapt am descoperit doar o parte a problemei. Acum mai trebuie sa aflam de ce nu-i place cu referinta mea cu TL431...

O sa va explic un pic mai tarziu cum am facut-o.

 

 

Edit: Da, TL431 tot din tensiunea de 5V a pic-ului se alimenteaza.

Editat de Dudikoff
Link spre comentariu

Adica e stabil si daca nu ii pun nimic si daca ii pun 10uF iar daca ii pun 100nF...1uF nu e ? :rade:

 

Eu tocmai 100nF i-am pus.... Abia astep sa incerc si cu 10uF.

Link spre comentariu

Am măsurat între timp două Zenere - chiar dacă s-a depășit momentul , poate e util .

 

Deci : D1 D2 Tina

3,0V 2µA 3µA 0

3,5V 11µA 15µA 0,5µA

4,0V 53µA 68µA 9µA

 

Ambele au sub 0,1µA la 1V deci respectă DS . Diodele sunt BZX55C5V1 procurate de la Comet în urmă cu ceva ani ( 2009) , producătorul nu îl ( mai ) știu .

 

Concluzia : Atenție ce și cum protejați cu diode Zener ( de tensiune mică )!

O soluție mai bună este de obicei cu diode normale spre masă și Vcc urmat de o rezistență spre intrarea integratului .

Editat de UDAR
Link spre comentariu

UDAR, esti genial (ca de obicei) !

Am pus 10uF pe iesire la referinta mea cu TL431 si acum merge perfect. Nu mai joaca nici o cifra, doar zecimala foarte putin din cand in cand.

M-ai salvat iar de un atac cerebral. Mersi !

 

P.S: Mda, nu cred ca mai pun zener. Am mai testat si eu cu un alt zener in simulator si distorsioneaza rau de tot. Lasa, ca daca e sa loveasca un fulger si sa-mi vina mai mult de 230V la priza... pic-ul e ultima mea grija.

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