AC voltmetre projesi

Başlatan ilker_32, 30 Ocak 2008, 18:09:54

ilker_32



#include <16F877A.h>
#fuses HS,NOPROTECT,NOWDT,NOLVP,NOWRT
#use delay(clock=20000000)

#byte ADRESH = 0x1E
#byte ADRESL = 0x9E
#byte ADCON0 = 0x1F
#byte ADCON1 = 0x9F
#bit ADGODONE = ADCON0.2

int8 onceki_v_ornek;
int16 adc_ornek;
int32 adc_ornek_kare;
int16 v_ornek_olcum_sayisi;
int32 v_ornek_toplami;
int1 faz_sonu_flag;
int1 v_zero_flag;
int16 v_faz_olcum_sayisi;
int32 v_faz_toplami;

#include <math.h>

#INT_AD

void ad_int(){

adc_ornek = MAKE16(ADRESH,ADRESL);

if (adc_ornek<512){ adc_ornek=512-adc_ornek; } else { adc_ornek=adc_ornek-512; }

adc_ornek_kare = adc_ornek * adc_ornek;

   if (ADRESH>=2 && onceki_v_ornek<2){
      faz_sonu_flag=1;
      v_faz_toplami = v_ornek_toplami;
      v_ornek_toplami = 0;
      v_faz_olcum_sayisi = v_ornek_olcum_sayisi;
      v_ornek_olcum_sayisi = 0;
      v_zero_flag=0;
   }
   v_ornek_toplami = v_ornek_toplami + adc_ornek_kare;
   onceki_v_ornek=ADRESH;
   v_ornek_olcum_sayisi = v_ornek_olcum_sayisi + 1;
   if (v_ornek_olcum_sayisi > 350) {v_zero_flag=1; v_ornek_olcum_sayisi=0; v_ornek_toplami=0;}

ADGODONE=1;
}

int8 ortalama_sayaci;
int32 v_ortalama_toplami;
int32 v_ortalama_olcum_sayisi;

float v_rms,v_rms_yedek;
            v_ortalama_olcum_sayisi=v_ortalama_olcum_sayisi+v_faz_olcum_sayisi;
         }else{
            v_rms = v_ortalama_toplami;
            v_rms = (v_rms / v_ortalama_olcum_sayisi);

            v_rms = SQRT(v_rms) * 4.88;

            ortalama_sayaci=0;
            v_ortalama_toplami=0;
            v_ortalama_olcum_sayisi=0;
         }
}

void bios(){
DISABLE_INTERRUPTS(GLOBAL);

ADCON0=0x81;
ADCON1=0xC0;

ENABLE_INTERRUPTS(INT_AD);

///////////////////////////////////
//DEĞİŞKENLER BAŞLANGIÇ DEĞERLERİ//
///////////////////////////////////
v_ornek_olcum_sayisi=0;
v_ornek_toplami=0;
ortalama_sayaci=0;
v_ortalama_toplami=0;
v_ortalama_olcum_sayisi=0;

ADGODONE=1;

ENABLE_INTERRUPTS(GLOBAL);


}

int16 a,b;
int c,d,e;
const int donusum[10] = {
                         0x3F,
                         0x06,
                         0x5B, 
                         0x4F,
                         0x66,
                         0x6D,
                         0x7D,
                         0x07,
                         0x7F,
                         0x6F,

                         
};

void main(){
bios();

while(True){
   if (faz_sonu_flag){
      faz_degerlendir();
      faz_sonu_flag=0;
   }

   if (v_rms_yedek!=v_rms){
      v_rms_yedek=v_rms;
      a=v_rms;
      b = a / 100;
      c = b;
      b = (a - (c*100))/10;
      d = b;
      b = a-(c*100)-(d*10);
      e = b;
      }
      lcd_send_byte(0,0x80); 
      printf(lcd_putc,"Gerilim : ");
      lcd_send_byte(0,0x90);
      printf(lcd_putc,"\f%lu",a);
}}

M_B

mrb ilker32 Hocam
CCS C hangı verisyonu ile derleme yapıyorsun bende derlemede 25 tane
hata verıyor.
hatalardan bır tanesi su

Warning 202 "Voltmertre.c" Line 12 (6,19) Variable never used v_i_sıra_flag

vs...
devam ediyor.
Bendeki versiyon 4.023
İmkanın sınırlarını görmek için imkansızı denemek lazım.                                                             Fatih Sultan Mehmet

ilker_32

Bendekide dediğin versiyondan...

fatihates

Ilker32 Hocam
Voltmetre nin kalibrasyonu nasıl yapılacak ?

ilker_32

Alıntı yapılan: "fatihates"Ilker32 Hocam
Voltmetre nin kalibrasyonu nasıl yapılacak ?
Voltmetrenin kalibrasyonu kodun içinde... İstersen bir pot koy,

ilker_32

Kaynak kodları yeniledim bilginize.

zakbay

ilker merhaba

while(True){ 
   if (faz_sonu_flag){ 
      faz_degerlendir(); 
      faz_sonu_flag=0; 
   } 

   if (v_rms_yedek!=v_rms){ 
      v_rms_yedek=v_rms; 
      a=v_rms; 
      b = a / 100; 
      c = b; 
      b = (a - (c*100))/10; 
      d = b; 
      b = a-(c*100)-(d*10); 
      e = b; 
      } 
      lcd_send_byte(0,0x80); 
      printf(lcd_putc,"Gerilim : "); 
      lcd_send_byte(0,0x90); 
      printf(lcd_putc,"\f%lu",a); 
}}



verdiğin kodun içinde

faz_degerlendir();

diye bir alt program yok ayrıca resimde 7 segment displayler var ekrana gerilim falan yazdırmışsın ?

CCS 4.084 ile derledim
derlemede 31 tane hata var
Tek dostum çalışmak...

dikerelektronik

herkese iyi çalışmalar dilerim.Bu ac voltmetreyi yapıp çalıştıran arkadaşımız varmı?.Stabil çalışıyormu?.değişiklik yapıp çalıştıran varsa bildirmesini rica ederim.

ahmet2004


ilker_32

Çok önceden yaptığım bir devreydi devreyi kurmuştum. True rms değer ölçülüyor fakat stabil değil. Tarama kısmında biraz problem var. O kısımı yeniden yazabilirsiniz. Yada lcd kullanabilirsiniz. Devrede 877 aşırı mantıksız seçim cebinize yazık değiştirin derim.

Kolay gelsin.

pro73

öncelikle iyi formlar
ilker_32 hocam bu yapmış oldugunuz ac voltmetrenin calışma şekli nasıldır anlatabilirmisiniz

emin_491

Alıntı yapılan: zakbay - 20 Şubat 2009, 18:16:08
ilker merhaba

while(True){ 
   if (faz_sonu_flag){ 
      faz_degerlendir(); 
      faz_sonu_flag=0; 
   } 

   if (v_rms_yedek!=v_rms){ 
      v_rms_yedek=v_rms; 
      a=v_rms; 
      b = a / 100; 
      c = b; 
      b = (a - (c*100))/10; 
      d = b; 
      b = a-(c*100)-(d*10); 
      e = b; 
      } 
      lcd_send_byte(0,0x80); 
      printf(lcd_putc,"Gerilim : "); 
      lcd_send_byte(0,0x90); 
      printf(lcd_putc,"\f%lu",a); 
}}



verdiğin kodun içinde

faz_degerlendir();

diye bir alt program yok ayrıca resimde 7 segment displayler var ekrana gerilim falan yazdırmışsın ?

CCS 4.084 ile derledim
derlemede 31 tane hata var


arkadaşın dediği gibi bende 31 tane hata alıyorum yardımcı olabilirmisiniz.