ratza Postat Februarie 3, 2014 Partajează Postat Februarie 3, 2014 Rectific: am citit greşit toate foile de catalog ale tuturor ADC-urilor cu care am lucrat. Se pare că m-a scos din pubelă împărţeala cu 1023, fiindcă eroarea rezultată e mai mică decît un LSB. Link spre comentariu
nickrvl Postat Februarie 3, 2014 Autor Partajează Postat Februarie 3, 2014 Lipseste un post, ori am uitat sa-l trimit?nico de ce intrebi daca intra softul? confunzi cu attiny13? la 24 i-mi ocupa 60%..................L.E O sa incepem de la 0, probabil ca nu inteleg calculele pe deplin.-La intrarea divizorului rezistiv o sa aplic o tensiune de la 0 la 100V (in realitate de la 0 la 23.9V, atit debiteaza sursa disponibila)-Din divizorul rezistiv reglez in asa fel incit ADC-ul afisat pe LCD nativ fara a fi trecut prin calcule i-mi indica 239 (pot lejer sa-l transform in 23.9V)-Acuma incep si scad treptat tensiunea aplicata de sursa de la 23.9V pina la 0 si apare acel decalaj de 0.2V aproape de zero.Acel decalaj cum il elimin? Link spre comentariu
ratza Postat Februarie 3, 2014 Partajează Postat Februarie 3, 2014 Postează schema de la intrarea de tensiune pînă la ADC. Link spre comentariu
nico_2010 Postat Februarie 3, 2014 Partajează Postat Februarie 3, 2014 Codul cu modificarile pe care trebuie sa le faci pentru a afisa tensiuea: $regfile = "ATtiny24.dat"Config Lcd = 16 * 2Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portb.0 , Rs = Portb.1Cursor OffClsConfig Adc = Single , Prescaler = Auto , Reference = Aref 'Avcc 'Internal '_1.1Start AdcDim Aratavolt As String * 3'Dim X As WordDim V As WordDim Volt As SingleDoV = Getadc(3)Volt = V * 5.0Volt = Volt / 1024Aratavolt = Str(volt)If Volt > 99. ThenAratavolt = Format(aratavolt , "00.0")Locate 2 , 1Lcd Aratavolt ; "V "ElseAratavolt = Format(aratavolt , "0.0")Locate 2 , 1Lcd Aratavolt ; "V "End IfLocate 1 , 1Lcd "ADC = " ; Getadc(3) ; " "Wait 1LoopSi raportul BASCOM: Report : test adc nickrvlDate : 02-03-2014Time : 21:27:45Compiler : BASCOM-AVR LIBRARY V 2.0.5.0Processor : TINY24SRAM : 80 hexEEPROM : 80 hexROMSIZE : 800 hexROMIMAGE : 824 hex -> Does not fit into ROMROMIMAGE : 2084 decFLASH USED : 101 %BAUD : 9600 BaudXTAL : 8000000 HzBAUD error : 100.%Stack start : DF hexStack size : 28 hexS-Stacksize : 10 hexS-Stackstart : B8 hexFramesize : 20 hexFramestart : 88 hexSpace left : 29 decLength of string might not be enough to hold the result. A length of 16 is desir in line 20Source string could be too big to fit into target string [ARATAVOLT>___STRBUF] in line 22Source string could be too big to fit into target string [ARATAVOLT>___STRBUF] in line 26High Baud rate error in line 0Asta este primul raspuns. Al doilea raspuns incepe cu o intrebare: dupa divizor ai cumva un operational ca buffer? Daca da, atunci ai o problema cu offsetul lui. Daca nu ai un operational si calculele din fisierul anexat pe pagina 1 este corect, atunci ai o nepotrivire de "impedanta". Verific si revin. Asa cum am banuit rezistenta pe care o vede ADC-ul este de circa 5k, care pusa in paralel cu rezistenta de intrare a ADC (min.10k ) da cam 4.5k ... cam putin pentru ca ADC-ul sa masoare bine sau pune un buffer. Link spre comentariu
Liviu M Postat Februarie 3, 2014 Partajează Postat Februarie 3, 2014 La diferenta de 200 mV (2LSB) as da vina si pe +- 2LSB Absolute Accuracy - capitolul 16.1 in data-sheet.Si tot in data-sheet as citi si capitolul 16.10, in special partea cu gain error. Link spre comentariu
nickrvl Postat Februarie 3, 2014 Autor Partajează Postat Februarie 3, 2014 Postează schema de la intrarea de tensiune pînă la ADC. La 23.9V cit pot eu injecta din sursa de alimentare am 1.18V la pinul 10 intrarea ADC.3, referinta este Avcc alimentare mc adica 5.02V, ADC-ul afisat pe LCD este 239, nu este prelucrat prin formule de calcul.Am vazut si celelalte posturi, o sa raspund dupa ce ma lamuresc.L.E. mai apuc sa mai postez si urmatoarele:nico Am modificat si eu codul pentru ca acum chiar nu-mi intra in memorie verifica te rog:$regfile = "ATtiny24.dat"Config Lcd = 16 * 2Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portb.0 , Rs = Portb.1Cursor OffClsConfig Adc = Single , Prescaler = Auto , Reference = Avcc 'Internal '_1.1Start AdcDim V As WordDim Volt As SingleDoV = Getadc(3)Locate 1 , 1Lcd "ADC = " ; V ; " "Volt = V * 5.0Volt = Volt / 1024Locate 2 , 1Lcd Volt ; "V "Wait 1Loopsi ce se vede:L.L.E. in partea de jos a LCD-ului se vede rezultatul dupa calcul. Link spre comentariu
Liviu M Postat Februarie 3, 2014 Partajează Postat Februarie 3, 2014 @nico: esti sigur la partea cu rezistenta/impedanta de iesire a sursei?Ca mie din capitolul 16.8 imi iese invers - cu cat mai mica, cu atat mai bine.In acelasi sens, vazand aia 47 uF la intrarea ADC, voiam sa-l intreb pe nickrvl cat de rapid se stabilizeaza masuratoarea. Link spre comentariu
nickrvl Postat Februarie 3, 2014 Autor Partajează Postat Februarie 3, 2014 .........................In acelasi sens, vazand aia 47 uF la intrarea ADC, voiam sa-l intreb pe nickrvl cat de rapid se stabilizeaza masuratoarea.Daca anulez pauza de 1 secunda din program aproape instant, daca pun la loc pauza si scot cond-ul rezultatul pilpiie intre valori mari cu frecventa de o secunda. Link spre comentariu
Liviu M Postat Februarie 3, 2014 Partajează Postat Februarie 3, 2014 aproape instant,Am intrebat aiurea, aveam alte instrumente in cap. Sorry.si scot cond-ulNu ma gandeam sa-l scoti de tot, ci sa-l faci mai mic. Da' daca merge bine, nu e cazul. Link spre comentariu
ratza Postat Februarie 4, 2014 Partajează Postat Februarie 4, 2014 Ar mai fi o întrebare: ce afişezi pe ecran e chiar valoarea din ADC? Link spre comentariu
nico_2010 Postat Februarie 4, 2014 Partajează Postat Februarie 4, 2014 @nico: esti sigur la partea cu rezistenta/impedanta de iesire a sursei?Ca mie din capitolul 16.8 imi iese invers - cu cat mai mica, cu atat mai bine.In acelasi sens, vazand aia 47 uF la intrarea ADC, voiam sa-l intreb pe nickrvl cat de rapid se stabilizeaza masuratoarea.ADC-ul din uC este optimizat pentru o rezistenta sursei de 10k (sau mai mica spun ei), deci in jurul valorii asteia ar trebui sa se invarta rezistenta de pe care se face citirea. Condensatorul de 47u poate fi micsorat pana la 100nF pentru semnale de masurat putin zgomotoase sau cu riplu mic, altfel o sa aiba valori afisate fluctuante si nu cred ca asta isi doreste. Link spre comentariu
nico_2010 Postat Februarie 4, 2014 Partajează Postat Februarie 4, 2014 Ar mai fi o întrebare: ce afişezi pe ecran e chiar valoarea din ADC?Pe primul rand este afisata valoarea ADC-ului (1.16*1024/5 =237) si se inscrie in tolerante. Link spre comentariu
nickrvl Postat Februarie 4, 2014 Autor Partajează Postat Februarie 4, 2014 "rata" Ce se vede pe LCD, primul rind este exact valoarea ADC-ului, se vede din program, il citesc si-l afisez, al doilea rind afisaza adc-ul trecut prin formula: Volt = V * 5.0 Volt = Volt / 1024 Aratavolt = Str(volt) propusa de nico, a 7-ea postare. "Liviu" Nu e problema, insa vreau sa redau cit mai fidel ce se intimpla..... "Nico" Pe primul rand este afisata valoarea ADC-ului (1.16*1024/5 =237) si se inscrie in tolerante.Ce reprezinta/este acel 1.16 din formula? Pina aici ce concluzie sa trag? aceasta abatere de cel putin 0.8V si maxim 1.6V pe toata plaja masurata de la 0 la 100V de fapt e normala? O pot anula din calcule dar are un pret , softul intra cu greu si cu sacrificii mari in Mc iar de la 0.4V la 0V i-mi afisaza o "valoare" continua in functie de valoarea pe care o are suma fixa folosita la rectificare. Si totusi o explicatie/solutie trebuie sa existe, sint pe net exemple de voltmetre fara abateri, sper sa nu fi masluit totusi multimetrele cu care se facea comparatie Link spre comentariu
nico_2010 Postat Februarie 4, 2014 Partajează Postat Februarie 4, 2014 Valoarea 1.16 este valoarea tensiunii afisate pe LCD randul 2 (rotunjita pentru exemplu de calcul). Am verificat si programul, este OK (87%), insa va trebui sa gasesti o cale pentru formatarea rezultatului. Link spre comentariu
nickrvl Postat Februarie 4, 2014 Autor Partajează Postat Februarie 4, 2014 Valoarea 1.16 este valoarea tensiunii afisate pe LCD randul 2 (rotunjita pentru exemplu de calcul). Am verificat si programul, este OK (87%), insa va trebui sa gasesti o cale pentru formatarea rezultatului. A, despre asta era vorba dar in acelasi timp este normal sa fie bine doar calculul sa plecat de la valoarea ADC-ului deja afisata pe prima linie.Daca programul este ok pentru citirea ADC mai departe se poate si trebuie "rafina" insa deocamdata ma concentrez doar asupra ADC-ului si "abaterii". In alta ordine de idei ce am scris asa cum m-am priceput in pdf-ul din primul post este corect? unde am incercat si sper sa fi si reusit sa arat "unui incepator" cum poate face un voltmetru cu microcontroler, cum sa calculeze divizorul rezistiv in functie de tensiunea dorita a fi masurata, cu cuvinte "simple" ca tot incepator sint si eu si mi-e greu sa inteleg un limbaj profesionist despre acesta. Dar m-am cramponat de aceasta abatere...... 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