analog girişlerin okunması ve karşılaştırma

Başlatan ican43, 06 Nisan 2012, 10:59:24

ican43

Arkadaşlar öncelikle böyle bir forum oluşturanlar için herkese teşekkür ederim. Ben lekktrik öğretmeni ismail CAN;pic ile uğraşmaya başlayalı az bir zaman oldu, yardımcı olursanız çok sevinirim. Uygulamamda PİC16f877 RA1,RA2 girişlerine bağlanan LDR veya fotodiyot değişimlerini algılayıp(gerilim değişimlerini) karşılaştırarak çıkışlarındaki ledlerin yakılmasını istiyorum. Girişlerden birisinin algılanıp değişimini yaptık ama ikinci girisin algılanmasını yapamdım.Arkadaşın birine sordum program files içindeki devices içinde 16f877 ye ait bilgilerde analog girişleri aç dedi ama anlamadım.Program aşagıda verildi, ama daha iyi varsa veya yanlışlarımı yazınız.
//analog iki girişin okunup karsılaştırılması
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT
#use delay(clock=4000000)
#byte port_a=5
#byte port_b=6
int a;
float sonuc;
void main()
{
   set_tris_a(0xff);
   set_tris_b(0x00);
   setup_adc_ports(AN0,);
   setup_adc(ADC_CLOCK_INTERNAL);
   while(1)
   {
   a=read_adc();
      delay_ms(100);
      sonuc=a*(5.0/256);
      sonuc=(pin_a1);
      sonuc=(pin_a2);
   port_b=read_adc();
   if((input(pin_a1))>=(input(pin_a2)))
   {
   output_b(1);
   delay_ms(100);
   }
   else if((input(pin_a1))<=(input(pin_a2)))
   {
   output_b(0);
   delay_ms(100);
   }
   else
   {
   output_b(0x00);
   delay_ms(100);
   }
   }
}

pax

programınızda eksiklikler var öncelikle
setup_adc_ports(AN0,); olan kısmı  setup_adc_ports(AN0_AN1_AN3); olarak değiştirin. analog
girişleriniz A0 ve A1 pinleri olmalı  ......
diğer analog okumayla ilgili değişiklikler de aşağıdaki gibi olmalı
......
int kanal ;
.....
void main()
{
setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_INTERNAL);
......
set_tris_a(0xff);// a portunun tüm binleri giriş
set_tris_b(0x00);//b portunun tüm pinleri çıkış
while(1)
{
kanal=0     
set_adc_channel(kanal); // 1. giriş okunuyor
          delay_us(20);
          a= read_adc();
  sonuc=a*(5.0/256);
      sonuc=(pin_..?);// pin a1 analog giriş yapıldı başka pin seçilmeli b portundan bir pin seçebilirsiniz
      sonuc=(pin_..?);b porundan bir pin seçin
kanal=1
      set_adc_channel(kanal); // 2. giriş okunuyor
          delay_us(20);
          b= read_adc();

.......

}
}

ican43

Allah razı olsun, yardımlarınızdan dolayı..dediğiniz şekilde değiştirdim ve yazdım ama set_adc_channel(kanal);  ifadesinde hata veriyor. Biraz daha yardımcı olabilirmisiniz ,acaba analog girişlerin 16f877 dosyasında değişiklikmi olması gerekiyor..sağolun

serhat1990

CCS C ile ilgili örnek projelerim linktedir. ADC işlemlerine oradan bakabilirsin iyi çalışmalar. https://www.picproje.org/index.php/topic,38490.0.html

pax

düzenledğiniz kodu tekrar gönderirseniz yardımcı olabilirim . serhat1990 ın gönderdiği örnekler olukça güzel onları da incelerseniz sizin için faydalı olur .

ican43

Allah razı olsun hemen sorularımı cevaplıyorsunuz. Gerçekten bu pic programını az-çok öğrenmek istiyorum. Emeğiniz çokteşekkürler..yeni kodladığımı göndereyim bazı yerleri yanlış olabilir sağolun
#include <16f877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT
#use delay(clock=4000000)
#byte port_a=5
#byte port_b=6
int a,b;
int kanal;
float sonuc;
void main()
{
   setup_adc_ports(AN0_AN1_AN3);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_tris_a(0xff);
   set_tris_b(0x00);
   while(1)
   {
   kanal=0
   set_adc_channel(kanal);
   delay_us(20);
   a=read_adc();
      sonuc=a*(5.0/256);
      sonuc=(pin_a0);
      sonuc=(pin_a1);
      port_b=read_adc();
   kanal=1
   set_adc_channel(kanal);
   delay_us(20);
   b=read_adc();
   sonuc=b*(5.0/256);
   sonuc=(pin_a0);
   sonuc=(pin_a1);
   port_b=read_adc();
   if((input(pin_a0))>=(input(pin_a1)))
   {
   output_b(0x01);
   delay_ms(100);
   }
   else if((input(pin_a0))<=(input(pin_a1)))
   {
   output_b(0x02);
   delay_ms(100);
   }
   else
   {
   output_b(0x00);
   delay_ms(100);
   }
   }
}

ican43

Allah razı olsun hemen sorularımı cevaplıyorsunuz. Gerçekten bu pic programını az-çok öğrenmek istiyorum. Emeğiniz çokteşekkürler..yeni kodladığımı göndermiştim.Cevap gelmedi acaba yardımcı olurmusunuz

pax

 
sonuc=(pin_a0);
      sonuc=(pin_a1);
      port_b=read_adc();
bu komutlarınız da hata var burada ne yapmak istediniz.
bence serdar çiçek in ccs c ile 16f877 programlama kitabı var . bu kitaptan edinip orada daha basit uygulamalarla işe başlarsanız daha iyi olur. temel noktalarda eksiklikleriniz var.