Sari la conținut
ELFORUM - Forumul electronistilor

voltampermetru cu pic 16f876


winston

Postări Recomandate

Asta e cablajul?http://elforum.info/viewtopic.php?p=1404896#p1404896 daca da atunci AICI ai arhiva cu documentatia. Nu are alimentare diferentiala, se foloseste un shunr pe minus iar caderea de tensiune de pe el este amplificata cu AO neinversor, lipsa alimentarii simetrice duce la o oarecare eroare la limita inferioara a curentului afisat deoarece LM358 alimentat simplu, nu poate reda pana la 0V, dar probabil eroarea este suficient de mica incat sa nu conteze, la sursa mea eu am folosit tot LM358 dar alimentat simetric si cu shunt pe plus pentru a avea o masa comuna.

Link spre comentariu

eu am pic18f45k80 care are rezolutie adc pe 12bit (adica citeste 4096 de valori fata de 1024 cat are pe 10bit)e undeva la 30 de lei de pe adel.aida. daca folosim referinta interna cea de 5V de la alimentare vom avea o precizie de de 5v/4096= 1.2mV, si apoi daca se mai foloseste si referinta externa sa zicem 4.096V(este integrat special pentru asta) atunci vom avea prezicie de 1mV. si apoi daca modificam referinta se poate modifica si preciza(2.048, 1.024, 0.512V etc.).La lucrarea mea de licenta monitorizam curentul de incarcare al unui laptop folosind un sunt de 0.1R/3W pus pe masa, citeam de pe el de vreo 6 ori pe secunda, faceam media aritmetrica si afisam cu o zecimala si eram multumit de afisare.

Sa inteleg ca folosind o referinta de 0,512V,PIC16F876 va masura cu pasi de 0,5mV?Atunci nu s-ar putea obtine acesta tensiune,dintr-un TL431,urmat de un divizor rezistiv,eventual si un repetor facut cu AO?
Link spre comentariu

rog pe Thunderer si Liviu M sa isi dea cu parerea cu privire la utilizarea unei referinte externe pentru masurari tensiuni mici, facand abstractie de toate tensiunile parazite care se pot induce, ca principiu daca folosesc o referinta de 0.3V sau 1V care e termocompensata si precisa ar merge sa masuram cu pasi mici?

Link spre comentariu

Nu raspund in locul celor intrebati dar imi permit o recomandare : citeste DS microcontrolerului unde o sa gasesti valoarea minima recomandata pentru Vref. In particular la PIC18F45K80 ( de fapt toata familia ) citeste si erata.

Link spre comentariu

asa este ,am gasit ca valoarea minima pentru tensiunea de referinta zice ca e 2V, deci mai jos de 2V nu va merge, multumesc UDAR.PS: ma refer in cazul lui Matache cu pic16f876a.

post-65525-139829717828_thumb.jpg

Link spre comentariu

Asa este, VREF nu poate fi oricat de mic, dar daca folosim o referinta de 2.048V vom avea 2 mV pe LSB.In orice caz, mai buna decat folosind VDD ca referinta. Si in orice caz, mai stabila.Ce-i drept, se micsoreaza domeniul de intrare, asa ca trebuiesc stabilite "prioritatile".PS Remarca lui UDAR e aplicabila intotdeauna - prima sursa de informare trebuie sa fie DS. :aplauze

Link spre comentariu

da stiu, intodeauna datasheet-ul doar ca eu nu pricep ce zice acolo cu toti registrii aia, sunt doar un simplu electronist care a invatat putina programare, de nevoie. Deci referinta trebuie neparat sa fie gen 2.048V sau 3.072 sau 4.096? sau se poate folosi si 2.5V sau 3V etc? ma gandesc ca ar merge ca pana la urma pasii vor fi dati de referinta/rezolutie... gresesc pe undeva? si cum afecteaza domeniul de intrare? in sensul ca va fi doar de la 0 la Vref?

Link spre comentariu

Poate fi ORICE valoare intre valoarea minima si VDD. Domeniul de intrare la pin-ul uC va fi 0...Vref . Daca doresti un alt domeniu folosesti un divizor sau un amplificator.

Link spre comentariu

Poate fi orice valoare intre Vref- si Vref+, cu (Vref+ - Vref- ) > Vref_min (2V pentru 16f87x), Vref+ < Vdd...Referintele puteri ale lui doi dau valori/LSB numere intregi si e mai usor de lucrat cu ele ulterior.LE Sorry, iar am citit pe sarite si am raspuns despre semnalul de intrare.Referintele sunt doua Vref+ si Vref-. Se pot alege cum ne convine mai tare, respectand cateva conditii specificate in DS, in genul- Vref- > Vss- Vref+ < Vdd- Vref+ - Vref- > Vref_min (2V la seria 16f87x).

Link spre comentariu

...utilizarea unei referinte externe pentru masurari tensiuni mici, facand abstractie de toate tensiunile parazite care se pot induce

Recent am facut un proiect cu masurari precise (a zecilor de milivolti) si numai o referinta externa a rezolvat problema. Daca ai loc, buget si nevoie foloseste o referinta. Pentru un astfel de sursa de cc nu prea se merita decat daca ai intradevar "paraziti". O sursa de astfel de paraziti poate fi si conexiunile la LCD.In rest, la intrebarea despre limitele referintei, s-a dat deja raspunsul.
Link spre comentariu

M-am lamurit si eu cum e cu referinta.Speram sa poata functiona cu o referinta cat mai mica,aproape de 100mV,pentru a citi direct tensiunea de pe sunt.In concluzie trebuie AO,cu dezavantajele aferente.Oricum o sa testez si cu 2V,obtinuti cu un TL431 si divizor rezistiv.Acum mai o intrebare;s-ar putea afisa pe trei iesiri la PIC16F876,cresterea,descresterea respectiv ramanerea curentului/tensiunii,la aceeasi valoare?De exemplu masor curentul printr-o sarcina variabila,a carei rezistenta poate scadea,creste,ramane constanta.Daca curentul prin rezistenta creste,sa se aprinda un led,daca scade,sa se aprinda alt led,primul stingandu-se.Iar daca la doua masuratori succesive curentul e acelasi,ledurile amintite sa se stinga,eventual aprinzandu-se al treilea.

Link spre comentariu

Buna ziua, am trimis zilele trecute mesaje private catre Liviu M si thunderer unde am cerut o parere cu privire la problema lui giongiu am mai realizat o varianta unde masor 10 valori alre curentului si compar prima cu ultima dar tot nu functioneaza, cel putin nu in simulator. atasez codul sursa.

 

//Conexiuni LCDsbit LCD_RS at RB7_bit;sbit LCD_EN at RB6_bit;sbit LCD_D4 at RB5_bit;sbit LCD_D5 at RB4_bit;sbit LCD_D6 at RB3_bit;sbit LCD_D7 at RB2_bit;sbit LCD_RS_Direction at TRISB7_bit;sbit LCD_EN_Direction at TRISB6_bit;sbit LCD_D4_Direction at TRISB5_bit;sbit LCD_D5_Direction at TRISB4_bit;sbit LCD_D6_Direction at TRISB3_bit;sbit LCD_D7_Direction at TRISB2_bit;//Declarare variabileunsigned char ch, ADCx;unsigned int Tensiune, Curent, Curent1,Curent2,Curent3,Curent4,Curent5,Curent6,Curent7,Curent8,Curent9,Curent10, Curent_medie;unsigned long V, A, Pw;unsigned short current_duty1,current_duty2;//Functie principalavoid main() {                           INTCON = 0;                                                     // Dezactivare intreruperi         TRISA      = 0xFF;                       // designate PORTA as input         TRISB.F0=1;         TRISB.F1=1;         TRISC.F7=1;                      //intrari pentru push-butoane         TRISC.F6=1;         TRISC.F4=0;         TRISC.F5=0;         TRISC.F3=0;         PORTC.F5=0;         PORTC.F4=0;         PORTC.F3=0;                 Lcd_Init();                                                     // Initializare LCD         Lcd_Cmd(_LCD_CURSOR_OFF);                         // Dezactivare cursor         Lcd_Cmd(_LCD_CLEAR);                                   // Stergere Ecran         Delay_ms(1000);                                                 // Delay 1 secunda         Lcd_Out(1,2,"Afisaj Digital");           // Mesaj initial 1, prima linie         Lcd_Out(2,5,"Multiplu");                               // Mesaj initial 1 linia 2         Delay_ms(3000);         Lcd_Cmd(_LCD_CLEAR);                                   // Stergere ecran         Lcd_Out(1,1,"100V; 50A; 5000W");               // Mesaj initial 2, prima linie         Lcd_Out(2,5,"Matache");                          // Mesaj initial 2, linia 2         Delay_ms(3000);         Lcd_Cmd(_LCD_CLEAR);         PWM1_Init(15000);                                // f=15 KHz     !!!!!!!!!!!!!!         current_duty1 = 0;         PWM1_Start();                                    // start PWM1         PWM1_Set_Duty(current_duty1);          // setare factor de umplere         PWM1_Init(15000);                                // f=62500 KHz     !!!!!!!!!!!!!!         current_duty2 = 0;         PWM2_Start();                                    // start PWM1         PWM2_Set_Duty(current_duty2);    // setare factor de umplere          while (1) {                     //control pwm                       if (Button(&PORTB, 0, 1, 1)) {                       current_duty1 = current_duty1-2;        //scade pwm1                       delay_ms(100);                           }                       if (Button(&PORTB, 1, 1, 1)) {                       current_duty1 = current_duty1+2; //creste pwm1                       delay_ms(100);                          }                        PWM1_Set_Duty(current_duty1);                       if (Button(&PORTC, 7, 1, 1)) {                       current_duty2 = current_duty2-2;        //scade pwm2                       delay_ms(100);                           }                       if (Button(&PORTC, 6, 1, 1)) {                       current_duty2 = current_duty2+2; //creste pwm2                       delay_ms(100);                            }                       PWM2_Set_Duty(current_duty2);                        //Achizitie ADC                        Tensiune = 0;                        Curent = 0;                        Curent1 = 0;                        Curent2 = 0;                        Curent3 = 0;                        Curent4 = 0;                        Curent5 = 0;                        Curent6 = 0;                        Curent7 = 0;                        Curent8 = 0;                        Curent9 = 0;                        Curent10 = 0;                        for (ADCx=0; ADCx<15; ADCx++) {                        Tensiune += ADC_Read(0);                 // Achizitie ADC pentru tensiune                        Curent += ADC_Read(1);             // Achizitie ADC pentru curent                        Curent1 +=ADC_Read(1);                        Curent2 +=ADC_Read(1);                        Curent3 +=ADC_Read(1);                        Curent4 +=ADC_Read(1);                        Curent5 +=ADC_Read(1);                        Curent6 +=ADC_Read(1);                        Curent7 +=ADC_Read(1);                        Curent8 +=ADC_Read(1);                        Curent9 +=ADC_Read(1);                        Curent10 +=ADC_Read(1);                        Delay_ms(10);                        }                        //Tensiune                        Tensiune = Tensiune/ADCx;               // Alocare valoare tensiune                        V = (long)Tensiune*1000;                 // Converteste rezultat in milivolti                        V = V/1023;                                       // 0...1023 => 0...1000mV                        ch = V/1000;                          // Extrage sute 100.00                         if (ch==0) {                           LCD_Chr(1,1, 32);                                                  }                         else  {                                                     Lcd_Chr(1,1,48+ch);                       // Afisare rezultat in format ASCII linia 1, coloana 1                          }                        ch = (V/100) % 10;                         // Extrage zeci 010.00                         if (ch==0  && V<=99) {                              LCD_Chr(1,2, 32);                                }                         else  {                             Lcd_Chr_CP(48+ch);                               }                        ch = (V/10) % 10;                               // Extrage unitati 001.00                        Lcd_Chr_CP(48+ch);                         // Afiseaza rezultat in format ASCII                        Lcd_Chr_CP('.');                                 // Afiseaza caracter '.'                        ch = (V/1) % 10;                                 // Extrage sutimi  000.10                        Lcd_Chr_CP(48+ch);                        ch = V % 10;                                     // Extrage zecimi  000.01                        Lcd_Chr_CP(48+ch);                        LCD_Chr_CP('V');                                 // Afiseaza caracter 'V'                        Delay_ms(10);                        //Curent                        Curent = Curent/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent1 = Curent1/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent2 = Curent2/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent3 = Curent3/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent4 = Curent4/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent5 = Curent5/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent6 = Curent6/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent7 = Curent7/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent8 = Curent8/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent9 = Curent9/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent10 = Curent10/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        Curent_medie=(Curent+Curent1+Curent2+Curent3+Curent4+Curent5+Curent6+Curent7+Curent8+Curent9+Curent10)/10;                        A = (long)Curent_medie*5000;                  // Convertire rezultat in milivolti                        A = A/1023;                        ch = A/1000;                                     // Extragere zeci 10.00                          if (ch==0) {                           LCD_Chr(1,9, 32);                         }                         else  {                          Lcd_Chr(1,9,48+ch);                       // Scrie rezultatul in format ASCII linia 1, coloana 9                          }                        ch = (A/100) % 10;                         // Extragere unitati 01.00                        Lcd_Chr_CP(48+ch);                         // Scrie rezultatul in format ASCII                        Lcd_Chr_CP('.');                        ch = (A/10) %10;                                 // Extragere sutimi 00.10                        Lcd_Chr_CP(48+ch);                         // Scrie rezultatul in format ASCII                        ch = A % 10;                                     // Extragere zecimi 00.01                        Lcd_Chr_CP(48+ch);                        Lcd_Chr_CP('A');                                 // Afisare caracter 'A' la final                        Delay_ms(10);                        //Putere                        Pw = V*A/1000;                             // Seteaza valoare Putere                        ch = Pw/1000;                         if (ch==0) {                           LCD_Chr(2,1, 32);                         }                         else  {                            Lcd_Chr(2,1,48+ch);                       // Scrie rezultatul in format ASCII linia 1, coloana 9                             }                                                  ch = (Pw/100) % 10;                       // Extrage sute 0100                         if (ch==0  && Pw<=999) {                              LCD_Chr(2,2, 32);                                }                         else  {                               Lcd_Chr_CP(48+ch);                               }                        ch = (Pw/10) %10;                               // Extrage zeci 0010                        if (ch==0  && Pw<=99) {                              LCD_Chr(2,2, 32);                                }                         else  {                             Lcd_Chr_CP(48+ch);                               }                        ch = Pw % 10;                                   // Extrage unitati 0001                        Lcd_Chr_CP(48+ch);                        Lcd_Chr_CP('W');                                 // Afiseaza "W" la sfarsit                                                                        if (Curent10>Curent){                                                PORTC.F4=1;                                                }                                                else PORTC.F4=0;                                                if(Curent10<Curent){                                                PORTC.F5=1;                                                }                                                else PORTC.F5=0;                                                if(Curent10=Curent){                                                PORTC.F3=1;                                                }                                                else PORTC.F3=0;                                                Delay_ms(10);          }}
Link spre comentariu

Salut,

Cred ca nu merge pentru ca citirile sunt facute, practic, in acelasi timp.

In loc de

           if (Curent10>Curent){
as defini o variabila curentOld (initializata cu 0), pe care as compara-o la fiecare trecere prin bucla (deci dupa citiri si calcul) cu curent, sa zicem. Dupa comparare actualizezi curentOld cu curent. Nu cred ca ai nevoie de 10 variabile curentx

int curentOld = 0while(1){    //citeste adc   //calc valoarea medie   if(curent> curentOld).....   curentOld = curent;}
Link spre comentariu

Mihai, pai vad ca una vorbim si alta faci! Si Liviu iti recomanda exact ce ti-am zis si eu, dar vad ca nu vrei sa iei in seama. Pai ce rost mai are sa ne batem capul sa gasim solutii daca raman doar mesaje private... Serios acuma!

 

Apoi, ti-am vorbit si de histerezisul (valoare pe care o determini empiric) pentru ca referinta ta este sigur zgomotoasa, fiind Vdd-ul. Astfel ai evita aprindere-stingere Led-uri la variatii f mici.

 

Ca sa-ti aduci aminte despre ce iti vorbesc:

1. Masori valoarea curenta si o pui intr-o variabila temporara = valoarea veche;2. Dupa un timp (cat vrei tu) masori din nou si compari valoarea noua cu valoarea veche. Aprinzi LED in consecinta.3. Valoarea noua este suprascrisa peste valoarea veche daca este diferita.4. Repeti 2 si 3 la infinit. Acuma este ceva de discutat: ce inseamna schimbare? 10mA, 200mA, 1A?Un histerezis trebuie pus pentru ca:1. Nu ai o referinta foarte stabila (folosesti Vdd).2. Daca 1024=5V, atunci 5000/1024=4.88mV. Cu referinta care poate varia de 15-20mV si ai sa ai valoarea ADC "sarind" intre 2 valori. Atunci compari (valoarea veche - ceva) cu valoarea noua pentru crestere, si (valoarea veche + ceva) cu valoarea noua pentru descrestere. "Ceva" este o valoare pentru care variatia Vdd nu va avea o influenta importanta. O sa o gasesti prin incercari.Ar trebui sa fie in jur de 5-10-15-20 acel "ceva".
Link spre comentariu

Buna seara, thunderer iarta-ma dar nu am vrut sa te supar, am luat in calcul ceea ce mi-ai zis dar nu stiam cum sa implementez, mi-a aratat Liviu M mai sus cum se face si am facut, am rezolvat partial problema, folosesc referinta externa acum de 2.5V. exista o problema, daca curentul e in descrestere continua si crestere continua programul ruleaza perfect se aprind ledurile aferente, dar daca sa zicem creste 3 secunde si dupa nu mai creste curentul e constant se aprinde cel care indica ca e egal, e normal asa dupa cod ca tot actualizeaza valoarea temporala, ce as putea face este sa maresc timpul de la bucla. in rest pot doar sa va multumesc pentru idei. O seara placuta.

 

//Conexiuni LCDsbit LCD_RS at RB7_bit;sbit LCD_EN at RB6_bit;sbit LCD_D4 at RB5_bit;sbit LCD_D5 at RB4_bit;sbit LCD_D6 at RB3_bit;sbit LCD_D7 at RB2_bit;sbit LCD_RS_Direction at TRISB7_bit;sbit LCD_EN_Direction at TRISB6_bit;sbit LCD_D4_Direction at TRISB5_bit;sbit LCD_D5_Direction at TRISB4_bit;sbit LCD_D6_Direction at TRISB3_bit;sbit LCD_D7_Direction at TRISB2_bit;//Declarare variabileint Curent_old=0;unsigned char ch, ADCx;unsigned int Tensiune, Curent;unsigned long V, A, Pw;unsigned short current_duty1,current_duty2;//Functie principalavoid main() {                           INTCON = 0;                                                     // Dezactivare intreruperi         ADCON1=0x88;                   // referinta externa                  TRISA= 0xFF;                       // designate PORTA as input         TRISB.F0=1;         TRISB.F1=1;         TRISC.F7=1;                      //intrari pentru push-butoane         TRISC.F6=1;         TRISC.F4=0;         TRISC.F5=0;         TRISC.F3=0;         PORTC.F5=0;         PORTC.F4=0;         PORTC.F3=0;                 Lcd_Init();                                                     // Initializare LCD         Lcd_Cmd(_LCD_CURSOR_OFF);                         // Dezactivare cursor         Lcd_Cmd(_LCD_CLEAR);                                   // Stergere Ecran         Delay_ms(1000);                                                 // Delay 1 secunda         Lcd_Out(1,2,"Afisaj Digital");           // Mesaj initial 1, prima linie         Lcd_Out(2,5,"Multiplu");                               // Mesaj initial 1 linia 2         Delay_ms(3000);         Lcd_Cmd(_LCD_CLEAR);                                   // Stergere ecran         Lcd_Out(1,1,"100V; 50A; 5000W");               // Mesaj initial 2, prima linie         Lcd_Out(2,5,"Matache");                          // Mesaj initial 2, linia 2         Delay_ms(3000);         Lcd_Cmd(_LCD_CLEAR);         PWM1_Init(15000);                                // f=15 KHz     !!!!!!!!!!!!!!         current_duty1 = 0;         PWM1_Start();                                    // start PWM1         PWM1_Set_Duty(current_duty1);          // setare factor de umplere         PWM1_Init(15000);                                // f=62500 KHz     !!!!!!!!!!!!!!         current_duty2 = 0;         PWM2_Start();                                    // start PWM1         PWM2_Set_Duty(current_duty2);    // setare factor de umplere          while (1) {                     //control pwm                       if (Button(&PORTB, 0, 1, 1)) {                       current_duty1 = current_duty1-2;        //scade pwm1                       delay_ms(100);                           }                       if (Button(&PORTB, 1, 1, 1)) {                       current_duty1 = current_duty1+2; //creste pwm1                       delay_ms(100);                          }                        PWM1_Set_Duty(current_duty1);                       if (Button(&PORTC, 7, 1, 1)) {                       current_duty2 = current_duty2-2;        //scade pwm2                       delay_ms(100);                           }                       if (Button(&PORTC, 6, 1, 1)) {                       current_duty2 = current_duty2+2; //creste pwm2                       delay_ms(100);                            }                       PWM2_Set_Duty(current_duty2);                        //Achizitie ADC                        Tensiune = 0;                        Curent = 0;                        for (ADCx=0; ADCx<15; ADCx++) {                        Tensiune += ADC_Read(0);                 // Achizitie ADC pentru tensiune                        Curent += ADC_Read(1);             // Achizitie ADC pentru curent                        Delay_ms(10);                        }                        //Tensiune                        Tensiune = Tensiune/ADCx;               // Alocare valoare tensiune                        V = (long)Tensiune*2000;                 // Converteste rezultat in milivolti                        V = V/1023;                                       // 0...1023 => 0...1000mV                        ch = V/1000;                          // Extrage sute 100.00                         if (ch==0) {                           LCD_Chr(1,1, 32);                                                  }                         else  {                                                     Lcd_Chr(1,1,48+ch);                       // Afisare rezultat in format ASCII linia 1, coloana 1                          }                        ch = (V/100) % 10;                         // Extrage zeci 010.00                         if (ch==0  && V<=99) {                              LCD_Chr(1,2, 32);                                }                         else  {                             Lcd_Chr_CP(48+ch);                               }                        ch = (V/10) % 10;                               // Extrage unitati 001.00                        Lcd_Chr_CP(48+ch);                         // Afiseaza rezultat in format ASCII                        Lcd_Chr_CP('.');                                 // Afiseaza caracter '.'                        ch = (V/1) % 10;                                 // Extrage sutimi  000.10                        Lcd_Chr_CP(48+ch);                        ch = V % 10;                                     // Extrage zecimi  000.01                        Lcd_Chr_CP(48+ch);                        LCD_Chr_CP('V');                                 // Afiseaza caracter 'V'                        Delay_ms(10);                        //Curent                        Curent = Curent/ADCx;                   // Alocare valoare Curent                        Delay_ms(100);                        A = (long)Curent*5000;                  // Convertire rezultat in milivolti                        A = A/1023;                        ch = A/1000;                                     // Extragere zeci 10.00                          if (ch==0) {                           LCD_Chr(1,9, 32);                         }                         else  {                          Lcd_Chr(1,9,48+ch);                       // Scrie rezultatul in format ASCII linia 1, coloana 9                          }                        ch = (A/100) % 10;                         // Extragere unitati 01.00                        Lcd_Chr_CP(48+ch);                         // Scrie rezultatul in format ASCII                        Lcd_Chr_CP('.');                        ch = (A/10) %10;                                 // Extragere sutimi 00.10                        Lcd_Chr_CP(48+ch);                         // Scrie rezultatul in format ASCII                        ch = A % 10;                                     // Extragere zecimi 00.01                        Lcd_Chr_CP(48+ch);                        Lcd_Chr_CP('A');                                 // Afisare caracter 'A' la final                        Delay_ms(10);                        //Putere                        Pw = V*A/1000;                             // Seteaza valoare Putere                        ch = Pw/1000;                         if (ch==0) {                           LCD_Chr(2,1, 32);                         }                         else  {                            Lcd_Chr(2,1,48+ch);                       // Scrie rezultatul in format ASCII linia 1, coloana 9                             }                                                  ch = (Pw/100) % 10;                       // Extrage sute 0100                         if (ch==0  && Pw<=999) {                              LCD_Chr(2,2, 32);                                }                         else  {                               Lcd_Chr_CP(48+ch);                               }                        ch = (Pw/10) %10;                               // Extrage zeci 0010                        if (ch==0  && Pw<=99) {                              LCD_Chr(2,2, 32);                                }                         else  {                             Lcd_Chr_CP(48+ch);                               }                        ch = Pw % 10;                                   // Extrage unitati 0001                        Lcd_Chr_CP(48+ch);                        Lcd_Chr_CP('W');                                 // Afiseaza "W" la sfarsit                                                                        if (Curent>Curent_old){                                                PORTC.F4=1;                                                }                                                else PORTC.F4=0;                                                if(Curent<Curent_old){                                                PORTC.F5=1;                                                }                                                else PORTC.F5=0;                                                if(Curent==Curent_old){                                                PORTC.F3=1;                                                }                                                else PORTC.F3=0;                        Curent_old=Curent;                        Delay_ms(500);          }}
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