Blacksmith Postat Martie 2, 2017 Autor Partajează Postat Martie 2, 2017 (editat) 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 Martie 2, 2017 de Dudikoff Link spre comentariu
darius_bv Postat Martie 2, 2017 Partajează Postat Martie 2, 2017 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
djvas Postat Martie 2, 2017 Partajează Postat Martie 2, 2017 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
Liviu M Postat Martie 3, 2017 Partajează Postat Martie 3, 2017 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
Blacksmith Postat Martie 3, 2017 Autor Partajează Postat Martie 3, 2017 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
Liviu M Postat Martie 3, 2017 Partajează Postat Martie 3, 2017 O schema completa a montajului ai? Completa insemnand inclusiv condansatorii pe alimentari, referinte... Link spre comentariu
Blacksmith Postat Martie 3, 2017 Autor Partajează Postat Martie 3, 2017 Am sa incerc sa fac una... Link spre comentariu
UDAR Postat Martie 3, 2017 Partajează Postat Martie 3, 2017 (editat) 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 Martie 3, 2017 de UDAR Link spre comentariu
mars01 Postat Martie 3, 2017 Partajează Postat Martie 3, 2017 Daca folosesti ca tensiune de referinta tensiunea de alimentare de 5V, se comporta la fel? Link spre comentariu
Mircea Postat Martie 3, 2017 Partajează Postat Martie 3, 2017 TL431 tot din sursa de 5V e alimentat. Dudi, poti pune o sonda de osciloscop pe alimentarea de 5V? Link spre comentariu
Blacksmith Postat Martie 3, 2017 Autor Partajează Postat Martie 3, 2017 (editat) 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 Martie 3, 2017 de Dudikoff Link spre comentariu
UDAR Postat Martie 3, 2017 Partajează Postat Martie 3, 2017 Poate să fie asta : Eu de obicei pun automat 10µF Tantal și de aceea am cam uitat de problemă . 1 Link spre comentariu
Blacksmith Postat Martie 3, 2017 Autor Partajează Postat Martie 3, 2017 Adica e stabil si daca nu ii pun nimic si daca ii pun 10uF iar daca ii pun 100nF...1uF nu e ? Eu tocmai 100nF i-am pus.... Abia astep sa incerc si cu 10uF. Link spre comentariu
UDAR Postat Martie 3, 2017 Partajează Postat Martie 3, 2017 (editat) 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 Martie 3, 2017 de UDAR Link spre comentariu
Blacksmith Postat Martie 3, 2017 Autor Partajează Postat Martie 3, 2017 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
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum