16f819 ADC dönüşüm yapılan bir devre (eksiklikler var YARDIM)

hosiminh

Üye
Katılım
16 Ara 2009
Mesajlar
18
Puanları
1
Yaş
39
KODU:
Kod:
#include <16f819.h>
#device ADC=8
#fuses INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)

unsigned long int bilgi;
float adc_value;

void main ()
{
 
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_ccp1(ccp_off);
  
  
   set_tris_b(0x00);
   set_tris_a(0x0F);
   output_b(0x00);
 
   setup_adc_ports(AN0);
   setup_adc_ports(ADC_CLOCK_INTERNAL);
  
    while(TRUE)
    {
     set_adc_channel(0);
     delay_us(20);
     bilgi=read_adc();
     adc_value=0.01953125*bilgi;
    
     if((adc_value>=156))
      {
       output_bit(pin_b0,0);
      }
    
       
        if((adc_value<5)&&(adc_value>=3))
         {
          output_bit(pin_b0,1);
          delay_ms(500);
          output_bit(pin_b0,0);
          delay_ms(500);
         }
        
          
           if((adc_value<3)&&(adc_value>=2.5))
            {
             output_bit(pin_b0,1);
             delay_ms(250);
             output_bit(pin_b0,0);
             delay_ms(250);
            }
           
       
             if((adc_value<2.5))
             {
             output_bit(pin_b0,1);
             }
           
    }
}

PROTEUS DESING:

yukardaki ccs c ile kodunu ve altta proteus çizimini verdiğim devrede voltaj değeri düştükçe b0 ucundaki LED imin hızlanarak blink yapmasını analog girişi sıfır gördüğünde ise yanık kalmasını istiyorum. Yazdığım c kodum kusursuz bir şekilde derleniyor fakat ne proteus da ne de gerçek hayatta yapmak istediğim işe devrem tepki bile vermiyor. Ve proteus da şöyle bir uyarı veya hata notu diyelim karşıma geliyor

HATA: [PIC16 ADC ] PC=0x0158. ADC conversion clock period [5e-7] is less than min TAd=1.6us and is possibily invalid for device clock frequency

bu hata kodunun neden geldiği ile ilgili bulabildiğim bir fransız sitesinden olayın bir frekans uyumsuzluğundan kaynaklandığı internal clock kullanıldığında geçtiğini falan yazmışlar yarım yamalak fransızcamla anladığım kadarıyla fakat işin kötü tarafı ben zaten hep pic lerde internal clock kullanıyorum.

Kodlarımda mı bir hata var bu uygulamayı neden gerçekleştiremiyorum. Yardımlarınıza ihtiyacım var bana bir fikir verebilirseniz veya devreyi çalıştırmayı başarabilirseniz paylaşmanızı rica ediyorum dünyada da demek ki bu tip sorunlarda sıkışan arkadaşlar mevcut en azından bu konuda sıkıntı çekmiş arkadaşlar da sıkıntıları paylaşırlarsa bir fikir alışverişi olabilir hepinize sonsuz saygılar
iyi çalışmalar...
 
16f819'da osccon register'ına istenen saat frekansına uygun olarak değer yazmak gerekiyordu diye hatırlıyorum. osccon doğru kurulmadıysa mcu 4 mhz'de çalışmıyor olabilir, belki hata da buna bağlıdır(?)
Önce 1 sn aralıkla sadece led yakıp söndürmeyi bir deneyin, bakalım int.osilatör gerçekten 4 mhz'de mi çalışıyor...
 
yok sadece ledi yakıp söndürmüyor da yine aynı hatayı verdi osccon register a bu saat değerini nasıl ve ne şekilde yazbilirim acaba ?
 
4 mhz için aşağıdaki gibi olması lazım

Kod:
#byte osccon = 0x8fh

osccon = 0x60;
 
denedim tyildizak fakat programa kabul bile ettiremedim neresine yazacağız bunu ben ccs c kullanıyorum. başına void main in altına içine nereye yazayım?
 

Forum istatistikleri

Konular
128,407
Mesajlar
917,358
Kullanıcılar
450,313
Son üye
dnihatt1

Yeni konular

Geri
Üst