Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

CCS ile servo

Başlatan Atima, 19 Ekim 2021, 14:28:09

Atima

Pot ile servo motor sürmek istiyorum. 16f877a ve ccs diliyle.
denediğim kod aşağıdadır.

#include<16f877a.h>
#device adc=8 
#use delay(clock=4m)
#fuses XT


int8 i,data; 
int deger;

#int_timer0
void timer0()
{ 
   i++; 
   if(i==0) 
   output_high(pin_c1); 
   if(i==data) 
   output_low(pin_c1); 
   SET_TIMER0(238); 
   }
   
void main()
{ 
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_4); 
   SET_TIMER0(238); 
   enable_interrupts(INT_TIMER0); 
   enable_interrupts(GLOBAL); 
   SETUP_ADC(ADC_CLOCK_INTERNAL); 
   SETUP_ADC_PORTS(ALL_ANALOG); 
   output_low(pin_c1); 
   data=0;

   


while(true) 
{ 
   SET_ADC_CHANNEL(0); 
   delay_us(20); 
   deger=read_adc(); 
   data=30.0*deger/255.0; 

 }
   
 }

pottan değeri okuyup timer0 ile pwm üretiyorum, fakat her açı değerini elde edemiyorum.
yardımcı olabilecek var mıdır ?

ertuğrul54

neden yazılımsal pwm üretiyorsun ki 877de pwm çıkışı var onları kullanman daha iyi olmaz mı?

Atima

Daha önce kullanmadım araştırayım, elinizde örnek varsa paylaşabilir misiniz?

tacettin

servo motor kullanımı için 50Hz lik pwm sinyal gereklidir. Bu 50 Hz sinyalin peryodu da 20ms yapar. Bu 20ms peryodun da duty si 1ms ile 2ms arasında olmalıdırki servo çalışsın. sizin timer kesmesi ile oluşturduğunuz pwm in çözünürlüğü az olduğundan her açıyı yakalayamamanız normal. picin donanımsal olarak 50Hz lik sinyal oluşturabilmeniz için kristal değerini 1MHz in altında kullanmanız gerekir.

Atima

Pwm çıkışını ayrı kullanabiliyorum, pottan aldığım analog veriyi ayrı okuyabiliyorum. Fakat ikisini birleştiremedim. Analog veriyi okuyup pwm olarak servoya iletme konusunda yetersizim.

ertuğrul54

set_pwm_duty1(değer); //  adc den geler "değer"

Atima

Alıntı yapılan: ertuğrul54 - 21 Ekim 2021, 15:22:59set_pwm_duty1(değer); //  adc den geler "değer"
Ama yinede hassas sekilde hareket etmiyor. +90 -90 +36 -73 gibi degerlerde hareket ediyor.

Atima

Alıntı yapılan: Atima - 22 Ekim 2021, 09:39:43Ama yinede hassas sekilde hareket etmiyor. +90 -90 +36 -73 gibi degerlerde hareket ediyor.

?

fide

Potdan gelen ADC bilgisi 10 bit yani 0-1024 arası. Pwm 8 bit yani 0-255 arası. Potdan okunan değeri 4e bölüp yazmayı deneyin
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com