Mircea Postat Decembrie 8, 2013 Partajează Postat Decembrie 8, 2013 ...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.Eu nu inteleg ce vrei sa faci? Poate ideea ta era sa compari cu o valoare programata dinainte, astfel vei stii ca creste/descreste in raport cu acea valoare.La sursa mea, am pus un potentiometru care programeaza curentul (intrare pe un ADC). Mereu ma raportez la acea valoare, si sursa deconecteaza sarcina daca ii care un curent superior. Asta cauti? Cu ledurile aprinse vreau sa zic, nu cu deconectarea. Link spre comentariu
Vlad Mihai Postat Decembrie 8, 2013 Partajează Postat Decembrie 8, 2013 ai dreptate, am interpretat eu gresit, am discutat cu giongiu si a zis ca asa vroia. eu ma refeream ca de exemplu sa indice ca in ultimele minute curentul a fost intr-o crestere, dar asta e alta mancare de peste, am testat si eu si merge bine, Multumesc! Link spre comentariu
giongiu Postat Decembrie 9, 2013 Partajează Postat Decembrie 9, 2013 Eu l-am rugat pe Mihai,caruia ii multumesc inca o data,sa implementeze aceste functii.Sa explic ce vreau sa fac...Monitorizez curentul de incarcare,printr-un acumulator,incarcat de un generator eolian,printr-o sursa buck.Vreau astfel sa obtin maxim de putere,indiferent de viteza vantului,modificand umplerea sursei.Plec de la umplere zero,crescand cu pasi de 1%,sa zicem.Simultan e monitorizat curentul prin acumulator.Crescand umplerea,creste curentul,pana intr-un punct,cand va incepe iar sa scada.Acesta e punctul de putere maxima.Aici opresc cresterea umplerii.Daca la urmatoarea masuratoare,curentul prin acumulator creste,va creste iarasi umplerea,daca insa curentul e mai mic,scad umplerea.Si tot asa....Sunt doi pini ce comanda cresterea/scaderea umplerii.Ledurile ce semnalizeaza cresterea/scaderea curentului,vor fi inlocuite cu tranzistori ce vor comanda pinii de crestere/scadere a umplerii.De aceea ma intereseaza ca la fiecare masuratoare,curentul masurat sa fie comparat cu valoarea anterioara,asta in tot intervalul de masurare.Parca problema mea,nu se incadreaza aici.Imi cer scuze de off topic,daca e nevoie,deschid unul nou. Link spre comentariu
puriu Postat Decembrie 9, 2013 Partajează Postat Decembrie 9, 2013 Se lucreaza cu doua variabile, una cu masuratoarea veche si una cu cea noua. Dupa comparare continutul celei noi se muta in cea veche, etc. La pornire variabila "veche" are valoarea zero. Succes! Link spre comentariu
Vlad Mihai Postat Decembrie 9, 2013 Partajează Postat Decembrie 9, 2013 Sunt doi pini ce comanda cresterea/scaderea umplerii.Ledurile ce semnalizeaza cresterea/scaderea curentului,vor fi inlocuite cu tranzistori ce vor comanda pinii de crestere/scadere a umplerii.se va pierde timp pe chestiunea asta cu tranzistorii, cred ca se poate direct din soft asta. si cred ca trebuie implementat un agoritm de autoreglare, un fel de reactie cum e sursa in comutatie. si pentru asta trebuie folosit PID. Link spre comentariu
Magnus Postat Februarie 2, 2014 Partajează Postat Februarie 2, 2014 salutam o intrebare trebuie modificat ceva la schema inprealabila de la prima cea publicata pe site-ul 320 volt,de la prima pagina asfel incat sa imi recunoasca mie un afisaj de 2x20 de caractere ,un afisaj winstar wh2002A-TMI-CT Link spre comentariu
Mircea Postat Februarie 2, 2014 Partajează Postat Februarie 2, 2014 Fara sa analizez tipurile de LCD de comparat: daca au controllere compatibile (asta este treaba ta sa verifici) merge fara nici o modificare. Ca pui 2x20 in loc de 2x16 iar nu necesita schimbari in soft. Ultimele 4 caractere de pe ambele linii vor fi nefolosite, deci nici o problema.Si ca sa o luam invers: la doua LCD-uri cu controllere compatibile, daca pui un 2x16 dar ai 4x20 in soft, ai sa afisezi numai ceea ce era pe primele 2 linii de la caracterul 1 la 16. Nici PIC si nici LCD nu se vor supara, doar tu o sa fii frustrat ca nu vezi tot ce trebuie . Link spre comentariu
spirake Postat Aprilie 14, 2014 Partajează Postat Aprilie 14, 2014 Fara sa analizez tipurile de LCD de comparat: daca au controllere compatibile (asta este treaba ta sa verifici) merge fara nici o modificare. Ca pui 2x20 in loc de 2x16 iar nu necesita schimbari in soft. Ultimele 4 caractere de pe ambele linii vor fi nefolosite, deci nici o problema.Si ca sa o luam invers: la doua LCD-uri cu controllere compatibile, daca pui un 2x16 dar ai 4x20 in soft, ai sa afisezi numai ceea ce era pe primele 2 linii de la caracterul 1 la 16. Nici PIC si nici LCD nu se vor supara, doar tu o sa fii frustrat ca nu vezi tot ce trebuie . Este vorba de acest watmetruhttp://homepages.paradise.net.nz/bhabbo ... meter.html Link spre comentariu
Mircea Postat Aprilie 14, 2014 Partajează Postat Aprilie 14, 2014 Ce vrei sa spui cu mesajul de mai sus? Link spre comentariu
aetius Postat Aprilie 21, 2014 Partajează Postat Aprilie 21, 2014 se poate un hex si codul pentru 50V si 20A???Multumesc si Hristos a Inviat! Link spre comentariu
aetius Postat Aprilie 26, 2014 Partajează Postat Aprilie 26, 2014 cod:/*Afisaj digital multiplu-Afisare Tensiune 0-0V, Curent 0-0A, si Putere 0-0W*Configuratie:-PIC16F876A-Cristal 4 Mhz-LCD alfanumeric 16X2*Autor Marian@Elforum*///Conexiuni LCDsbit LCD_RS at RB1_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 TRISB1_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;//Declarare variabileunsigned char ch, ADCx;unsigned int Tensiune, Curent;unsigned long V, A, Pw;//Functie principalavoid main() {INTCON = 0; // Dezactivare intreruperiTRISA = 0x03; // RA0, RA1 setate ca intrariLcd_Init(); // Initializare LCDLcd_Cmd(_LCD_CURSOR_OFF); // Dezactivare cursorLcd_Cmd(_LCD_CLEAR); // Stergere EcranDelay_ms(1000); // Delay 1 secundaLcd_Out(1,2,"Afisaj Digital"); // Mesaj initial 1, prima linieLcd_Out(2,5,"Multiplu"); // Mesaj initial 1 linia 2Delay_ms(500);Lcd_Cmd(_LCD_CLEAR); // Stergere ecranLcd_Out(1,1,"V; A; W"); // Mesaj initial 2, prima linieLcd_Out(2,5," "); // Mesaj initial 2, linia 2Delay_ms(500);Lcd_Cmd(_LCD_CLEAR);while (1) {//Achizitie ADCTensiune = 0;Curent = 0;for (ADCx=0; ADCx<10; ADCx++) {Tensiune += ADC_Read(0); // Achizitie ADC pentru tensiuneCurent += ADC_Read(1); // Achizitie ADC pentru curentDelay_ms(10);}//TensiuneTensiune = Tensiune/ADCx; // Alocare valoare tensiuneV = (long)Tensiune*1000; // Converteste rezultat in milivoltiV = V/1023; // 0...1023 => 0...1000mVch = V/1000; // Extrage zeci 10.00Lcd_Chr(1,1,48+ch); // Afisare rezultat in format ASCII linia 1, coloana 1ch = (V/100) % 10; // Extrage unitati 01.00Lcd_Chr_CP(48+ch); // Afiseaza rezultat in format ASCIILcd_Chr_CP('.'); // Afiseaza caracter '.'ch = (V/10) % 10; // Extrage sutimi 00.10Lcd_Chr_CP(48+ch);ch = V % 10; // Extrage zecimi 00.01Lcd_Chr_CP(48+ch);LCD_Chr_CP('V'); // Afiseaza caracter 'V'Delay_ms(10);//CurentCurent = Curent/ADCx; // Alocare valoare curentA = (long)Curent*1000; // Convertire rezultat in milivoltiA = A/1023; // 0..1023 => 0-1000mVch = A/1000; // Extragere zeci 10.00Lcd_Chr(1,9,48+ch); // Scrie rezultatul in format ASCII linia 1, coloana 9ch = (A/100) % 10; // Extragere unitati 01.00Lcd_Chr_CP(48+ch); // Scrie rezultatul in format ASCIILcd_Chr_CP('.');ch = (A/10) %10; // Extragere sutimi 00.10Lcd_Chr_CP(48+ch); // Scrie rezultatul in format ASCIIch = A % 10; // Extragere zecimi 00.01Lcd_Chr_CP(48+ch);Lcd_Chr_CP('A'); // Afisare caracter 'A' la finalDelay_ms(10);//PuterePw = V*A/1000; // Seteaza valoare Puterech = Pw/1000; // Extrage sute 100.0Lcd_Chr(2,1,48+ch); // Scrie rezultatul in format ASCII linia 2, coloana 1ch = (Pw/100) % 10; // Extrage zeci 010.0Lcd_Chr_CP(48+ch);ch = (Pw/10) %10; // Extrage unitati 001.0Lcd_Chr_CP(48+ch);Lcd_Chr_CP('.');ch = Pw % 10; // Extrage sutimi 000.1Lcd_Chr_CP(48+ch);Lcd_Chr_CP('W'); // Afiseaza "W" la sfarsitDelay_ms(10);}} Am modificat un cod(luat din topic) ,ce ar mai trebui modificat ca sa masoare 50.00V si 20.00A iar la putere 1000W( de fapt 999.9W). Nu ma pricep sa-l simulez in proteus. Multumesc anticipat. Link spre comentariu
Liviu M Postat Aprilie 28, 2014 Partajează Postat Aprilie 28, 2014 Marian a postat pentru bobinatorul un cod care e bine comentat si pe care-l poti modifica/adapta usor la ce-ti trebuie. Mai trebuie modificat si hardul extern, desigur, sa nu depasesti tensiunile (5 V) pe intrarile ADC. Link spre comentariu
aetius Postat Aprilie 28, 2014 Partajează Postat Aprilie 28, 2014 (editat) am modificat codul si am reusit ce vroiam si chiar sa "invat " cum e treaba cu proteus... acum as vrea sa mai activez un port intrare ,dar inca nu am reusit sa ma prind cum se face, multumesc pentru sfaturi Editat Aprilie 28, 2014 de aetius Link spre comentariu
Vizitator nmihaic Postat Aprilie 28, 2014 Partajează Postat Aprilie 28, 2014 Unde pot găsi și eu codul sursa schema electrica și dacă se poate codul sursa sa fie și comentat bine sa invat și eu un pic, va mulțumesc și va rog sa ma scuzați de posibilul post inutil, o zi bună. Link spre comentariu
Liviu M Postat Aprilie 28, 2014 Partajează Postat Aprilie 28, 2014 acum as vrea sa mai activez un port intrare Intai definesti inca o variabila (poti refolosi si una deja definita, da' la tine nu-s probleme cu spatiul) unsigned int Tensiune, Curent, uiATreiaMarime; Dupa aceea trebuie sa te asiguri ca al treilea port dorit (sa zicem RA2) e intrare: TRISA = 0x07; // RA0, RA1, RA2 setate ca intrari Achizitionezi si a treia intrare: //Achizitie ADCTensiune = 0;Curent = 0;uiATreiaMarime = 0;for (ADCx=0; ADCx<10; ADCx++) { Tensiune += ADC_Read(0); // Achizitie ADC pentru tensiune Curent += ADC_Read(1); // Achizitie ADC pentru curent uiATreiaMarime += ADC_Read(2); // Achizitie ADC pentru a treia marime Delay_ms(10);} Prelucrezi datele astfel obtinute. Spor! 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