Sari la conținut
ELFORUM - Forumul electronistilor

voltampermetru cu pic 16f876


Postări Recomandate

@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:

Posted Image

//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

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

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

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 de aetius
Link spre comentariu

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

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

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