GeoMar Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 Am realizat si eu un Voltmetru/Ampermetru cu PIC 16F877A [pentru definitivarea sursei reglabile dupa acest forum]: Schema Voltmetru_Ampermetru cu PIC 16F877A.jpg[/attachment] El are o tensiune de referinta de 3,5V,pe baza caruia masoara, cu pasi de 0,03 v, tensiunea si amperajul. Am scris hexul fara probleme, merge, imi masoara, dar intampin o problema de afisare. Daca, de exemplu masor o tensiune de 14,91 V cu el si cu un aparat de masura in paralel, cand comuta afisarea la o tensiune de 14,88 V sau la 14,94 V, tensiunea [digitii] afisati anterior, am impresia ca se sting prea incet cand imi afiseaza valoarea noua, se suprapun cele 2 valori si nu se mai distinge valoarea afisata, exact ca in poza: Poza 2.jpg[/attachment] Daca cineva care se pricepe la programare, poate sa arunce o privire pe soft si sa ma ajute, as fi recunoscator. NU trebuie scris softul de la zero, doar eventual cateva modificari pentru eliminarea problemei de afisare. Atasez si sursele folosite pentru creearea hexului: [attachment=0]hex-source.rar[/attachment] Multumesc anticipat. Link spre comentariu
puiu Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 1. Problema iti apare la orice tranzitie cu 0,03V? Link spre comentariu
GeoMar Postat Octombrie 6, 2010 Autor Partajează Postat Octombrie 6, 2010 1. Problema iti apare la orice tranzitie cu 0,03V?DA, aceasta problema apare la orice tranzitie de 0,03v. Mereu trebuie sa misc potentiometrul sursei sa indice corect, sa nu se mai "suprapuna" cifrele afisate.La orice modificare a cifrelor afisate, asa reactioneaza. Link spre comentariu
puiu Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 1. La cat timp afisezi? Link spre comentariu
GeoMar Postat Octombrie 6, 2010 Autor Partajează Postat Octombrie 6, 2010 1. La cat timp afisezi?Nu inteleg la ce te referi cu asta ?! Link spre comentariu
puiu Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 1. Informatia de la procesor la afisaj este transmisa: de cate ori se modifica sau este transmisa la un interval de timp de exemplu la 20msecunde? Link spre comentariu
GeoMar Postat Octombrie 6, 2010 Autor Partajează Postat Octombrie 6, 2010 1. Informatia de la procesor la afisaj este transmisa: de cate ori se modifica sau este transmisa la un interval de timp de exemplu la 20msecunde?Sincer nu stiu, NU ma pricep la partea soft [programare], tocmai de aceea am apelat la ajutor si am postat si Hex-source. Poate altii care se pricep, arunca o privire si ma ajuta.Eu doar am scris hexul in PIC, modificat de altcineva ca sa apara la inceput : Sursa reglabila by GeoMar. :jytuiyuIn hex-source se gasesc fisierele din poza:[attachment=0]Fisiere in Hex-source.jpg[/attachment] Link spre comentariu
puiu Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 1. Se pare ca acolo este greseala ca apare oscilatia respectiva. Din pacate ASM tau este generat si apare si adresa din ROM si codificarea ei. Mi-a luat o ora aproape pentru primele 100 de instructiuni ca sa sterg informatia in plus. Link spre comentariu
GeoMar Postat Octombrie 6, 2010 Autor Partajează Postat Octombrie 6, 2010 1. Se pare ca acolo este greseala ca apare oscilatia respectiva. Din pacate ASM tau este generat si apare si adresa din ROM si codificarea ei. Mi-a luat o ora aproape pentru primele 100 de instructiuni ca sa sterg informatia in plus.Unde acolo este greseala? Asa de greu este? Daca stiam ca este asa de greu, ma lasam pagubas. Credeam ca se poate rezolva mai usor, de cineva care se pricepe la soft/programare. Link spre comentariu
puiu Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 1. Nu trebuie sa te lasi pagubas ci trebuie sa spui de unde ai luat programul deoarece nu ai ASM curat si trebuie sa fie curatat ca sa poata fi rulat Link spre comentariu
junior Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 Colegu' a fost putin neatent intrucat in arhiva este postat si fisierul sursa , scris in MicroC .Din pacate autorul nu a implementat si un algoritm de mediere a valorilor citite precum si o afisare corespunzatoare adica un delay de circa 100ms intre afisarea unor valori succesive .Se poate rezolva relativ usor insa cum nu posed/folosesc MicroC ... Link spre comentariu
nooob64 Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 Nu este nevoie de nici un delay (nici nu e recomandat delay care sa tina procesoru in ciclu infinit ,decit delay bazat pe intreruperi) , ci o marire a rezolutiei ADC din soft si se va afisa frumos pe lcd fara sa se schimbe valorile aiurea. Pun aici un cod cum am facut eu : void get_volt(int pin,int lin,int col){ // assign text to string//aci incepe marirea rezolutiei din soft de la 8 bit la 12 bit daca tin bine minte*************************** int i; i=1; while(i<=256){ aux=aux+ADC_read(pin);// se fac 256 citiri adc valoarea se imparte la 16 i++; } adc_rd = aux/16; tlong = (long)adc_rd * 25000; // covert adc reading to milivolts tlong = tlong / 4095; // aci deja avem 12 bit ADC se face conversia // 0..4095 -> 0-25000mV ch = tlong /10000;//aci am terminat cu conversia si am valoarea tensiunii numa buna de pus pe lcd******************* lcd_chr(lin,col,48+ch); ch = (tlong / 1000) %10; // extract volts digit LCD_Chr_cp(48+ch); // write ASCII digit at 2nd row, 9th column LCD_Chr_CP('.'); ch = (tlong / 100) % 10; // extract 0.1 volts digit LCD_Chr_CP(48+ch); // write ASCII digit at cursor point ch = (tlong / 10) % 10; // extract 0.01 volts digit LCD_Chr_CP(48+ch); // write ASCII digit at cursor point LCD_Chr_CP('V'); aux=0; }Rezulta o afisare corecta pe lcd fara sa o ia razna numerele , rezoluta ~0.01V Cirnatu ala de conversii matematice se poate inlocuii cu functia din C "sprintf" si iese mai compact codul , insa papa mai mult rom si ram. Link spre comentariu
GeoMar Postat Octombrie 6, 2010 Autor Partajează Postat Octombrie 6, 2010 Nu este nevoie de nici un delay (nici nu e recomandat delay care sa tina procesoru in ciclu infinit ,decit delay bazat pe intreruperi) , ci o marire a rezolutiei ADC din soft si se va afisa frumos pe lcd fara sa se schimbe valorile aiurea.Pun aici un cod cum am facut eu :....Rezulta o afisare corecta pe lcd fara sa o ia razna numerele , rezoluta ~0.01VCirnatu ala de conversii matematice se poate inlocuii cu functia din C "sprintf" si iese mai compact codul , insa papa mai mult rom si ram.Ehe, daca ma pricepeam si eu ca tine , nu mai apelam la forum sa ma jute cineva.Acum daca zici ca merge asa, imi poti da un hex facut dupa modificarea ta, ca sa-l scriu si sa-l testez pe "viu", adica in montajul real, sa vedem cum merge. Link spre comentariu
puiu Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 1. Din pacate softul original este asa cu delay. Si tot din pacate GeoMar a folosit fisierul hexa care l-a avut. Daca il poti rezolva ar fi foarte bine. Se pare ca are un delay de 50 us. Link spre comentariu
nooob64 Postat Octombrie 6, 2010 Partajează Postat Octombrie 6, 2010 Nu este nevoie de nici un delay (nici nu e recomandat delay care sa tina procesoru in ciclu infinit ,decit delay bazat pe intreruperi) , ci o marire a rezolutiei ADC din soft si se va afisa frumos pe lcd fara sa se schimbe valorile aiurea.Pun aici un cod cum am facut eu :....Rezulta o afisare corecta pe lcd fara sa o ia razna numerele , rezoluta ~0.01VCirnatu ala de conversii matematice se poate inlocuii cu functia din C "sprintf" si iese mai compact codul , insa papa mai mult rom si ram.Ehe, daca ma pricepeam si eu ca tine , nu mai apelam la forum sa ma jute cineva.Acum daca zici ca merge asa, imi poti da un hex facut dupa modificarea ta, ca sa-l scriu si sa-l testez pe "viu", adica in montajul real, sa vedem cum merge.O sa incerc sa fac ceva in weekend (in timpul saptaminii lucrez si abia am timp liber) sau maine ... depinde cum pot compila programul ca mai mult da crash mikroc-ul in windows7. Dupa modificare ar trebuii sa varieze cu maxim 0.03 unitati si o rezolutie de 14 biti sau 12 depinde cum se face formula , ar mai trebuii sa stiu tensiunea maxima afisata pe lcd 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