Jump to content
ELFORUM - Forumul Electronistilor
GeoMar

Voltmetru/Ampermetru cu PIC 16F877A

Recommended Posts

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. :da

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

1. La cat timp afisezi?

Nu inteleg la ce te referi cu asta ?!

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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]

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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? :nas: Asa de greu este? :nebunrau: Daca stiam ca este asa de greu, ma lasam pagubas. :jytuiyu Credeam ca se poate rezolva mai usor, de cineva care se pricepe la soft/programare. :da

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ...

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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 :aplauze , 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.

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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 :aplauze , 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.