Sari la conținut
ELFORUM - Forumul electronistilor

voltampermetru cu pic 16f876


Postări Recomandate

Cam asta ar fi schema, uC-ul este PIC16F876A:

http://img577.imageshack.us/img577/8821/schema3.png

 

Conexiunile de la uC si display sunt inspirate din schema de aici http://www.elforum.info/viewtopic.php?p=1046768#p1046768, eu doar am modificat simbolul display-ului din libraria eagle pentru ca nu aveam la 2x24. Am ales alimentari separate cu LM317 atat pentru AO cat si pentru PIC si display, pentru ca regulatorul asta este mai flexibil si mai performant decat cele fixe, si in final am pus shuntul asa cum il configurasem in schema de pe pagina anterioara.

 

Voi avea 2 iesiri simetrice de la regulatoare, ajustabile intre 1,25-30Vcc ( deci maxim 30V tensiune de iesire ), si un curent de sarcina limitat la ~5A, limitarea nu este una foarte precisa ( nu aveam nevoie de un prag fix ) asa ca este posibil sa se depaseasca cei 5A, de aceea as dori ca softul sa fie configurat pentru un maxim de 6 sau 7A, deasemenea as dori ca tensiunea maxima indicata de soft sa fie configurata pentru 35V.

 

Cam asta cred ca acopera totul nu?

Link spre comentariu

Aranjeaza un pic conexiunile la pic cu LCD sa iasa simplu la cablaj. ma refer la RS,E,D3,D4,D5,D6,D7. Deci la RA1 vei avea tensiunea de citit nu? nu pricep ce e acolo dar ar merge simplu cu un divizor de tensiune de 10x sau undeva pe acolo(10k+1k) si zener 5v1 dupa si astfel la 5v pe port sa ai 50v maxim afisat. iti pun o schema sa vezi cum am aranjez eu conexiunile. eu le pot declara oricum in soft.

REcomand si pini de programare pe cablaj ca sa nu scoti picul tot timpul din soclu.\

Ar merge si 100nF pe alimentare.

Posted Image

Link spre comentariu

Ce treaba are aranjarea legaturilor in schema cu cablajul? important este sa se stie fiecare conexiune, cablajul il rutez cu cred eu de cuviinta si nu cum imi dicteaza un soft. Apoi repet, schema nu e conceputa de mine, e prima data cand am tupeul sa incerc ceva cu PIC, eu doar m-am inspirat din schema de la pagina 3 si am adaugat cele ce aveam eu nevoie, partea de tensiune este exact cu originalul si cred ca este ok asa, e posibil sa adaug si un zenner inaintea intrarii PIC dar divizorul ramane asa cum este, imi place configuratia. Nu imi este greu sa scot PIC din soclu atunci cand este nevoie, e mai bine asa, de fapt imi este mai comod si mai sigur asa, si nu in ultimul rand, alimentarea... uita-te atent pe alimentarea mea, vei vedea ca are tot ce-i trebuie, si in plus chiar :da

Link spre comentariu

am observat e ok. referitor la tensiunea ziceai ca vrei sa afisezi maxim 35 de volti pe iesire. Asta inseamna un divizor de 7x, adica la 5v pe port ai 35v afisati, e ok? referitor la curent.. primul AO face diferenta, al 2 lea amplica....daca am la un 1A 50mV cititi pe sunt, cam cat am dupa al 2 lea AO? nu stau sa calculez AO. nu sunt acasa. Se poate implementa si o chestie cu un buzzer cand se depaseste un prag de curent. buzzere se gasesc pe placi de baza pc.. daca mai gasesti un termistor ntc putem implementa si un senzor de temperatura...dupa care ar merge si un ventilator....se pot face multe :rade: oke, deci un curent , o tensiune incap bine pe o linie, pe cea lalta linie ce punem? numele tau? sau facem sa calculeze puterea si rezistenta de sarcina?Refitor la afisarea tensiunii si curentul cu cate zecimale vrei sa fie afisarea?

Link spre comentariu

O sa ma folosesc de citate multiple pentru a nu lasa loc nici unei confuzii, cer zcuze daca asta va deranja pe cineva.

 

...referitor la tensiunea ziceai ca vrei sa afisezi maxim 35 de volti pe iesire. Asta inseamna un divizor de 7x, adica la 5v pe port ai 35v afisati, e ok?...

Da, asa este, voi pune un 5v1 dupa divizor chiar inaintea portului pentru a fi sigur ca nu suprasolicit intrarea, dar este ok exact cum ai zis.

 

...referitor la curent.. primul AO face diferenta, al 2 lea amplica....daca am la un 1A 50mV cititi pe sunt, cam cat am dupa al 2 lea AO?...

Primul AO este in sine un repetor, adica pe shunt de 50m Ohm la 1A sunt 50mV, asta se va regasi si la iesirea primului AO, al 2-lea amplifica tensiunea asta cu un factor ales de mine prin ajustarea acelui semireglabil multitura de 20k pe care l-am pus pentru a putea face mici ajustari de calibrare. Setezi softul pentru maxim 6A pe iesire ( imi sunt arhisuficienti ), la intrarea PIC de la curent inlocuiesc acel 4v7 cu 5v1, deci pentru 5v pe intrarea AO corespunde 6A pe shunt, de aici e simplu de determinat amplificarea, 6*0,05=0,3V, care se vor regasi la intrarea celui de-al 2-lea AO, deci amplificarea sa va trebui sa fie 5V/0,3V=16,66x. Pentru 5A pe shunt vor fi 250mV ( la fel si pe intrarea AO2 ) deci la intrarea PIC vor fi 0,25*16,6=4,16V; la 4A vor fi la intrarea PIC 3,33V; la 3A 2,5V... etc

 

...Se poate implementa si o chestie cu un buzzer cand se depaseste un prag de curent. buzzere se gasesc pe placi de baza pc...

Te referi la eventualitatea setarii softului ca atunci cand pe una din intrari se ajunge la acei 5v1 limitati de zenner, o iesire sa devina high logic nu? sau ma insel eu... oricum nu stiu cum sa comand un buzzer ca nici nu mi-am batut capul cu ele pana acum...zennerele vor fi suficiente sa protejez intrarile PIC.

 

...oke, deci un curent , o tensiune incap bine pe o linie, pe cea lalta linie ce punem? numele tau? sau facem sa calculeze puterea si rezistenta de sarcina?

 

Refitor la afisarea tensiunii si curentul cu cate zecimale vrei sa fie afisarea?

La asta marturisesc ca nu m-am gandit... LCD-ul nu are pe placa montat led pentru iluminare dar are traseele si spatiul necesar montarii in partea stanga a ecranului, si am ceva leduri smd care cred ca s-ar potrivi acolo, de aceea cred ca ar fi cel mai indicat ca tensiunea sa fie pe randul de sus la capatul din stanga unde va fi ledul si curentul pe linia a 2-a chiar sub tensiune, eventual tot pe linia a 2-a dupa curent ar putea sa se afiseze puterea pe sarcina Pout, ca se cunoaste curentul de sarcina si se cunoaste si tensiunea pe sarcina deci se poate calcula si ar fi interesant sa se afiseze si un Pout care sa corespunda indicatiilor tensiune-curent :da

 

SI cam atat cred.

Link spre comentariu

vei vedea ca are tot ce-i trebuie, si in plus chiar :da

In cazul circuitelor digitale care comuta cu fronturi rapide si la frecvente mari, e recomandata folosirea de condensatoare de ~100 nF montati intre alimentare si masa cat mai aproape de pinii integratelor digitale.

Asa ca indiferent de cat de bine filtrata e sursa, nu ignora sfatul lui Vlad.

Link spre comentariu

Azi dimineata am incercat o varianta de cod. am refacut legaturile la LCD ca nu aratau ok pentru mine. am configurat softul dupa cerinte, la curent fac media cu 6 valori citite la anumite intervale si afisez ca sa nu oscileze valorile pe LCD.

// LCD module connectionssbit LCD_RS at RB2_bit;sbit LCD_EN at RB3_bit;sbit LCD_D4 at RB4_bit;sbit LCD_D5 at RB5_bit;sbit LCD_D6 at RB6_bit;sbit LCD_D7 at RB7_bit;sbit LCD_RS_Direction at TRISB2_bit;sbit LCD_EN_Direction at TRISB3_bit;sbit LCD_D4_Direction at TRISB4_bit;sbit LCD_D5_Direction at TRISB5_bit;sbit LCD_D6_Direction at TRISB6_bit;sbit LCD_D7_Direction at TRISB7_bit;// End LCD module connections  unsigned int Tensiune,curent1,curent2,curent3,curent4,curent5,curent6,curent_medie,power;  unsigned long u,i;unsigned char ch;void main(){  TRISA      = 0xFF;                       // designate PORTA as input  //INTCON = 0;                              // Disable all interrupts  //IRP_bit = 1 ;  Lcd_Init();                        // Initialize LCD  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off  Lcd_Cmd(_LCD_CLEAR);               // Clear display  Delay_ms(100);  LCD_Out(1,2,"VoltAmpermeter");  LCD_Out(2,2,"By Marian");  Delay_ms(1500);  Lcd_Cmd(_LCD_CLEAR);  LCD_Out(1, 1,"V:");  LCD_Out(2, 1,"I:");  LCD_Out(1, 12,"R:");  LCD_Out(2, 12,"P:");  while (1)  {      // Citire Tensiune      Tensiune=ADC_read(0);                // get ADC value for U from channel 1      u=(long)Tensiune*3500;               // covert adc reading to milivolts      u=u/1023;                            // 0..1023 -> 0-3500mV      ch=u/1000;                           // extract 10.00 U digit      if (ch==0)        {          LCD_Chr(1,3, 32);                // write empty space if digit is 0        }      else        {          LCD_Chr(1,3,48+ch);              // write ASCII digit at 1st row, 2nd column        }      ch=(u/100) %10;                      // extract 01.00 U digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point  LCD_Chr_CP('.');                     // write '.' at cursor point    ch=(u/10) %10;                       // extract 00.10 U digit     LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      ch=u %10;                            // extract 00.01 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      ch=10u %10;                            // extract 00.001 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      LCD_Chr_CP('V');                     // write 'V' at cursor point   //Curent          curent1=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent2=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent3=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent4=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent5=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent6=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent_medie=(curent1+curent2+curent3+curent4+curent5+curent6)/6;                i=(long)curent_medie*602;               // covert adc reading to milivolts      i=i/1023;                            // 0..1023 -> 0-3500mV      ch=i/1000;                           // extract 10.00 U digit      if (ch==0)        {          LCD_Chr(2,3, 32);                // write empty space if digit is 0        }      else        {          LCD_Chr(2,3,48+ch);              // write ASCII digit at 1st row, 2nd column        }      ch=(i/100) %10;                      // extract 01.00 U digit      LCD_Chr_CP(48+ch);    LCD_Chr_CP('.');                     // write '.' at cursor point    ch=(i/10) %10;                       // extract 00.10 U digit    LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point     ch=i %10;                            // extract 00.01 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      ch=10*i %10;                            // extract 00.001 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      LCD_Chr_CP('A');      //putere      power=u*i/1000;      ch=power/1000;      if (ch==0)        {          LCD_Chr(2,14, 32);                // write empty space if digit is 0        }      else        {          LCD_Chr(2,14,48+ch);              // write ASCII digit at 2nd row, 2nd column        }      ch=(power/100) %10;                  // extract 01.00 P digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      ch=(power/10) %10;                   // extract 0.10 P digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      LCD_Chr_CP('.');                     // write '.' at cursor point       ch=(power/1) %10;                   // extract 0.10 P digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      LCD_Chr_CP('W');                     // write 'W' at cursor point}}
As ruga cei mai avansati sa se uite si sa ma corecteze, daca sunt greseli sau orice altceva.

Referitor la buzzer ma gandeam sa te avertizeze acustic cand valoarea curentul depaseste o anumita limita, de exemplu cand ajungi pe la 6 sa te avertizeze, deci e nasol ca la 6A ai 5v pe port si zener face scurt si nu stiu daca apuca sau macar pe la 5.8A sa te avertizeze ca te aproprii de curentul maxim. nu stiu ceva de genul, poate si un led indicator. sau un ventilator in caz ca vrei sa faci si un minisenzor cu un NTC. nu e greu sa implementez astea is chestii de baza.

atasez o fotografie cu simularea.

post-65525-139829632038_thumb.jpg

Link spre comentariu

..Asa ca indiferent de cat de bine filtrata e sursa, nu ignora sfatul lui Vlad.

Ai dreptate, si asa voi face, scz daca ceva ce am zis a suparat pe cineva.@Vlad Mihai marturisesc ca ma uit la codul ala precum o mata in calendar... :rade: SImularea aia arata perfect, o sa revizuiesc schema ca sa fiu sigur ca este conforma cu ce ai facut tu. Acum nu sunt sigur ca am inteles o chestie, legat de afisarea curentului, deci indicatia de pe ecran variaza in functie de variatia curentului de sarcina sau se indica anumite praguri fixe? ( scuze daca pare o intrebare de nub dar nu stiu...), pana la urma oricum ar fi tot sunt multumit. Referitor la acel buzzer si protectia intrarilor, teoretic 5v1 taie tensiunea fix la aceasta valoare, pe intrarea PIC deci vor putea fi prezenti cei 5V care ar corespunde 6A, si ma gandesc ca 5,1V maxim posibili pe intrare nu ar afecta PIC dar nu am gasit info care sa ma lamureasca in acest aspect deci rog sa fiu corectat daca ma insel. Buzzer-ul gandesc ca ar necesita un soi de driver sau cam asa ceva, din cate stiu sunt comandate de timere nu? sau ma insel eu...
Link spre comentariu

deci la buzzer pur si simplu direct pe un pin la pic, sau un driver cu un tranzistor in conexiune emitor comun, dar la mine a mers prima varianta... in cod e doar un rand ceva de genul sound init(...)ceea ce vezi pe simulare e 5v pe portul RA0 adica tensiune si 4.16v pe RA1. am tatonat valorile(e posibil sa mai existe o eroare de masurare foarte mica care se poate regla), bineinteles daca variaza tensiunile pe porturi variaza si afisarea.Ziceam ca daca cumva faci scurt pe iesire si sursa de alimentare debiteaza mai mult de 6A pe sunt pica mai mult si cu tot cu amplificare depaseste cei 5v1 la zener, atunci zener intra in scurt si taie alimentare uC ar merge implentata si o chestiune cu releu, ca sunt pini cati vrei :rade: Acum referitor la buzzer sa imi comunici pragul.. la cati amperi sa iti cante buzzerul, aprindem si un led acolo. Ma ramane spatiu de afisat o valoare pe LCD, poti face rost de un LM35Z? e un senzor ieftin si precis de temperatura e circa 4 lei. Sau afisam rezistenta sarcinii? cu NTC e greu de facut un senzor care sa afiseze exact gradele dar pot afisare praguri gen Temperatura normala, ridicata, foarte ridicata, critica..... :rade:LE> am vazut ca sursa limiteaza la 5A deci nu e problema cu strapungerea zener. propun sa pui protectia la buzzer la circa 5.8A cand depaseste sa cante si sa aprinda un led rosu.

Link spre comentariu

Ce tare... practic faci cam orice vrei cu uC si LCD... :da Referitor la sursa/regulatoare, limitarea nu este una fixa, ci poate varia usor in functie de caderea de tensiune de pe regulator si asta datorita comportamentului din acest punct de vedere al LM317, nu am testat detaliul asta foarte exact dar probabil ar fi variatii de cateva sute de mA, poate maxim 1A la pragul maxim de curent admis de limitare, o sa incerc sa testez azi ideea asta daca am timp ca sa fiu sigur ce si cum, oricum se invarte in jurul a 5A, si de asta am zis sa faci limita maxima la 6A pentru indicare. Apoi indiferent de curentul de sarcina sau ce tensiune ar da AO la iesire, zenner-ul nu se poate strapunge/pune in scurt, curentul prin el nu este suficient cat sa provoace asta, pur si simplu actioneaza precum un stabilizator de tensiune cu zenner, fixand tensiunea la 5,1V dupa el indiferent cat de mult urca inaintea lui. Referitor la buzzer, daca spui ca poate fi comandat asa de usor atunci ar fi o ideie daca se poate sa tipe atunci cand pe oricare din intrari sunt detectati fix 5V, zennerele de 5v1 permit aparitia acestei tensiuni si deci stiu cand am atins limita fara sa periclitez integritatea PIC. Cat despre acel senzor ar fi fost interesant dar nu il am si nici nu-l pot lua, era interesant sa monitorizez temperatura radiatorului de la regulatoarele de putere si eventual sa se comande si pornirea unui ventilator la detectarea unui anumit prag dar lasa... prea multe complicatii, ramanem la ce ai facut pana acum, respectiv curent, tensiune si putere, imi este suficient.

Link spre comentariu

am rezolvat chestiunea cu buzzerul.. practic la 5v pe port canta si se aprinde un led. ....

Hai sa rezolvam si cu senzorul de temperatura. sigura gasesti tu pe acasa un NTC de prin surse atx..... NTC il bagi intr-un divizor de tensiune si il alimentezi la 5v de la pic. la iesire masori ce tensiuni ai la anumite praguri de tensiunea..

De exemplu la temperatura camerei 24 grade ai o anumita tensiunea--introduce in cod ca atunci cand citeste tensiunea aia sa afiseze temperatura normala. la 40 de grade ai alta tensiune si tot asa.

sa bagam 5 praguri>normala-24 grade, ridicata la 50 de grade-70 foarte ridicata si 100 critica sau ceva de genul, imi trebuie doar tensiunile alea de iesire. chestia cu ventilatorul e simpla.

luam iesire de la pic printr-o rez in baza la un bd139, emitor la masa si in colector va fi ventilatorul care va avea firul rosu la +12v. si comanda din baza o dam in functie de pragul de temeperatura. eu am dintr-un pic de ala la un proiect de sursa comutatie am folosit toti pinii(monitorizare sursa comutatie). deci merge. atasez varianta de cod si simulare. daca ai cum testa practic iti dau si hexul.

// LCD module connectionssbit LCD_RS at RB2_bit;sbit LCD_EN at RB3_bit;sbit LCD_D4 at RB4_bit;sbit LCD_D5 at RB5_bit;sbit LCD_D6 at RB6_bit;sbit LCD_D7 at RB7_bit;sbit LCD_RS_Direction at TRISB2_bit;sbit LCD_EN_Direction at TRISB3_bit;sbit LCD_D4_Direction at TRISB4_bit;sbit LCD_D5_Direction at TRISB5_bit;sbit LCD_D6_Direction at TRISB6_bit;sbit LCD_D7_Direction at TRISB7_bit;// End LCD module connections  unsigned int Tensiune,curent1,curent2,curent3,curent4,curent5,curent6,curent_medie,power,val1;  unsigned long u,i;unsigned char ch;void main(){  TRISA      = 0xFF;                       // designate PORTA as input  //INTCON = 0;                              // Disable all interrupts  //IRP_bit = 1 ;   TRISC.F3 = 0;      //declaram un port la iesire  pentru buzzer   TRISC.F4 = 0;   //declaram un port la iesire  pentru led   PORTC.F4=0; //starea initiala a portului setata in 0 logic, ledul e stins  Lcd_Init();                        // Initialize LCD  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off  Lcd_Cmd(_LCD_CLEAR);               // Clear display  Delay_ms(100);  LCD_Out(1,2,"*****VoltAmpermeter*****");  LCD_Out(2,2,"*******By Marian********");  Delay_ms(1500);  Lcd_Cmd(_LCD_CLEAR);  LCD_Out(1, 1,"V:");  LCD_Out(2, 1,"I:");  LCD_Out(1, 12,"R:");  LCD_Out(2, 12,"P:");  while (1)  {      // Citire Tensiune      Tensiune=ADC_read(0);                // get ADC value for U from channel 1      u=(long)Tensiune*3500;               // covert adc reading to milivolts      u=u/1023;                            // 0..1023 -> 0-3500mV      ch=u/1000;                           // extract 10.00 U digit      if (ch==0)        {          LCD_Chr(1,3, 32);                // write empty space if digit is 0        }      else        {          LCD_Chr(1,3,48+ch);              // write ASCII digit at 1st row, 2nd column        }      ch=(u/100) %10;                      // extract 01.00 U digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point  LCD_Chr_CP('.');                     // write '.' at cursor point    ch=(u/10) %10;                       // extract 00.10 U digit     LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      ch=u %10;                            // extract 00.01 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      ch=10u %10;                            // extract 00.001 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      LCD_Chr_CP('V');                     // write 'V' at cursor point   //Curent          curent1=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent2=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent3=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent4=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent5=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent6=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent_medie=(curent1+curent2+curent3+curent4+curent5+curent6)/6;                i=(long)curent_medie*602;               // covert adc reading to milivolts      i=i/1023;                            // 0..1023 -> 0-3500mV      ch=i/1000;                           // extract 10.00 U digit      if (ch==0)        {          LCD_Chr(2,3, 32);                // write empty space if digit is 0        }      else        {          LCD_Chr(2,3,48+ch);              // write ASCII digit at 1st row, 2nd column        }      ch=(i/100) %10;                      // extract 01.00 U digit      LCD_Chr_CP(48+ch);    LCD_Chr_CP('.');                     // write '.' at cursor point    ch=(i/10) %10;                       // extract 00.10 U digit    LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point     ch=i %10;                            // extract 00.01 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      ch=10*i %10;                            // extract 00.001 U digit      LCD_Chr_CP(48+ch);                  // write ASCII digit at cursor point      LCD_Chr_CP('A');      //putere      power=u*i/1000;      ch=power/1000;      if (ch==0)        {          LCD_Chr(2,14, 32);                // write empty space if digit is 0        }      else        {          LCD_Chr(2,14,48+ch);              // write ASCII digit at 2nd row, 2nd column        }      ch=(power/100) %10;                  // extract 01.00 P digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      ch=(power/10) %10;                   // extract 0.10 P digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      LCD_Chr_CP('.');                     // write '.' at cursor point       ch=(power/1) %10;                   // extract 0.10 P digit      LCD_Chr_CP(48+ch);                   // write ASCII digit at cursor point      LCD_Chr_CP('W');                     // write 'W' at cursor point     //Buzzer          val1=ADC_read(1);      if (val1 > 1022) {          Sound_Init(&PORTC, 3);          Sound_Play(500, 1000);             // Play sound at 500Hz for 1 second       PORTC.F4=1; //led on       Delay_ms(100);       }       else   PORTC.F4= 0;}}
LE: ce-am faultat limba romana, nu mai stau sa corectez :nebun:

post-65525-139829632474_thumb.jpg

Link spre comentariu

Mihai, in loc de codul tau de mai jos, de ce nu pui o bucla FOR (aici in basic):

 

curent = 0 for i = 1 to 200 (de exemplu citesti 200 valori, nu te limitezi doar la 6)     curent = curent + adc_read(1)next icurent = curent / 200

Ocupa mai putin "spatiu". Apoi verifici daca valoarea obtinuta este diferita de anterioara, si rescrii pe LCD doar daca este diferita.

 

Cod Mihai achizitie ADC:

//Curent          curent1=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent2=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent3=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent4=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent5=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent6=ADC_read(1);                // get ADC value for U from channel 1          Delay_ms(50);          curent_medie=(curent1+curent2+curent3+curent4+curent5+curent6)/6;
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