Pic 16f877A için AN0 ve AN1 in kullanılması

Başlatan since1990, 14 Mart 2011, 20:20:46

since1990

Herkese iyi çalışmalar,
pic 16f877A nın 2 adet analog girişini aynı anda yada ayrı  ayrı nasıl okuyabilirim?
Teşekkürler...
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk

Erol YILMAZ

Önce AN0 seçersin okursun,
Daha sonra AN1 seçersin yine okursun...

Örnek kodlarında olması lazım buna benzer şeyler...



Mucit23

ADC kullanımı datasheetinde ayrıntılı olarak açıklanmış. Kaç kanal ADC kullanılacağı ADCON1 registeri ile ayarlanır. ADCON1 registerinin ilk 3 biti ile hangi kanal ayarları yapılır.
Aşağıdaki resim ayrıntılı bilgi verecektir.
[IMG]http://img405.imageshack.us/img405/2899/adszkjpn.png[/img]

Uploaded with ImageShack.us
Şimdi sana iki adet ADC kanalı lazım. Şemaya baktığımızda Bize en uygun 6. satır olarak görünüyor. ADCON1 registerinin ilk 3 biti 0101 olarak ayarlanması gerekir. Bu şekilde AN0 ve AN1 girişlerini analog olarak kullanabiliriz. Fakat bu şekilde ayarlama yaptığımız zaman AN3 Vref+ olarak ayarlanmış oluyor. Şemaya baktımda sadece iki pini adc olarak kullanamıyoruz. Öyle bir seçenek yok. Ama RA3 pini boşta kullanılmıyor ise sorun olmaz. Bu pini 10K dirençle 5 volt'a bağlayarak yine adc okuma işlemi yaparsın.

Okuma işlemini nasıl yapacağına gelince hangi dili kullanıyorsun bilmiyorum ama pic basicde Şöyledir.
ADC okuma komutu şöyledir. 
"ADCIN 0,HAM" kodun açlımı şöyledir. AN0 kanalından okuma yapıp okuduğu değeri HAM değişkenine yükler. Buradaki 0 kanalı temsil ediyor. 0 yerine 1 yazarsak 1. kanaldan, 3 yazarsak 3. kanaldan, 7 yazarsak 7. akanldan okuma yapılır. Her seferde sadece 1 kanaldan okuma yapılacağı için sen iki defa okuma işlemi yapmalısın.
"ADCIN 0,HAM"
"ADCIN 1,HAM1"
Bu Şekilde 0. kanalın adc bilgisini ham değişkenine, 1. kanalı ham1 değişkenine yerleştirirsin. Diğer derleyicilerdede hemen hemen böyledir.

izturk

setup_adc(adc_clock_div_32);
setup_adc_ports(AN0_AN1_AN3);       //ayarlar

set_adc_channel(0);
delay_us(20);
degisgen1=read_adc();

set_adc_channel(1);
delay_us(20);
degisgen2=read_adc();               //okuma



not: setup_adc_ports(); burada parantez içine yazabileceklerini 16f877.h dosyasının içinde görebilirsin.





since1990

Çok teşekkürler tam bende araştırdım buldum
Alıntı Yap
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#include <LCD.c>


void main()
{  float value[2];
   lcd_init();
   delay_us(10);
   printf(lcd_putc,"Giris1:\nGiris2:");
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_adc_ports(ALL_ANALOG);
while (1)
  {
   set_adc_channel(0);
      delay_us(100);
    value[0]=read_adc();
   set_adc_channel(1);
      delay_us(100);
    value[1]=read_adc();
lcd_gotoxy(9,1);
printf(lcd_putc,"%f",value[0]);
lcd_gotoxy(9,2);
printf(lcd_putc,"%f",value[1]);
   }
    }
yazıyordum siz yazdınız...
Herkesekolay gelsin...
"Dinlenmemek üzere yola çıkanlar asla yorulmazlar. Türk gençliği, gayeye, idealizme durmadan ve yorulmadan yürüyecektir. Bütün ümidim gençliktedir." Mustafa Kemal Atatürk