'****************************************************************
'* Name : ADC.BAS *
'* Author : [ETE] *
'* Notice : Copyright (c) 2005 [ETE] *
'* : All Rights Reserved *
'* Date : 20.04.2005 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
TRISA=%00000001
TRISB=0
TRISC=0
TRISD=0
'-------------------------------------------------------------------------------
@ DEVICE pic16F877
@ DEVICE pic16F877, WDT_on
@ DEVICE pic16F877, PWRT_ON
@ DEVICE pic16F877, PROTECT_OFF
@ DEVICE pic16F877, XT_OSC
'-------------------------------------------------------------------------------
DEFINE LCD_DREG PORTB 'LCD data bacakları hangi porta bağlı?
DEFINE LCD_DBIT 4 'LCD data bacakları hangi bitten başlıyor?
DEFINE LCD_EREG PORTB 'LCD Enable Bacağı Hangi Porta bağlı?
DEFINE LCD_EBIT 3 'LCD Enable Bacağı Hangi bite bağlı ?
define LCD RWREG PORTB 'LCD R/W Bacağı Hangi Porta bağlı?
define LCD_RWBIT 2 'LCD R/W Bacağı Hangi bite bağlı ?
DEFINE LCD_RSREG PORTB 'LCD RS Bacağı Hangi Porta bağlı ?
DEFINE LCD_RSBIT 1 'LCD RS bacağı Hangi Bite bağlı ?
DEFINE LCD_BITS 4 'LCD 4 bit mi yoksa 8 bit olarak bağlı?
DEFINE LCD_LINES 2 'LCD Kaç sıra yazabiliyor
DEFINE ADC_BITS 10 'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK 3 'Clock kaynağı (3=rc)
DEFINE ADC_SAMPLEUS 100 'Örnekleme zamanı mikro saniye cinsinden.
'-------------------------------------------------------------------------------
ADCON1=%10001110 '7. bit 1 yapıldı 10 bit sonuç almak için.
'-------------------------------------------------------------------------------
HAM var word 'ADC den okunan ham digital değer.
VOLT var word '16 bit değişken tipi seçtik kullanacağımız değer 10 bit olacak.
Mvolt var byte
'-------------------------------------------------------------------------------
Low PORTB.2 ' LCD R/W line low (W), şemada direkt GND ye bağlanabilir.
LCDOut $FE,1 ' LCD de CLS yapar
pause 200 ' LCD nin açılması için gerekli süredir.
'-------------------------------------------------------------------------------
BASLA:
ADCIN 0,HAM '0 nolu kanaldan Analog değeri oku ve RAW değişkenine aktar.
BAK: IF ADCON0.2=1 THEN BAK 'Çevirme işlemi tamamlanınca Adcon0.2=0 olacak.
lcdout $FE,1," HAM =",# HAM
Ham=ham+1 'Hesap kolaylığı açısından Ham değerini bir artırdık
'Okunan değer 0-5 volt için 0-1024 olacağından okunacak değer başına volt değeri
' 5/1024 =0,0048828 olacaktır. Sayı çok küçük olduğundan bu değeri 1000 ile
'çarpmalıyız. Ohalde (Okuma/V)= 4,8828 bu değeri 256 ile çarpar isek
'4,8875 x 256 = 1250 değerini buluruz. Bu değeri kullanarak 32 bit işlem yapabiliriz.
'1250 değeri (5/1024)*256 değerine karşılık gelmektedir.
'sonuçta ADC HAM değerini bu sayı ile çarpıp 256'ya bölersek sonucu elde etmiş oluruz.
'ancak sonuç 32 bitlik sınırda olduğundan bu işi 32 bit çarpma ile yapıyoruz ve orta
'baytı aldığımızda ise zaten sayının 256'ya bölünmüş halini aldığımızdan başka bir
'işlem yapmadan sonucu elde etmiş oluruz.
Volt=(ham */ 1250)/100 'Ham ile 1250 yi 32 bit olarak çarp ve 100'böl
Mvolt=volt//10
'Burada yeni bir komut veya işlem şekli görüyorsunuz. MOD alma yani (//) kalan bulma
'Bir sayını başka bir sayıya bölünmesinden sonra kalan miktarı bulma işlemine MOD
'alma denir. Örnek W=A//1000 , A'yı 1000'e böl kalanı W değişkenine koy anlamındadır.
'bizde yukarıda Milivolt değerini bulmak için volt (10 ile çarpılmış halini) 10'a
'bölüp kalanı Mvolt değişkenine yerleştiriyoruz.
Volt=Volt/10
LCDOUT $FE,$C0," VOLT=",#VOLT,",",# Mvolt
PAUSE 500
[b]'buraya istedigin voltaj aralıgında netur bir işlem yaptırmak istiyorsan bir if dongusu
'olusturup altprograma dallanmak yoluyla istedigini yaptırabilirsin. [/b]
GOTO BASLA