adc ile multi servo kontrolü

Başlatan maeshlmaent, 10 Mart 2016, 02:46:03

maeshlmaent

Arkadaşlar 5 adet pot kullanarak 5 adet servoyu kontrol etmek istiyorum ve bütün potlar çevrildiğinde bütün servoların aynı anda dönmesinide istiyorum. sağdan soldan okuyarak araştırarak aşağıdaki kodu yazabildim ve bu kodla devre çalışmıyor rica etsem yazdığım kodu incelermisiniz?

#include <16f877.h>
#device ADC=10
#fuses HS,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=4000000)

long int giris1,giris2,giris3,giris4,giris5, bekle1,bekle2,bekle3,bekle4,bekle5, cikis1,cikis2,cikis3,cikis4,cikis5;

void main ()
{
   setup_psp(PSP_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_CCP1(CCP_OFF);
   setup_CCP2(CCP_OFF);
   setup_adc_ports(All_analog);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(All_analog);
  
   delay_us(20);
   while(1)
   {
      giris1=read_adc();
      cikis1=((giris1*1.76)+600);
      bekle1=(20000-cikis1);
      output_high(pin_b0);
      delay_us(cikis1);
      output_low(pin_b0);
      delay_us(bekle1); 
      
      giris2=read_adc();
      cikis2=((giris2*1.76)+600);
      bekle2=(20000-cikis2);
      output_high(pin_b1);
      delay_us(cikis2);
      output_low(pin_b1);
      delay_us(bekle2);
      
      giris3=read_adc();
      cikis3=((giris3*1.76)+600);
      bekle3=(20000-cikis3);
      output_high(pin_b2);
      delay_us(cikis3);
      output_low(pin_b2);
      delay_us(bekle3);
      
      giris4=read_adc();
      cikis4=((giris4*1.76)+600);
      bekle4=(20000-cikis4);
      output_high(pin_b3);
      delay_us(cikis4);
      output_low(pin_b3);
      delay_us(bekle4);
      
      giris5=read_adc();
      cikis5=((giris5*1.76)+600);
      bekle5=(20000-cikis5);
      output_high(pin_b4);
      delay_us(cikis5);
      output_low(pin_b4);
      delay_us(bekle5);
   }
}

ferit06

#1
 Bir soru sorayım;

giris1=read_adc();  dediğinizde hangi adc kanalının ( 8 adet adc kanalı var)okunması gerektiğini PIC16F877 biliyormu?

adc okuma ile ilgili olarak burayı incele...
http://ccspic.com/ccs-c-ile-adc-uygulamasi/

diğer kısımlara  sonra bakarsın.


maeshlmaent

#2
      set_adc_channel(1)
      giris1=read_adc();
      cikis1=((giris1*1.76)+600);
      bekle1=(20000-cikis1);
      output_high(pin_b0);
      delay_us(cikis1);
      output_low(pin_b0);
      delay_us(bekle1);   

şeklinde yapmam gerekiyor anladığım kadarıyla dediğiniz gibi olması için . peki Döngü dışındaki set_adc_channel(All_analog); kodu gereklimi zaten döngü içerisinde hepsini aktif edeceksek. Başka hangi hataları yapmışım ?