analog giriş ayarlar

Başlatan burak450, 27 Şubat 2009, 15:39:13

burak450

Merhabalar,

SYMBOL VERI=PORTA.0
ADCON1=2
TRISA=%00000001 
TRISB=0
PORTB=0
TRISC=0


Yukarıda kod doğru ve porta.0 dan analog  sonuçlar alıyorum...

ADCON1=2
input PORTA.5
SYMBOL VERI=PORTA.5 
TRISB=0
PORTB=0
TRISC=0


bu kodda porta.5 den analog sonuçlar alıyorum ama doğru sonuçlar değil
hata nerde arkadaşlar?

Logan

burak450, programın tamamını yollama şansın var mı? Bir de ben tam olarak anlayamadım. Konuyu Pic Basic başlığı altına açmışsın, analog okumak istiyorsun fakat ADCIN komutunu göremiyorum.
İmza.

Maxim


burak450

pic 16f877a, picbasic kullanıyorum
Çalışan kod

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS  4
DEFINE LCD_LINES 2
DEFINE OSC 4                                                                       
DEFINE ADC_BITS     8       'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK  3       'Clock kaynağı (3=rc)
DEFINE ADC_SAMPLEUS 100
bilgi var byte
red var byte
green var byte
blue var byte
flag1 var byte
flag2  var byte
flag3 var byte
SYMBOL VERI=PORTA.0
ADCON1=2
TRISA=%00000001 
TRISB=0
PORTB=0
TRISC=0
LCDOUT $FE,1 




yap:

flag1=0 
flag2=0
flag3=0

high PORTA.1
PAUSE 750
CALL ADC_OKUMA
red=bilgi
pause 5
low PORTA.1


high PORTA.2
PAUSE 750
CALL ADC_OKUMA
blue=bilgi
pause 5
low PORTA.2


high PORTA.3
PAUSE 750
CALL ADC_OKUMA
green=bilgi
pause 5
low PORTA.3


if  (red>green) and (red>blue)    then
flag1=1

LCDOUT $FE,1             	'Önce Ekranı siliyoruz.
LCDOUT "REDDDD" 

endif


if (red>blue) and (green>blue) and flag1=0 then
 flag2=1

 LCDOUT $FE,1             	'Önce Ekranı siliyoruz.
LCDOUT "GREENNNNN"

ENDIF

if (green>red) and (blue>red) and flag1=0 and flag2=0 then

 flag3=1
LCDOUT $FE,1             	'Önce Ekranı siliyoruz.
LCDOUT "BLUEEEEE" 
 
endif
if  not(flag1=1 or flag2=1 or flag3=1) then
 LCDOUT $FE,1  
 LCDOUT "NOT FOUND"
endif 
 
pause 7000

goto yap



ADC_OKUMA:
ADCIN VERI,bilgi
RETURN


Çalışmayan kod :(

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS  4
DEFINE LCD_LINES 2
DEFINE OSC 4                                                                       
DEFINE ADC_BITS     8       'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK  3       'Clock kaynağı (3=rc)
DEFINE ADC_SAMPLEUS 100
bilgi var byte
red var byte
green var byte
blue var byte

ADCON1=2
input PORTA.5
SYMBOL VERI=PORTA.5 
TRISB=0
PORTB=0
TRISC=0
LCDOUT $FE,1 



yap:

high PORTD.7                     'Ledleri 0.75 sn aralıkları yaktık.
PAUSE 750
ADCIN VERI,bilgi
red=bilgi
pause 5
low PORTD.7


high PORTD.6
PAUSE 750
ADCIN VERI,bilgi
blue=bilgi
pause 5
low PORTD.6


high PORTD.5
PAUSE 750
ADCIN VERI,bilgi
green=bilgi
pause 5
low PORTD.5

CALL GOSTER











 


   
pause 7000
goto yap

 ADC_OKUMA:
ADCIN VERI,bilgi
RETURN 

GOSTER:
LCDOUT $fe,2,#red," ",#blue," ",#green," "

RETURN




end


porta.5 i kullanamıyorum sonuçlar alıyorum ama yanlış sonuçlar...

burak450

Baştaki ayarlarda bi sorun olduğunu düşünüyorum ????
Ama problemi bulamadım...

Logan

SSPCON registerine 0x00 yazıp dener misin?
İmza.

burak450

cevabını taM olarak anlamadım ne yazmam gerekiyor acaba ???

Logan

Programın başına ADCON1 ve TRISA'dan önce SSPCON=0 yazar mısın?
İmza.

burak450

Ne yazık ki yine  yanlış sonuçlar alıyorum...

adcon1 ayarlarım doğru mu acaba???

Logan

Programın başında ADCON1=2 yazmışsın. Aşağıdaki tabloya dikkat edecek olursan bu ayar ile RA5, dijital I/O olarak kullanılıyor. Giriş alamamanın sebebi de bu. Gözden kaçırmışım 0x00 yazarsan düzelecektir.

İmza.

burak450

Teşekkür ederim baya zamanını aldım ama yine olmadı voltmetre ile 2.6 volt civarı bişey okuyorum ama  lcd de yazan değerler 110 civarı  sonra daha düşük bi değer bi sonraki turda daha da küçük değerler.Bi terslik vaar ama ne olduğunu bende anlamadım :( Normalde 130-140 gibi değerler görmem gerek...

Logan

2.6 v okuduğun yer RA5 bacağımı yoksa başka bir noktamı? Ayrıca eğer hiçbir şekilde sorun çözülmüyorsa, aynı program içerisinde sadece analog bacaktan veriyi okuyup lcd'ye gönderen basit bit program yaz. O zaman sorunun donanımda mı yoksa yazılımda mı olduğunu daha net anlarız. RA5 bacağının atamasını da INPUT komutuyla değil, direk tris registerinden yap.
İmza.

burak450

bu programı yazdım fakat 95 ten başladı ve 100 110 125 150 161 180 die sürekli artan değerler alıyorum sanırım kodda bi hata var
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 0
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 5
DEFINE LCD_BITS  4
DEFINE LCD_LINES 2
DEFINE OSC 4                                                                       
DEFINE ADC_BITS     8       'A/D çevirim sonucu kaç bit olacak
DEFINE ADC_CLOCK  3       'Clock kaynağı (3=rc)
DEFINE ADC_SAMPLEUS 100
SYMBOL VERI=PORTA.5
deneme var byte
ADCON1=0
TRISA=%11111111
basla:
LCDOUT $FE,1 
adcin veri,deneme
LCDOUT $fe,2,#deneme," "
pause 3000
goto basla

end

burak450

bunu yazınca düzeldi  :)

deneme var byte
ADCON1=0
trisa.5=1
CMCON=7
basla:
LCDOUT $FE,1
adcin 4,deneme
LCDOUT $fe,2,#deneme," "
pause 3000
goto basla