kosinüsfimetre yardım

Başlatan lordtorm, 13 Ağustos 2007, 16:40:29

lordtorm

arkadaslar ben pic ile kosinüsfi metre yapmaya calısıyorum  gerilim 0 oldugu anda tmr baslatıp akımın 0 oldugu anda durduruyorum buradan aradaki acı degerini nasıl hesaplarım mantıgını kuramadım bir türlü lütfen yardım edin
bırakayım diyorum bu işleri

remzi

kendine bir tane look at table oluşturmalısın.

Şu mikro saniyede gelirse şu kadar derece diye.

kolay gelsin...

lordtorm

hocam tablo olusturdum gerilim 0 oldugunda tmr saymaya baslıyor tmr her zaman asımında sayac degişkenini bir arttırıyorum akım sıfır oldugunda tmr durdurup sayacdakı degerin karsılıgını cagırıyorum lcdde goster diyorum ama bir türlü deger goremiyorum alttaki program sadece sayac içindeki rakamı gormek için burda bir hata varmı bakarmısınız:

ADCIN 0,VIN1                            
BAK1:  IF ADCON0.2=1 THEN BAK1
ADCIN 3,VREF            
BAK2: IF ADCON0.2=1 THEN BAK2
ADCIN 4,AMPERIN1
BAK3: IF ADCON0.2=1 THEN BAK3      
   
 IF VIN1=VREF THEN TMR0=0
 IF INTCON.2=1 THEN SAYAC=SAYAC+1


 
 IF AMPERIN1=VREF THEN

 LCDOUT $FE,1,#SAYAC
  ENDIF
pause 500

   GOTO BASLA
    end
bırakayım diyorum bu işleri

zafzaf82

gerilimin ve akımın sıfırdan geçiş anları tespit et. bu aralıgı timer ile saydır. böylece zamanı elde etmiş olursun. sonra bu süre ile açıyı hesapla örnegin 50hz için 1ms fark varsa faz farkı 18 derece oluyo. bu açınında cosinüsünü al, bu kadar. tabi bu dedeklerim horminiksiz bir şebeke için güç faktörü ölçümü :) aman Uğur Arifoğlu harmonikleri ihmal ettiğimizi duymasın :)
Mikroişlemci bi araçtır, amaç değil.....

lordtorm

bırakayım diyorum bu işleri

lordtorm

INCLUDE "MODEDEFS.BAS"
TRISA=%11111111
TRISB=0
TRISC=%00001110
TRISD=0
TRISE=%00000111
OPTION_REG=%00000111
INTCON=%11100100
'-------------------------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
'-------------------------------------------------------------------------------
DEFINE LCD_DREG   PORTB   
DEFINE LCD_DBIT   4   
DEFINE LCD_EREG   PORTB   
DEFINE LCD_EBIT   3   
DEFINE LCD RWREG      PORTB      
DEFINE LCD_RWBIT      2          
DEFINE LCD_RSREG   PORTB   
DEFINE LCD_RSBIT   1   
DEFINE LCD_BITS   4   
DEFINE LCD_LINES   4   

DEFINE  ADC_BITS   10       
DEFINE  ADC_CLOCK   3   
DEFINE  ADC_SAMPLEUS   100   
'-------------------------------------------------------------------------------
ADCON1=%10000000
VIN1   VAR WORD
AMPERIN1 VAR WORD
VREF VAR WORD
SAYAC VAR WORD
Low PORTB.2      
LCDOut $FE,1      
pause 200            

INTCON.2=0
INTCON.5=1
INTCON.7=1
BASLA:
ADCIN 0,VIN1                            
BAK1:  IF ADCON0.2=1 THEN BAK1
ADCIN 3,VREF            
BAK2: IF ADCON0.2=1 THEN BAK2
ADCIN 4,AMPERIN1
BAK3: IF ADCON0.2=1 THEN BAK3      
 
IF VIN1<VREF THEN  VIN1=(VREF-VIN1)+VREF
VIN1=VIN1-VREF
IF VIN1=VREF THEN TMR0=0
IF INTCON.2=1 THEN SAYAC=SAYAC+1
ENDIF    
IF AMPERIN1<VREF THEN AMPERIN1=(VREF-AMPERIN1)+VREF
AMPERIN1=AMPERIN1-VREF
    IF AMPERIN1=VREF THEN 'BURADA TMR0 DURDURUP SAYAC
                          'İÇİNDEKİ SAYIYI EKRANA GONDERECEM
                           'TMR0 NASIL DURDURACAM COZEMEDİM
   
   
pause 500

   GOTO BASLA
    end
bırakayım diyorum bu işleri

teknikelektronikci

emin değilim ama sanirm
INTCON.2=0
diye yapacaksiniz  kolay gelsin
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

lordtorm

ADCON1=%10000000
VIN1   VAR WORD
AMPERIN1 VAR WORD
VREF VAR WORD
SAYAC VAR WORD
Low PORTB.2      
LCDOut $FE,1      
pause 200            


INTCON.5=1
INTCON.7=1
BASLA:
 ENABLE
ADCIN 0,VIN1                            
BAK1:  IF ADCON0.2=1 THEN BAK1
ADCIN 3,VREF            
BAK2: IF ADCON0.2=1 THEN BAK2
ADCIN 4,AMPERIN1
BAK3: IF ADCON0.2=1 THEN BAK3      
 
'DEVREDE ANALOG GİRİŞ EKSİ OLMASIN DİYE 5V ÜSTÜNE BİNDİRİLİYOR

IF VIN1<VREF THEN  VIN1=(VREF-VIN1)+VREF
VIN1=VIN1-VREF                            
 IF VIN1=VREF THEN INTCON=$A0

ON INTERRUPT  GOTO SAY

 SAY:
 SAYAC=SAYAC+1  
  RESUME
  IF AMPERIN1=VREF THEN
  DISABLE
      ENDIF
    LCDOUT $FE,1,#SAYAC
   SAYAC=0
pause 500

   GOTO BASLA
    end
  sayacdaki degeri lookup tablosu ile 0-180 kosinüs degerlerine cevirince
   gercek kosinüs degerini ekranda gorebiliyorum herkese cok teşekkür ederim
bırakayım diyorum bu işleri

lordtorm

90 dereceden sonraki degerler kapasitif degerler olarak goruyorum
bırakayım diyorum bu işleri

zafzaf82

90 dereceden sonra cosinüs negatif değerler alır böyle görmen çok dogal. Saf endüktif yük bile 90 derece faz farkı yaratır. yani endüktif yükler 90 dereceden fazla faz farkı oluşturamaz.
Mikroişlemci bi araçtır, amaç değil.....