Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

ADC port ce kanal seçimi

Başlatan drkutt, 06 Nisan 2011, 03:17:20

drkutt

iyi günler arkadaşlar...
pic 16f688 kullanıyorum.sadece RA4 bacagını analog giriş için kullanıcam bunun için;
set_adc_channel( ? )
setup_adc_ports( ? ) parantez içlerine ne yazmam lazım??

fahri-

include ettiğin ilgili işlemcinin kütüphanesinde tanımlama vardır.  oradan bakabilirsiniz.

GreeN

// Constants used in SETUP_ADC_PORTS() are:
// First argument:
// OR together desired pins
#define NO_ANALOGS      0           // None
#define ALL_ANALOG      0xFFFFFFFF  // All
#define sAN0      0x00000001 //| A1
#define sAN1      0x00000002 //| A2
#define sAN2      0x00000004 //| B0
#define sAN3      0x00000008 //| B1
#define sAN4      0x00000010 //| B2
#define sAN5      0x00000020 //| 3
#define sAN6      0x00000040 //| B15
#define sAN7      0x00000080 //| B13
#define sAN8      0x00000100 //| B14
#define sAN9      0x00000200 //| 12


drkutt fahri bundan bahsediyor.

örneğin RA4 'te AN3 anagol gişirişi varsa ;

setup_adc_ports(sAN3);
set_adc_channel( 3 );



örneğin;
setup_adc_ports(sAN3);
set_adc_channel( 3 );
a = read_adc();
setup_adc( ADC_OFF );
printf("\n\r%d ",a);
Terörü Lanetliyoruz.

drkutt

arkadaşlar dediginiz kısma baktım. programı debug ettigim zaman. ekrana "Access violation at address ...." gibi bir uyarı çıkıyor. proteusta  çalışmıyor.

yazdıgım program şu;
AR4'den analog bilgi alınacak 9vluk mu 1.5 voltlukmu pil var if else ile bu seçilecek. belirli voltajlar için belirli kademeler var. 10 tane led ile pilin voltaj degeri gösterilecek..

#include <16f688.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=8  // 10 bitlik ADC kullanılacağı belirtiliyor.
#use delay (clock=4000000)
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
#use fast_io(a) //Port yönlendirme komutları A portu için geçerli


unsigned long int giris=0 ; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
float voltaj=0 ;            // ondalıklı tipte voltaj isminde değişken tanıtılıyor


void main ()
{
   set_tris_c(0x00);  // C portu komple çıkış
   set_tris_a(0x10);  // RA4 giriş diger portlar çıkış
   output_c(0x00);    // C portu çıkışını sıfırla
   basla:
   setup_adc_ports(sAN3);
   set_adc_channel(3);
   setup_adc(adc_clock_internal);
   delay_ms(500) ;
   giris=read_adc();      // okunan deger giris degişkenine aktarılıyor
   delay_ms(500) ;
   voltaj=0.0048828125*giris;
   voltaj=voltaj*3.3;     // digitale çevrilen sinyalin voltaj karşılıgı hesaplandı
   if(voltaj>=8.5)      //ise 9vluk pil baglanmıştır
   {
   if((voltaj>=8.5)&&(voltaj<8.6))
   output_high(PIN_A5);
   else if((voltaj>=8.6)&&(voltaj<8.7))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   }
   else if((voltaj>=8.7)&&(voltaj<8.8))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   }
   else if((voltaj>=8.8)&&(voltaj<8.9))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   }
   else if((voltaj>=8.9)&&(voltaj<9.0))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   }
   else if((voltaj>=9.0)&&(voltaj<9.1))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   }
     else if((voltaj>=9.1)&&(voltaj<9.2))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   }
      else if((voltaj>=9.2)&&(voltaj<9.3))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   }
      else if((voltaj>=9.3)&&(voltaj<9.4))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   output_high(PIN_A2);
   }
     else if(voltaj>=9.4)
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   output_high(PIN_A2);
   output_high(PIN_A1);
   }
   }
   else if(voltaj<2.0)     // ise 1.5 voltluk pil baglanmıştır
   {
   if((voltaj>=1.20)&&(voltaj<1.23))
   output_high(PIN_A5);
   else if((voltaj>=1.23)&&(voltaj<1.26))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   }
   else if((voltaj>=1.26)&&(voltaj<1.29))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   }
   else if((voltaj>=1.29)&&(voltaj<1.32))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   }
   else if((voltaj>=1.32)&&(voltaj<1.35))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   }
   else if((voltaj>=1.35)&&(voltaj<1.38))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   }
     else if((voltaj>=1.38)&&(voltaj<1.41))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   }
      else if((voltaj>=1.41)&&(voltaj<1.44))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   }
      else if((voltaj>=1.44)&&(voltaj<1.47))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   output_high(PIN_A2);
   }
     else if(voltaj>=1.47)
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   output_high(PIN_A2);
   output_high(PIN_A1);
   }
   }
   goto basla;
}

GreeN

önce bunu düzelt.#device ADC=10

voltaj=0.0048828125*giris;

bu satırı  işletemezsin. tavsiyem şudur ;


muhtemelen 9 volt pili gerilim bölücü dirençler ile giriyorsun.
kodunda en yüksek gerilim 9.4 volt.  bunu direk pic'e giremezsin. 10 volt üzerinden konuşalım.

Şemaya dikkat et. Bu şemeya göre 10 volt a karşılık 1024 değeri alacağız.
9.6 için 983
9.4 için 962
..
..
1.5 için 153 vs. bu değerler üzerinde işlem yaparsan daha güzel olur.

aşağıdaki kada bakarsan ne demek istediğimi anlarsın.

#include <16f688.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.

#device ADC=10  // 10 bitlik ADC kullanılacağı belirtiliyor.
#use delay (clock=4000000)
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
#include "float.h"
#include "math.h"
unsigned long int giris=0 ; // İşaretsiz 16 bitlik tam sayı tipinde değişken tanımlanıyor
int16 voltaj=0 ;            // ondalıklı tipte voltaj isminde değişken tanıtılıyor


void main ()
{
   set_tris_c(0x00);  // C portu komple çıkış
   set_tris_a(0x10);  // RA4 giriş diger portlar çıkış
   output_c(0x00);    // C portu çıkışını sıfırla
   basla:
   setup_adc_ports(sAN3);
   set_adc_channel(3);
   setup_adc(adc_clock_internal);
   delay_ms(500) ;
   giris=read_adc();      // okunan deger giris degişkenine aktarılıyor
   delay_ms(500) ;
   voltaj=giris;
  // voltaj=voltaj;     // digitale çevrilen sinyalin voltaj karşılıgı hesaplandı
   if(voltaj>=870)      //ise 9vluk pil baglanmıştır
   {
   if((voltaj>=870)&&(voltaj<881))
   output_high(PIN_A5);
   else if((voltaj>=881)&&(voltaj<891))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   }
   else if((voltaj>=891)&&(voltaj<901))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   }
   else if((voltaj>=901)&&(voltaj<911))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   }
   else if((voltaj>=911)&&(voltaj<922))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   }
   else if((voltaj>=922)&&(voltaj<932))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   }
     else if((voltaj>=932)&&(voltaj<942))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   }
      else if((voltaj>=942)&&(voltaj<952))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   }
      else if((voltaj>=952)&&(voltaj<963))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   output_high(PIN_A2);
   }
     else if(voltaj>=963)
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   output_high(PIN_A2);
   output_high(PIN_A1);
   }
   }
   else if(voltaj<205)     // ise 1.5 voltluk pil baglanmıştır
   {
   if((voltaj>=123)&&(voltaj<126))
   output_high(PIN_A5);
   else if((voltaj>=126)&&(voltaj<129))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   }
   else if((voltaj>=129)&&(voltaj<132))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   }
   else if((voltaj>=132)&&(voltaj<135))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   }
   else if((voltaj>=135)&&(voltaj<138))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   }
   else if((voltaj>=138)&&(voltaj<141))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   }
     else if((voltaj>=141)&&(voltaj<144))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   }
      else if((voltaj>=144)&&(voltaj<147))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   }
      else if((voltaj>=147)&&(voltaj<150))
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   output_high(PIN_A2);
   }
     else if(voltaj>=150)
   {
   output_high(PIN_A5);
   output_high(PIN_A0);
   output_high(PIN_C5);
   output_high(PIN_C4);
   output_high(PIN_C3);
   output_high(PIN_C2);
   output_high(PIN_C1);
   output_high(PIN_C0);
   output_high(PIN_A2);
   output_high(PIN_A1);
   }
   }
   goto basla;
}



Terörü Lanetliyoruz.