Marian Postat Aprilie 28, 2014 Partajează Postat Aprilie 28, 2014 @Aetius, ti-am promis pe privat ca iti fac eu codul si-ti dau si hex-ul si codukl sursa, trebuia doar sa ai putina rabdare, iata asadar exact cum ai cerut: //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 Tensiune1, Tensiune2, Curent;unsigned long U1, U2, A, Pw;//Functie principalavoid main() { INTCON = 0; // Dezactivare intreruperi TRISA = 0x07; // RA0, RA1, RA2 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,7,"1"); Lcd_Out(2,7,"2"); while (1) { //Achizitie ADC Tensiune1 = 0; Tensiune2 = 0; Curent = 0; for (ADCx=0; ADCx<10; ADCx++) { Tensiune1 += ADC_Read(0); // Achizitie ADC pentru Tensiune V1 Curent += ADC_Read(1); // Achizitie ADC pentru curent Tensiune2 += ADC_Read(2); // Achizitie ADC pentru tensiune V2 Delay_ms(10); } //Tensiune1 Tensiune1 = Tensiune1/ADCx; // Alocare valoare tensiune U1 = (long)Tensiune1*1000; // Converteste rezultat in milivolti U1 = U1/1023; // 0...1023 => 0...1000mV ch = U1/1000; // Extrage sute 100.00 Lcd_Chr(1,1,48+ch); // Afisare rezultat in format ASCII linia 1, coloana 1 ch = (U1/100) % 10; // Extrage zeci 010.00 Lcd_Chr_CP(48+ch); // Afiseaza rezultat in format ASCII ch = (U1/10) % 10; // Extrage unitati 001.00 Lcd_Chr_CP(48+ch); // Afiseaza rezultat in format ASCII Lcd_Chr_CP('.'); // Afiseaza caracter '.' ch = (U1/1) % 10; // Extrage sutimi 000.10 Lcd_Chr_CP(48+ch); LCD_Chr_CP('V'); // Afiseaza caracter 'V' Delay_ms(10); //Tensiune2 Tensiune2 = Tensiune2/ADCx; // Alocare valoare tensiune U2 = (long)Tensiune2*1000; // Converteste rezultat in milivolti U2 = U2/1023; // 0...1023 => 0...1000mV ch = U2/1000; // Extrage sute 100.00 Lcd_Chr(2,1,48+ch); // Afisare rezultat in format ASCII linia 1, coloana 1 ch = (U2/100) % 10; // Extrage zeci 010.00 Lcd_Chr_CP(48+ch); // Afiseaza rezultat in format ASCII ch = (U2/10) % 10; // Extrage unitati 001.00 Lcd_Chr_CP(48+ch); // Afiseaza rezultat in format ASCII Lcd_Chr_CP('.'); // Afiseaza caracter '.' ch = (U2/1) % 10; // Extrage sutimi 000.10 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 = U1*A/1000; // Seteaza valoare Putere ch = Pw/1000; // Extrage mii 1000 Lcd_Chr(2,9,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); }} Volt-amper+watt-metru.rar Link spre comentariu
Liviu M Postat Aprilie 28, 2014 Partajează Postat Aprilie 28, 2014 @marian: lasa-l sa invete. Daca tie-ti dadea cineva mura-n gura, nu mai programai tu acum pentru altii. Link spre comentariu
Marian Postat Aprilie 28, 2014 Partajează Postat Aprilie 28, 2014 Sunt de acord cu tine intrutotul @Liviu, numai ca daca cineva imi cere ajutorul si stiu ca sunt in masura sa-l ofer, pur si simplu nu pot refuza, colegul mi-a cerut sa-i fac un cod pentru ce avea el nevoie si i-am promis ca azi o sa incerc sa-mi fac timp. Link spre comentariu
aetius Postat Aprilie 28, 2014 Partajează Postat Aprilie 28, 2014 multumesc, @liviu ca ma aperi... exact asta si vroiam sa invat,si multumesc pentru cod @marian ,acum am ce "rumega" pentru cateva zile toata stima din partea mea ,si un mare multumesc Link spre comentariu
Liviu M Postat Aprilie 28, 2014 Partajează Postat Aprilie 28, 2014 numai ca... Glumeam (si te laudam discret). :bere: Link spre comentariu
spirake Postat Mai 2, 2014 Partajează Postat Mai 2, 2014 Buna ziua Am citit de la inceput topicul si m-am apucat sa construiesc voltampermetru pentru a-l pune in instalatia mea eoliana.Toate bune cu simularea in proteus a hexului dar cand am ajuns la scrierea picului intampin niste probleme si va cer ajutorul.Am o placa de programare cumparata de la Adelaida AD02 ,folosesc icprog si cand dau la scriere merge apoi cand verifica imi da o eruare la citire .E vorba de protectia care e activata.Daca scot protectia pe off atunci picul 16f876 se scrie corect.Am facut si montajul si nu se aprinde lcd-ul apare doar pe randul de jos patratele de la biti.Unde credeti ca este problema?O fi LCD-ul de vina?Multumesc Link spre comentariu
Stefan Postat Mai 2, 2014 Partajează Postat Mai 2, 2014 Ce schema ai facut? Pune exact schema realizata practic si softul folosit. Daca zici ca sunt afisate patratele pe randul de jos (normal parca era pe randul de sus) inseamna ca ai contrast dar nu sunt corecte legaturile intre pic si LCD, pic-ul nu este corect programat, sta tot timpul in reset sau chiar probleme la oscilator (una din ele sau toate ;) ) Pune exact schema folosita in practica si softul scris in PIC, atfel doar presupunem ce problema ai. Link spre comentariu
spirake Postat Mai 2, 2014 Partajează Postat Mai 2, 2014 (editat) Asa sunt legaturile facute ca la inceputul paginii Editat Mai 2, 2014 de spirake Link spre comentariu
aetius Postat Mai 2, 2014 Partajează Postat Mai 2, 2014 (editat) Acelasi programator folosesc si eu (Adelaida AD02) si merge OK ,am programat 16F628,628A,648,873,876,876A,877 si imi recunoaste ce PIC bag in el, dar am alimentat programatorul la 16v si folosesc WinPic800 ,pune ce hex ai folosit. Editat Mai 2, 2014 de aetius Link spre comentariu
Marian Postat Mai 2, 2014 Partajează Postat Mai 2, 2014 @Spirake, ce microcontroller folosesti? Link spre comentariu
Liviu M Postat Mai 2, 2014 Partajează Postat Mai 2, 2014 Hm, mikroc nu salveaza cuvantul de configurare in hex? In mod normal n-ar trebui sa ai nevoie sa umbli la bitii de configurare. Link spre comentariu
spirake Postat Mai 2, 2014 Partajează Postat Mai 2, 2014 Pic 16 f 876 fara A,cand ajung acasa o sa pun schema dupa care am executat cablajul si hexul..Eu nu am alimentat placa AD02 si in icprog nu-mi cunoaste microcontrolerul zice ca e necunoscut dar il detecteaza si-l citeste dupa ce ii scriu hexul dar v-am spus la protectii bifex off ca altfel da eruoare. Link spre comentariu
Mircea Postat Mai 2, 2014 Partajează Postat Mai 2, 2014 Hm, mikroc nu salveaza cuvantul de configurare in hex? In mod normal n-ar trebui sa ai nevoie sa umbli la bitii de configurare. MikroXXX salveaza cuvantul de configurare in hex. Nu ai nevoie decat sa scrii hex-ul. Colegul spirake incearca sa faca ceva probabil ilegal in ICPROG (sa puna protectia la un hex care este deja compilat fara protectie). Daca se insista pe protectie, va trebui re-compilat cu bitul setat pe protectie. Pic 16 f 876 fara A,cand ajung acasa o sa pun schema dupa care am executat cablajul si hexul..Eu nu am alimentat placa AD02 si in icprog nu-mi cunoaste microcontrolerul zice ca e necunoscut dar il detecteaza si-l citeste dupa ce ii scriu hexul dar v-am spus la protectii bifex off ca altfel da eruoare. "eruare" este eroare Link spre comentariu
spirake Postat Mai 2, 2014 Partajează Postat Mai 2, 2014 Nu am bagat protectie,am scos protectia ca sa pot sa-l scriu,cand bag hexul este deja setat cu protectie si atunci dupa scriere verifica si da eruoare 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