16F873A VOLT AMP

Başlatan zeus48, 05 Şubat 2019, 20:04:53

zeus48

Arkadaşlar mrb. işlemci 16f873a  ve lm358 ile volt amper ayarlı güçkaynağı yaptım. Kodlar ete hocanın kodlarından derleme. Volt okumada sorun yok çalışıyor fakat amper okuyamıyorum. Sorunumun yazılımdan mı kaynaklanıyor bilemiyorum. yazılım altta bir göz atarsanız sevinirim. İyi çalışmalar.


'İŞLEMCİ  :16F873A
'VOLT AMP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;İŞLEMCİ AYARLARI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

'**********************  Tanımlama Blokları ******************
@ __config _XT_OSC & _WDT_OFF & _LVP_OFF & _CP_ALL

DEFINE OSC 4
CMCON = 7

OPTION_REG=7
TRISA=%00000111
TRISB=%00001111
TRISC=%00000001

PORTA=0
PORTB=0
PORTC=0

DEFINE ADC_BITS 10     ' Set number of bits in result
DEFINE ADC_CLOCK 3     ' Set clock source (3=rc)
DEFINE ADC_SAMPLEUS 50     ' Set sampling time in uS


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;LCD TANIMLAMALARI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DEFINE LCD_DREG    PORTB
DEFINE LCD_DBIT    4     
DEFINE LCD_EREG    PORTC 
DEFINE LCD_EBIT    7     
DEFINE LCD_RSREG   PORTC
DEFINE LCD_RSBIT   6                             
   
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;DEĞİŞKENLER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SEMBOLLER;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SYMBOL  MENU =PORTB.3  ;MENÜ BUTON GİRİŞİ
SYMBOL  GERI =PORTB.1  ;GERİ BUTON GİRİŞİ
SYMBOL  OK   =PORTB.0  ;OK BUTON GİRİŞİ
SYMBOL  ILER =PORTB.2  ;İLERİ BUTON GİRİŞ
SYMBOL  BUZ  =PORTC.3 
SYMBOL  FAN  =PORTC.2 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Deg         CON 223         ' ° işareti

VER VAR BYTE       ;PWM ÇIKIŞ DEĞİŞKENİ
ISI VAR WORD
CIK VAR WORD
GIR VAR WORD
AMP VAR WORD

GHAM VAR WORD
GHAM=0
CHAM VAR WORD
CHAM=0
AHAM VAR WORD
AHAM=0

VER=0
ISI=27
CIK=0
GIR=0
AMP=0

AM VAR WORD
MA VAR WORD
GVL VAR BYTE
GMV VAR BYTE
CVL VAR BYTE
CMV VAR BYTE

AM=0
MA=0
GVL=0
CVL=0
CMV=0

CIKV VAR BYTE
CIKV=0

CCP2CON = %00001100      ;ÇIKIŞ 0
HPWM 2,VER,255

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCDOUT $FE,$80,"MEGA ELK FETHiYE"
LCDOUT $FE,$C0,"TEL:542 252 1001"
PAUSE 3000
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ANA DÖNGÜ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BASLA:
ADCIN 0,GIR:PAUSE 200
GOSUB HESAPGIR
 
ADCIN 2,CIK:PAUSE 200
GOSUB HESAPCIK

ADCIN 1,AMP:PAUSE 200
GOSUB HESAPAMP


LCDOUT $FE,$80,"GiR=",DEC2 GVL,"V ","ISI=",DEC2 ISI,Deg,"C"
LCDOUT $FE,$C0,DEC2 CVL,",",DEC1 CMV," V ",DEC2 AM,",",DEC2 MA," A"

IF MENU=0 THEN LCDOUT $FE,1:GOTO VAYAR

IF CVL<CIKV THEN VER=VER+1:GOSUB SUR
IF CVL>CIKV THEN VER=VER-1:GOSUB SUR

GOTO BASLA


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SUR:
IF VER=255 THEN VER=0
IF VER>253 THEN VER=253


CCP2CON = %00001100      ;A-LAMBA ÇALIŞTI
HPWM 2,VER,255
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HESAPGIR:
GHAM=((GIR+1)*/250)/100
GVL=GHAM/10
RETURN

RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HESAPCIK:
CHAM=((CIK+1)*/250)/100
CVL=CHAM/10
CMV=(CHAM)//10
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HESAPAMP:

AHAM=((AMP+1)*/250)/100
AM=AHAM/10
MA=(AHAM)//10
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
VAYAR:
PAUSE 3000
IF MENU=1 THEN LCDOUT $FE,1:GOTO BASLA

VDEV:
LCDOUT $FE,$80,"CIKIS VOLT=",DEC2 CIKV
IF ILER=0 THEN CIKV=CIKV+1:PAUSE 200
IF GERI=0 THEN CIKV=CIKV-1:PAUSE 200
IF CIKV>50 THEN CIKV=50
IF CIKV=255 THEN CIKV=0
IF OK=0 THEN LCDOUT $FE,1:GOTO BASLA
GOTO VDEV

ete

Sorunun yazılım kaynaklı. 16F873A işlemcisinde 3 adet analog giriş kombinasyonu şöyle;
ADCON1=%10000100  'AN0-AN1 ve AN3  yani AN2 digital pin olacak mecburen.
Programında zaten ADCON1 registerine verilecek değer eksik bu nedenle derleyici kafasına göre bir değer vermiştir sanırım. Çünki Analog okuma yapıyorsun.
Normal ayar yukarıdaki gibi Yani An0 ve AN1 analog ve yanında AN3 analog olabiliyor. AN2 ise digital mecburen.
Şayet A portunda Analog pinleri başka amaçlar için kullanmıyor isen o zaman;
ADCON1=%10000000 vererek bütün analog pinleri Analog olarak seçebilir ve böylece AN2 yi analog kullanabilirsin.
Yada
ADCON1=%10000010 vererek AN0-AN4 pinlerini analog diğerlerini, digital kullanabilirsin. Bu seçenek de de AN2 yi kullanma imkanın mevcut. Belkide bu en iyi alternatiftir.

Ete

zeus48

Hocam cevabın için teşekür ederim. A portunu başka amaclı,başka yerde kullanmıyorum. oyüzden sizin verdiğiniz komutu koydum
ADCON1=%10000000  bu sefer  analog girişlerin hiçbiri çalışmadı.

zeus48

Düzeltme yapıyorum adc lerin hiçbiri çalışmıyor. Ben yukarıdaki yazılımda an0-an1-an2 kullandım. an0 giriş voltajını ölçüyor doğru çalışıyor. an1 amp ölçüyorum tabikide ölçemiyorum doğru çalışmıyor. an2 çıkış voltajını ölçüyorum doğru çalışıyor.Tşk hocam

ete

Söylediklerinden bir anlam çıkarmak zor. Adc lerin hiç biri çalışmıyor diyorsun diğer yandan An0 çalışıyor diyorsun bir karar ver istersen.
Sen yinede ADCON1=%10000010 kullan analogların tamamı A portunda değil E portunda var.
Bu satırla an0-an1 ve an2 nin çalışması gerekir. Çalışmıyan varsa oraya ölçülecek voltaj gelmiyordur.
Volt lar çalışıyor akım ölçmüyor dediğine göre akım kısmından gelen bir voltajın yok sanırım. Şema da koymadığına göre ne yaptığını sen bileceksin artık..
İşin yazılım tarafını şöyle kontrol ederim.
Akım=((ham+1)*/250)/100
Ham olarak 1023 okusan 1024x250/256=1000  buluruz. Bunu birde 100 e bölersek 10 elde edilir.
İşte bu noktadan sonrasında hata olabilir zira ölçme limitin tam sayı olarak 10A midir yoksa 1 A midir belli değil ama programa bakarak 1 A olduğunu düşünüyorum. Çünki sonradan ondalık kısmını mod 10 yaparak ve tam sayı kısmını 10 a bölerek buluyorsun.
Sonuç yanlışda olsa o son 10 a bölme işini bir kapar ve bak bakalım bir şey hesaplıyormusun. Sonuca göre ne yapacağına karar verirsin.
Ete



Powered by EzPortal