CCS C de ADC uygulaması problem.

ilker

Üye
Katılım
26 Eyl 2006
Mesajlar
73
Puanları
1
Yaş
40
merhabağlar
ben bir konuda bilgi almak istiyorum.yardımcı olabilirseniz sevinirim.
be ccs c de program yazıyorum ve sorum adc uygulamasından; ra0 ucundan analog sinyal verip, dijitale çevirip, B portunun b1 ucuna 1-0 çıkışı kullanırken ra1 ucundan da başka bir analog voltaj verip yine B portunun b1 ucunu kontrol edebilirmiyim. Yani 2 analog sinyal ile Bportunun 1 ucunu kontrol etmek istiyorum.-----atıyorum A0 girişinde 1.97 ile 4V. arası voltajda b1 i high yap ; A1 girişinde 2 ile 3V.arasında bir voltaj varsa low yap demek istiyorum----
/************************************************** ****
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,NODEBUG,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);

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

while (true)
{

bilgi=read_adc();
voltaj=0.0048828125*bilgi;
delay_us(100);
if ((voltaj>=1.97) && (voltaj<=4))

{
output_high(PIN_B0);

TEŞEKKÜRLER...
otomasyon
 
setup_adc_ports(RA0_ANALOG);
setup_adc(adc_clock_internal);
set_adc_channel(0);

Yazdığın program sadece RA0'dan analog değer almanı sağlar. RA1'den de analog değer okumak istiyorsan ayarlarını değiştirmelisin.

/************************************************** ****
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)

unsigned long int bilgi1=0,bilgi2=0;
float voltaj1=0,voltaj2=0;

/********* 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_a(0xFF); // A portu komple giriş
set_tris_b(0x00); // B portu komple çıkış
output_b(0x00);

setup_adc_ports( AN0_AN1);
setup_adc(adc_clock_internal);

while (true)
{
set_adc_channel( 0 );
bilgi1=read_adc();
delay_us(100);
voltaj1=0.0048828125*bilgi1;

if ((voltaj1>=1.97) && (voltaj1<=4))
{
output_high(PIN_B1);
}

set_adc_channel( 1 );
bilgi2=read_adc();
delay_us(100);
voltaj2=0.0048828125*bilgi2;

if ((voltaj2>=2) && (voltaj2<=3))
{
output_low(PIN_B1);
}

}

}
 
proteus üzerinde sorunsuz çalışan 18f4550 adc uygulaması board üzerinde sorunlu çalışıyor.

aynı uygulamayı 18f452 ye geçirip board üzerinde ve proteusda deniyorum son derece stabil çalışıyor.
 
Gkocak arkadaşın yazdığı doğru ama if şartlarının ikiside doğru olduğunda b1 sürekli 1-0 olmaya başlar
Bu sizin için onemsizmi.
 
s.a arkadaşlar benimde adc çalışmıyor lcd ve led de problem yok bord üstünde pot ayarlı adc pın e takınca sürekli aynı değeri gösteriyo

#include <16f877.h>
#device ADC=10
#fuses XT,NOWRT,NOPROTECT,NOWDT,NOLVP,NOCPD,NODEBUG,NOPUT,NOBROWNOUT
#use delay(clock=4M)
#use fast_io(a)
#define use_portb_lcd TRUE
#include <benim_LCD.c>


int dijital;
float sicaklik,Mvolt;


void main()
{
set_tris_a(0x01); //ra0 aktif
setup_adc(adc_clock_div_32);
setup_adc_ports(AN0);
lcd_hazirla();
set_adc_channel(0);
delay_us(50);
printf(lcd_veri,"\fSicaklik=");


while(1)
{
dijital=read_adc();
Mvolt=(0.0048828412*dijital)*1000;
sicaklik=(Mvolt/10)+2;


imlec(10,1);
printf(lcd_veri,"%f%cC",sicaklik,223);
imlec(1,2);
printf(lcd_veri,"Mvolt=%f",Mvolt);
delay_ms(1000);
}
}
 
set_adc_channel(0); komutunu while(1) düngüsünün içinde dijital = read_adc(); kodundan önce kullanarak dene
 

Forum istatistikleri

Konular
130,109
Mesajlar
933,199
Kullanıcılar
453,169
Son üye
Kevsert

Yeni konular

Geri
Üst