Adc problemi...

ilker

Üye
Katılım
26 Eyl 2006
Mesajlar
73
Puanları
1
Yaş
39
Arkadaşlar merhabağlar izin verirseniz bir soru sormak istiyorum. Ben bu işe yeni başlayan biri olarak bazı yardımlAR alarak aşşağıdaki programı yazdım. Teorikte sorun yok ama pratikte problemm, yaşadım. programı yüklediğim pic i deniyorum analog uca belirttiğim sınırlar içindeki voltajı verince 21 nolu pin ve 40 nolu pin arasından vSS ve vDD uçları dışında kalan uçlardan yaklaşık 1,43 vdc civarında voltajlar okuyorum.analog girişi iptal edince çıkış voltajları kayboluyor. böyle garip birşey yapıyor.Acaba diyorum,pic e program yüklerken jumper falan atmam gereken yerler mi var (uygulamalarda kitaplarda bunlardan bahsediliyor mesala port b jumper ı led konumunda olmalı gibi bu konuda da bilgi veren olursa eğer minnettar kalırım nedir bu jumper, nasıl led konumuna alınır mesala) Yada gözden kaçırdığım yada ihmal ettiğim birşey mi var.Yardımcı olursanız sevinirim.Artı kullanmadığım port çıkışlarınıda sıfırladım.
SAĞOLASINIZ...

/************************************************** ****
PIC16F877A ile Analog Voltaj Kesmesi
PIC PROG/DEKA : Port B jumper'ı LED konumunda olmalı
************************************************** *****/

#include <16F877A.h> // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#device ADC=10


// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NO DEBUG,NOCPD

#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.

//#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
//#use fast_io(b)
int i ;

long deger,max,min,bilgi;
float voltaj;

/********* ANA PROGRAM FONKSİYONU********/
void main ( )
{
setup_psp(PSP_DISABLED); // PSP birimi devre dışı
setup_spi(SPI_SS_DISABLED); // SPI birimi devre dışı
setup_timer_1(T1_DISABLED); // T1 zamanlayıcısı devre dışı
setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
setup_CCP1(CCP_OFF); // CCP1 adc(ADC_OFF);birimi devre dışı
setup_CCP2(CCP_OFF); // CCP2 birimi devre dışı


set_tris_b(0x00); // B portu komple çıkış
output_b(0);
set_tris_c(0x00);
output_c(0);
set_tris_d(0x00);
output_d(0);

setup_adc_ports(RA0_ANALOG);
setup_adc(adc_clock_internal);
set_adc_channel(0);

while (true)
{
delay_us(20);
bilgi=read_adc();
voltaj=0.0048828125*bilgi;

if ((voltaj>=2.16) && (voltaj<=3.94))
{
output_high(PIN_B0);
}
else
{
output_low(PIN_B0);
}
if ((voltaj>=1.17) && (voltaj<=1.82))
{
output_high(PIN_B1);
}
else
{
output_low(PIN_B1);
}
}
}
 
deney setinde deniyorsanız bilemiyorum ancak ben bu tarz bir çok devre yaptım. hiçbirinde de sorun yaşamadım.
ayrıca 21-40 arasındaki uçların analog ile ilgili yok ( 16F877'de ). analog uçlar, PORTA'nın olduğu uçlardır ( 16F877'de ).
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…