CCS C de pwm ile servo kontrolü

yok olur mu ya dağlar kadar fark fark :D bak açıklanmış hali diyorsun :D
kafam da tasarladığıma göre max 5 servo kullanacağım. yapacaz bi şekilde
 
çok sağolun işime yarayacak mantığı çözüp programı yazmam gerek takıldığım yer olursa bu başlıkdan devam edeceğim.
 
burada ben anlatmıştım zaten nasıl olacağını.
adc okuma için adc_read() ı kullanarak 0-255 arasındaki veriyi almış olacaktın.
daha sonra bu veriyi 0.6 ile 2.6 arasında indirgemek için bir formül türetecektin. yani 0.6 ve 2.6 dediğim, ms olarak değerlerdi. buna da us olarak 600us ve 2600 us diyebilirdin.

bu aralıkta değer elde etmek için de analog değerini şu şekilde formülize edebilirdin en basitinden,

a = ( potval * 10 + 600 );

potval dediğim, ölçülen analog değer, a dediğim ise us cinsinden görev periyodu oluyor. burada deier, 600us ile 3150 arasında oluyordu. sen de onu

IF (a > 2600)
{
a = 2600;
}

bu şekilde kontrol ettirip maksimum değerini 2600 us olarak sabitleyebilirdin. sonuç, 600us ile 2600us arasında değer olurdu. ve toplam periyodu 20ms=20000us olarak belirleyince, a değeri kadar ( delay_us ile ) 1, periyot-a değeri kadar da 0 gönderebilirdin. bunu da yukarıda arkadaşların söylediği gibi mesela 50 defa gönderebilirdin, o da şöyle olurdu. ( mesela PORTA.0 çıkışımız olsun )

for(i=0; i<=50; i++){
output_high (PIN_A0);
delay_us (a);
output_low (PIN_A0);
delay_us (periyot - a);
}

böylece istenen işlem gerçekleşmiş olurdu ve pot'un değerine göre işlem yapılırdı. tabi formül daha da iyi hale getirilebilinir ama basit olarak bu şekilde kullanmıştım ben.

anlattığım şey de buydu yukarıda. bu kadar da zor değil.

Berkan Hocam
CCS C de int8 den buyuk toplamlar için (int16) parantezi kullanmanız lazım.
a = ( (int16)((int16)potval * 10) + 600 );
dogrusu bu şekilde değil mi? Hatta Ram sıkıntısı yoksa potvalla onu ayri bir değişkende çarpın, CCS C de acayip hatalar çıkar.

carpim=(int16)potval*10;
a=(int16)carpim+600; gibi .

Yaşadım çok ugrastırdı , uyarmak istedim. Kolay gelsin...
 

Forum istatistikleri

Konular
128,126
Mesajlar
915,253
Kullanıcılar
449,841
Son üye
nazoyata

Yeni konular

Geri
Üst