acemiye yardım lütfen ccs adc sorunu

Başlatan sunar, 22 Nisan 2017, 13:10:03

sunar

merhabalar :) program yazma işinde çok yeniyim hatta bu forumdada yeniyim. simülasyonda çalıştırmak istediğim bir adc yi çalıştıramadım ustalardan yardım bekliyorum. 16f877 nin an0 girişine bir potans bağladım. rb0 pininede bir led bağladım. potanstan zaman ayarı yaparak ledi 0-20 saniye aralıklarla yakıp söndürmek istiyorum. nasıl bir algoritma yapmam gerekiyor?

sadogan

Önce ledi timer kullanarak yak sondur yap




sunar


muhittin_kaplan

Nokta Atışı bir Yardım Yapmış. Led Yakıp Söndürmeden, Buton Kullanmadan, Pullup, PullDown nedir kavrayamadan ADC yi yapmanız sadece "ben uçarım diyerek, uçurumdan atlamanızla" aynı şeydir. belki havada bir müddet durabilirsiniz ama eninde sonunda yere çakılırsınız

zamzam23

başlangıç olarak yazdığınız kodu paylaşır mısın? oradan yardımcı olalım.

sadogan

Alıntı yapılan: sunar - 22 Nisan 2017, 16:15:37
çok yardımcı oldunuz teşekkürler
Dalga geçtiğimi sanıyorsanız yanılıyorsunuz.
Bahisi geçen konu, timer ile süresi ayarlana bilen led yak söndür ile çok ilgili.
Cevabınızdan anladığım bunla ilğili bir sıkıntınız yok.
Bu kodla  an0 bağladığınız potu okuyabilirsiniz.
void main()
{
   unsigned int16 adc_val;
   set_tris_a(0b00000001); // Adc int kodları
   setup_adc_ports(AN0);
   setup_adc(ADC_CLOCK_INTERNAL);
   while(true)
   {
      set_adc_channel(0); // an0 secildi
      delay_us(10);        
      adc_val = read_adc(); // adc içerği adc_val değişkeninde
   }
}

 



sunar

#6
arkadaşlar yazdığım program bu. ben tabiki uçmayı öğrenmeden uçurumdan atlamak gibi bir niyetim yok. sadece bu programın manuel çalışma yazan kısmına yukarıda belirttiğim işlemi yaptırmaya çalışıyorum ama takip etmem gereken yol haritasını belirleyemedim. sizdende ricam yukarıdaki işlemi yaptırabilmem için nasıl bir yol takip etmem gerekiyorsa onu bana söylemenizi istiyorum.manuel çalışma kısmında tam olarak yapmak istediğim şöyle: b portunda bir led bağlı olacak a portunda bir buton ve an0 ucunda bir potans. potans 0-20 saniye zaman aralığında ayar yapacak. potansla ayarlanan zaman kadar led sönük kalacak ve zaman dolunca led yanacak. a portuna bağlı butona basınca led tekrar sönüp potansta ayarlı olan zamanı tekrar saymaya başlıycak zaman dolunca tekrar yanacak. bu döngüyü sağlamak için nasıl bir yol haritası izlemem gerekiyor onu bilemedim. yani sadece adc ile bu iş çözülürmü yoksa timer,interupt gibi fonksiyonlarımı kullanmak gerekir. yardımlarınız için teşekkür ederim.




#include <mainv4.h>

#use fast_io(a)
#use fast_io(b)
#define onof    PIN_a3
#define automanuel    PIN_a4
#define led    PIN_B6
//#define sens1  pin_a1

unsigned short auto_mod=1,start=0;

void main()
{
setup_adc_ports(AN0);
     
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

set_tris_a(0b1111111);   //a portu giriş yapıldı
set_tris_b(0x00);         //portb çıkış yapıldı
output_a(0x00);//A portu ilk değerler sıfırlanıyo
output_b(0x00);//B portu ilk değerler sıfırlanıyo

while(1)
 
{
if(input(onof)==1)            // onof komutu Tusa bastigin an !
{
delay_ms(50);
if(input(onof)==1)            // onof komutu Tusa bastigin an !
   { 
   if(start==1) start=0; else start=1;
  
   while(input(onof)==1)
   {delay_ms(10);}   // Tusu birakincaya kadar bekle !  }
   }
}

if(input(automanuel)==1)            // oto man komutu Tusa bastigin an !
  {delay_ms(50);
  if(input(automanuel)==1)
      {
        if(auto_mod==1) auto_mod=0; else auto_mod=1;   
     while(input(automanuel)==1)
           {delay_ms(10);}         // Tusu birakincaya kadar bekle ! }
      }      
   }

if(start==1)
    {output_high(pin_b7);
   
      if(auto_mod==1)
         {
             output_high(led);   //auto çalışma

            if(input(pin_a1))//herhangi bir zamanda birinci butona basıldı

                {
                    output_high(pin_b0);//birinci ledi yak
                    output_low(pin_b7); //ikinci ledi södür
                     delay_ms(100);
                }

            if(input(pin_a2))// şayet 2. butona basılırsa
                {
                 output_low(pin_b0); // 1. ledi söndür
                }
        }
   else
           {
           output_low(led); //manuel çalışma
           }
                  
                  
                  
                  
     }
else {output_low(pin_b7);output_low(pin_b6); output_low(pin_b0);  }
}
}

mehmet

Olan olmuştur,
olacak olan da olmuştur.
Olacak bir şey yoktur.
---------------------------------------------
http://www.mehmetbilgi.net.tr

harti212

#8
Program a 20 saniyelik boş çevrim eklemelisin, artık hangi portta ise, sonra 3 saniye veyya istediğin kadar bı yanma süresi ver sonra return.
Pot a gerek yok.
Potla  süreceksen akım değerlerini tanımla.