Mircea Postat Septembrie 28, 2013 Partajează Postat Septembrie 28, 2013 Cel mai bun simulator este... un breadboard! Este bine sa lucrezi pe parti, adaugand un alt pas odata cel precedent functional.Nu lucrez in MikroC (sunt obisnuit in Basic), dar inteleg ce scrii. Si programul de mai sus, pus de Marian, nu zice cum setezi intrarile analogice. Posibil ca ADCONx sa fie deja initializat cu 0x00. Programul tau (din PDF) nu foloseste decat AN0, 1 si 2. AN3 nu este prezent.Intrebare: daca nu calculai Puterea, iti citea AN3 corect? Lasa calculele de puteri pentru mai tarziu, intai fa-i sa mearga citirile de U si I. Fa acelasi tip de citire la curent ca la tensiune, uita de mediere pentru moment (tu masori 6 valori in approx. 10us, nu este prea util zic eu).Sugestie: Ia programul functional al lui Marian si dubleaza citirile de tensiune si curent. Asigneaza intrarile analogice si apoi faci calculele de puteri. Link spre comentariu
csongore Postat Octombrie 4, 2013 Partajează Postat Octombrie 4, 2013 Am incercat si varianta lui marian afiseaza tensiunule si curentile deci intrarile analogice merg dar cand completez cu calcul puterii se blocheaza, poate nu mai are memorie destula?Am atasat varianta completa program.pdf Link spre comentariu
Mircea Postat Octombrie 4, 2013 Partajează Postat Octombrie 4, 2013 Daca inteleg, cu 2 tensiuni si 2 curenti (adica 4 intrari ADC) merge bine. Asa este?Cand adaugi calculul puterii, se blocheaza. Asa este?Ce mesaj ai la compilare? Poti afisa? Daca nu mai ai memorie (m-as indoi insa!) sau depasesti cei 2kB de program compilabili in varianta free de la MikroC (asta mai probabil) sigur ai un mesaj de eroare de la compilator.Scuze, nu e ca sunt lenes ca sa compilez programul tau ca sa vad acest mesaj de eroare, dar nu am idee ce ai tu in configurarea PIC-ului (vezi Edit Program).Altfel, ar trebui sa mearga. Link spre comentariu
giongiu Postat Noiembrie 11, 2013 Partajează Postat Noiembrie 11, 2013 Salut toti pasionatii de microcontrolere!Marturisesc ca sunt paralel cu acest domeniu,asa ca va rog sa-mi clarificati urmatoarea dilema.Cu un PIC16F876 si LCD 2X16,ce tensiune/curent/putere maxime se pot afisa.As fi interesat de 0-100V,0-50A,0-5000W .Mi-ar fi suficienta o singura zecimala,pentru fiecare,maxim doua pentru tensiune,daca se poate.Multumesc anticipat pentru orice raspuns! Link spre comentariu
Mircea Postat Noiembrie 11, 2013 Partajează Postat Noiembrie 11, 2013 Poti afisa maximum 32 de caractere (2x16). Deci limitarea este numarul de caractere LCD si cum le aranjezi pe LCD. Atata vreme cat aia 100V si 50A sunt convertiti intr-un semnal 0-Vdd sau 0-Vref, poti afisa ce vrei tu.Sper ca este clar acuma ce poti face. Daca mai ai alte intrebari, stii ce ai de facut. Link spre comentariu
Marian Postat Noiembrie 12, 2013 Partajează Postat Noiembrie 12, 2013 Intr-adevar nu prea exista limita la ce poti afisa decat insasi numarul de caractere disponibil, orice parametru se doreste a se monitoriza, se poate face asta in cam orice gama dorita atata vreme cat monitorizarea in sine converteste variatiile acelui parametru, intr-o tensiune variabila intre 0 si 5V ( sau referinta, depinde cum se implementeaza ).O sa imi fac timp sa scriu eu azi o ciorna de cod pentru ceea ce s-a specificat si pe care o voi testa in proteus, mergand pe ideea de 0-5V pe ADC-uri, si daca veti fi de acord cu ea o vom optimiza pentru @giongiu, daca nu, atunci modific cum sugerati. Link spre comentariu
Marian Postat Noiembrie 12, 2013 Partajează Postat Noiembrie 12, 2013 Cam asta ar fi codul bazat pe PIC16F876A, cristal de 4Mhz si LCD 16x2: //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;unsigned long V, A, Pw;//Functie principalavoid main() { INTCON = 0; // Dezactivare intreruperi TRISA = 0x03; // RA0, RA1 setate ca intrari 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,"Giongiu"); // Mesaj initial 2, linia 2 Delay_ms(3000); Lcd_Cmd(_LCD_CLEAR); while (1) { //Achizitie ADC Tensiune = 0; Curent = 0; for (ADCx=0; ADCx<10; 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*1000; // Converteste rezultat in milivolti V = V/1023; // 0...1023 => 0...1000mV ch = V/1000; // Extrage sute 100.00 Lcd_Chr(1,1,48+ch); // Afisare rezultat in format ASCII linia 1, coloana 1 ch = (V/100) % 10; // Extrage zeci 010.00 Lcd_Chr_CP(48+ch); // Afiseaza rezultat in format ASCII 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 A = (long)Curent*5000; // Convertire rezultat in milivolti A = A/1023; // 0..1023 => 0-5000mV ch = A/1000; // Extragere zeci 10.00 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; // Extrage mii 1000 Lcd_Chr(2,1,48+ch); // Scrie rezultatul in format ASCII linia 2, coloana 1 ch = (Pw/100) % 10; // Extrage sute 0100 Lcd_Chr_CP(48+ch); ch = (Pw/10) %10; // Extrage zeci 0010 Lcd_Chr_CP(48+ch); ch = Pw % 10; // Extrage unitati 0001 Lcd_Chr_CP(48+ch); Lcd_Chr_CP('W'); // Afiseaza "W" la sfarsit Delay_ms(10); }}Si simularile in proteus:Mesaj initial 1 Mesaj initial 2 Afisare rezultat In cazul in care principiul te multumeste atunci se poate trece la eventuale personalizari si/sau optimizari. Link spre comentariu
Vlad Mihai Postat Noiembrie 12, 2013 Partajează Postat Noiembrie 12, 2013 Bravo Marian mi-ai luat-o inainte, am vrut sa ma apuc si eu de soft azi noapte sa il ajut, ar mai merge o valoare ca sa nu ramana spatiu ala gol, o tensiune sau un curent, si apoi poate il intereseaza si o protectie ceva cu un led sau releu. Link spre comentariu
Vizitator Vasile1968 Postat Noiembrie 12, 2013 Partajează Postat Noiembrie 12, 2013 D-le Iora, as dori sa -mi fac un astfel de volt-ampermetru, numai ca dispun de un pic16F883 .in speranta ca si alti utilizatori ai acestui forum ar fi interesati, credeti ca ati putea face portarea softului de la pic16F876 la pic16F883 ?Va multumesc!p/s. bineinteles, si alti colegi forumisti care se pricep sunt invitati ! Link spre comentariu
Vizitator Vasile1968 Postat Noiembrie 13, 2013 Partajează Postat Noiembrie 13, 2013 Am uitat sa pun attachementul cu info asupra proiectului....de acum astept poate cineva se baga sa porteze softul de la pic16F876 la pic16F883 Link spre comentariu
nel65 Postat Noiembrie 13, 2013 Partajează Postat Noiembrie 13, 2013 Cam asta ar fi codul bazat pe PIC16F876A, cristal de 4Mhz si LCD 16x2:.@marian,un hex la acest voltmetru dar fara mesajul initial,deci fara nicio introducere ,sa treaca direct la masuratoare, se poate?Eventual largita scala de amperi pana la 100A Link spre comentariu
giongiu Postat Noiembrie 13, 2013 Partajează Postat Noiembrie 13, 2013 Tin sa multumesc lui Marian si Mihai,pentru ajutorul acordat.Urmeaza sa comand componentele,dupa care o sa incerc si programarea PIC-ului.Marian,lasa-mi te rog un nr de telefon,pe privat. Link spre comentariu
Marian Postat Noiembrie 13, 2013 Partajează Postat Noiembrie 13, 2013 @nel65 imi cer scuze pentru intarziere, am fost plecat toata ziua, abea acuma am ajuns acasa. In cazul in care configuratia in sine va multumeste atunci gama de masurare se poate ajusta oricum doriti, o sa modific codul pentru 100A ceruti restul inteleg ca poate ramane la fel, si revin apoi cu o arhiva in care pun si codul sursa si hex-ul pentru Dvs. @giongiu ceea ce am atasat este doar codul sursa, este inutil pentru programare, daca ti se pare ok asa cum este atunci o sa atasez si hex-ul, daca mai doresti ceva ajustari spune-mi si modific dupa cum preferi. In alta ordine de idei, parca stiam ca ai nr meu de mobil... in fine iti las mesaj privat indata. @Vasile1968 arhiva respectiva contine din cate vad doar hex-ul si simularea in proteus, fara codul sursa totul trebuie refacut de la capat, da-mi ceva specificatii te rog, inteleg ca doresti doar un voltmetru 0-35V si ampermetru 0-10A? uC-ul PIC16F883, oscilatorul cum sa fie, intern sau cristal extern, si la ce frecventa? Da-mi datele astea si voi incerca eu sa-mi fac timp sa-l scriu si revin apoi. Link spre comentariu
nel65 Postat Noiembrie 13, 2013 Partajează Postat Noiembrie 13, 2013 n-are nimic ,fa-ti treburile care le ai,n-au intrat zilele in sacpssuntem colegi de "suferinta" (adica de pasiune),vorbim la persoana intai ,corect? Link spre comentariu
Vizitator Vasile1968 Postat Noiembrie 13, 2013 Partajează Postat Noiembrie 13, 2013 @Marian....mai intai tin sa-ti multumesc pentru bunavointa.Da., as vrea sa fie pina in 35 volti, pina in 5 amperi, cu cristal de 4 Mhz, pe acelasi cablaj din pdf-ul existent in arhiva de mai sus....practic sa ramana la fel, numai tipul procesorului sa fie schimbat, respectiv pic16F883 , ca din astea am....te rog si iti multumesc mult ! p/s ca o curiozitate > nu poti desface hexul (cu picdisasm) si sa-l salvezi ca asm ? oricum, eu nu am nici rabdare, nici nu ma pricep 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