Sari la conținut
ELFORUM - Forumul electronistilor

voltampermetru cu pic 16f876


winston

Postări Recomandate

Am si eu o intrebare,sper sa nu fie prosteasca deoarece nu ma pricep asa bine:Pot folosi un afisaj de 2x16?Am vazut ca in schema afisajul este 2x24.multumesc! :jytuiyuSi inca ceva,afisajul trebuie si el programat?

Link spre comentariu

LCD-ul in sine nu trebuie programat, este suficienta scrierea unui cod corespunzator pentru PIC-ul folosit, insa in cazul de fata LCD de 2x16 nu sunt sigur ca poate afisa codul asa cum este acum, nu are suficiente coloane, spre exemplu pentru afisarea tensiunii in formatul V:xx.yyV sunt necesare 8 coloane si asta doar folosind 2 zecimale, la putere insa sunt necesare cifre de ordinul sutelor inainte de virgula, deci 9 coloane necesare, poate sa se renunte la ceva caractere, spre exemplu la formatul ala de tensiune subliniat de mine, sa se renunte la unul din caracterele "V", sa zicem cel din fata, astfel se poate renunta si la cele 2 puncte din fata cifrei afisate, automat se castiga 2 coloane, deci in concluzie masuratorile ar putea fi afisate in formatul xx.yyV; xx.yyA; xxx.yyW; yy.zzR astfel s-ar inscrie in afisaj toate cele 4 masuratori, respectiv tensiune, curent, putere si rezistenta sarcina. Ori asa ori analizeaza subiectul deschis de mine unde am pus si o simulare ( ultima din ele ) vezi acolo in clip cum am abordat eu afisarea pe un LCD2x16, alegerea iti apartine.

 

PS: Asta este clipul:

Link spre comentariu

Multumesc frumos de raspuns.Imi cer scuze daca denaturez continutul subiectului dar sunt si eu foarte interesat de acest proiectcu toate ca nu am mai lucrat cu pic-uri si lcd-uriPicul l-am progamat cu hex-ul atasat in discutiile anterioare acum ramane sa fac rost de quartzsi apoi sa testez cu un display de 2x20 (am facut rost intre timp)Nu stiu daca sunt multi carora le-ar conveni sa foloseasca un display de 2x16 dar mie sigur imi convineavand in vedere pretul unui lcd 2x24

Link spre comentariu

Se poate folosi si LCD 2x16 dar codul trebuie ajustat, pot face eu asta dar trebuie sa te decizi asupra afisarii, cum preferi sa se faca avand in vedere ca ceea ce se afiseaza pe 2x24 nu se poate si pe 2x16 din lipsa de coloane suficiente, ti-am explicat ceva in mesajul anterior, citeste si spune-mi ce alegi.

Link spre comentariu

sincer nu am indraznit sa iti cer asta dar ca se poate :jytuiyu as vrea hex-ul pentru ambele variantesi pentru 2x16 si 2x20 vreau sa vad ce iese.Multumesc mult

Link spre comentariu

Ok se pare ca nu intelegi observatiile mele asa ca nu mai insist, o sa ajustez codul pentru 2x16 si vin cu printul unei simulari pentru a-ti ilustra cum va arata totul.

Link spre comentariu
:bataie ce tampit sunt acum am inteles ,e perfect si daca nu imi afiseaza simbolul unitatii de masurasi cele doua puncte.acestea vor fi marcate pe panoul frontal al carcasei
Link spre comentariu

Revin cu ceea ce am promis, am rescris codul si l-am ajustat pentru LCD2x16, microcontroller PIC16F876A, oscilator extern cristal la 4 Mhz, gama tensiuni 0-35V, gama curent 0-6A asa cum era proiectul original pentru a nu fi necesare modificari in schema sau cablaj. Iata codul sursa:

/*VoltAmper-Metru bobinatorul@elforum* Descriere  Indicator LCD afisand Tensiunea, Curentul,  Puterea si Rezistenta de sarcina,* Configuratie  Microcontroller PIC16F876A  Oscilator HS 4.0000Mhz  LCD display 2x16  Gama tensiune 0-35V  Gama curent 0-6A* Autor cod  Marian@elforum*///Conexiuni LCDsbit 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;//Declarare variabileunsigned char ch, I, U;unsigned int Tensiune,Curent, ProtI;unsigned long V, A, Power, Res;//Functie principalavoid main() {     INTCON = 0;                      // Dezactivare intreruperi     TRISA = 0x03;                    // Pinii RA0 si RA1 setati pe intrare     TRISC = 0xE7;                    // RC3 si RC4 setati pe iesire     PORTC = 0;                       // Resetare port c     Lcd_Init();                      // Initializare LCD     Lcd_Cmd(_LCD_CURSOR_OFF);        // Comanda dezactivare cursor     Lcd_Cmd(_LCD_CLEAR);             // Comanda stergere ecran     Delay_ms(1000);     Lcd_Out(1,1,"Volt/Amper-Metru"); // Mesajul initial => prima linie     Lcd_Out(2,2,"*bobinatorul*");    // Mesajul initial => linia a 2-a     Delay_ms(3000);                  // 3 secunde delay     Lcd_Cmd(_LCD_CLEAR);             // Comanda stergere ecran     while (1) {        //Tensiune        Tensiune = 0;        for (U=0; U<10; U++) {        Tensiune += ADC_Read(0);     // Achizitie ADC pentru tensiune        Delay_ms(10);        }        Tensiune = Tensiune/U;        V = (long)Tensiune*3500;     // Convertire rezultat in milivolti        V = V/1023;                  // 0..1023 => 0-3500mV        ch = V/1000;                 // Extragere zeci        Lcd_Chr(1,1,48+ch);          // Scrie rezultatul in format ASCII        ch = (V/100) % 10;           // Extragere unitati        Lcd_Chr_CP(48+ch);           // Scrie rezultatul in format ASCII        Lcd_Chr_CP('.');        ch = (V/10) % 10;            // Extragere sutimi        Lcd_Chr_CP(48+ch);        ch = V % 10;                 // Extragere zecimi        Lcd_Chr_CP(48+ch);        LCD_Chr_CP('V');             // Afisare caracter 'V' la final        Delay_ms(10);        //Curent        Curent = 0;        for(I=0; I<10; I++) {        Curent += ADC_Read(1);       // Achizitie ADC pentru curent        Delay_ms(10);        }        Curent = Curent/I;        A = (long)Curent*600;        // Convertire rezultat un milivolti        A = A/1023;                  // 0...1023 => 0...600mV        ch = A/1000;                 // Extrage zeci        Lcd_Chr(2,1,48+ch);        ch = (A/100) % 10;           // Extrage unitati        Lcd_Chr_CP(48+ch);        Lcd_Chr_CP('.');             // Afisare caracter "virgula"        ch = (A/10) %10;             // Etrage sutimi        Lcd_Chr_CP(48+ch);        ch = A % 10;                 // Extrage zecimi        Lcd_Chr_CP(48+ch);        Lcd_Chr_CP('A');             // Afiseaza caracter "A" la final        Delay_ms(10);        //Protectie        ProtI = ADC_Read(1);         // Achizitie ADC pentru Protectie        if (ProtI == 1023) {        PORTC.F4 = 1;                // Aprinde ledul daca curentul este 6A        Sound_Init(&PORTC, 3);       // Initializare buzzer si activare avertizare        Sound_Play(1000, 1000);      // sonora 1Khz/1 Sec daca curentul este 6A        }        else {        PORTC.F4 = 0;                // Resetare RA4        }        //Putere        Power = V*A/1000;            // Seteaza valoare Putere        ch = Power/1000;             // Extrage sute        Lcd_Chr(1,8,48+ch);        ch = (Power/100) % 10;       // Extrage zeci        Lcd_Chr_CP(48+ch);        ch = (Power/10) %10;         // Extrage unitati        Lcd_Chr_CP(48+ch);        Lcd_Chr_CP('.');        ch = (Power/1) % 10;         // Extrage sutimi        Lcd_Chr_CP(48+ch);        ch = Power % 10;             // Extrage zecimi        Lcd_Chr_CP(48+ch);        Lcd_Chr_CP('W');             // Afiseaza "W" la sfarsit        Delay_ms(10);        //Rezistenta        Res = V*10/A;                // Seteaza valoare Rezistenta        ch = Res/1000;               // Extrage sute        Lcd_Chr(2,8,48+ch);        ch = (Res/100) % 10;         // Extrage zeci        Lcd_Chr_CP(48+ch);        ch = (Res/10) %10;           // Extrage unitati        Lcd_Chr_CP(48+ch);        Lcd_Chr_CP('.');        ch = (Res/1) % 10;           // Extrage sutimi        Lcd_Chr_CP(48+ch);        ch = Res % 10;               // Extrage zecimi        Lcd_Chr_CP(48+ch);        Lcd_Chr_CP(244);             // Afiseaza caracterul "ohm" la final        Delay_ms(10);        }}

Aici 2 imagini cu simularea pentru a ilustra modul de afisare.

Ecranul initial:

http://img854.imageshack.us/img854/6914/pw.png

Ecranul principal:

http://img163.imageshack.us/img163/8769/ykzp.png

 

Si arhiva cu hex-ul necesar:

[attachment=0]VA-metru.rar[/attachment]

 

Testeaza-l si spune-mi daca este ok.

Link spre comentariu

Multumesc mult pentru efortul depus,acum astept sa imi vina comanda de piese(sper sa nu dureze foarte mult) si voi incepe realizarea practica a proiectului.Voi reveni si cu poze :da

Link spre comentariu
  • 1 lună mai târziu...
  • 4 săptămâni mai târziu...

Salutare, cer un pic de ajutor de la meseriasi :jytuiyu Am inceput sa lucrez la o sursa de laborator dublu si m-am gandit la un voltampermetru cu PIC16F877A sau 876A cu un LCD de 4X20. Precizez ca sunt foarte incepator la programare.Softul am carpit cat de cat a dar a aparut o problema:Programul ruleaza afiseaza U1(AN0),I1(AN1),P1,U2(AN2) dar daca cer sa citeasca AN3 pentru curent se blocheaza programul si se reseteaza.Poate nu am declarat cum trebuie intrarile analogice?

cod.pdf

post-11727-13982968375_thumb.jpg

Link spre comentariu

In PDF atasat nu zici decat ca PORTA sunt intrari. Codul este incomplet. Pune tot codul ca nu-i nimic confidential sau proprietar in aplicatia ta (utilizeaza butonul CODE cand scrii mesajul). Nu mai atasa PDF-uri.Trebuie sa scrii 0000 sau 0010 sau 1001 in ADCON1 la bit 3-0 PCFG3:PCFG0: A/D Port Configuration Control bits. Vezi datasheet page 128.

Link spre comentariu

Codul e semi complet pentru ca pana aici functiona in simulare daca puneam sa masoara curentul de pe intrarea 3 si punem sa calculeze puterea nu mai mergea la simulare.Asa cum e merge la simulare cum se vede pe poza atasata.Trebuie sa precizez ca sunt ultra incepator la programare si va rog frumos daca ma ajutati la completarea codului sa precizati unde si ce trebuie scris, lucrez cu micoC. :jytuiyu Multumesc

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