Step Motoru belirlediğim açı kadar nasıl döndürürüm?

Başlatan DaisysFox, 13 Mart 2022, 02:39:46

DaisysFox

Merhaba arkadaşlar, 16F877A kullanarak hesapladığım değişkene göre step motorumu döndürmek istiyorum fakat başaramadım. Amacım, motoru a değeri(kodda bahsediyorum) kadar döndürmek. Step motor adım açısına göre döndüğü için bu a değerini motorumun adım açısı olan 5.625 e bölerek yaklaşık bir değişken hesapladım. Bu değişkeni bir döngüye aldım ve motoru istediğim kadar adım attırmaya çalıştım fakat olmadı.
Bu kodları istediğimi sağlaması için nasıl yazabilirim? Yardımcı olabilirseniz çok sevinirim :)
Not: Henüz acemiyim :/
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000)
#include <math.h>

#use fast_io(b)

const int tam_adim[]={0x09,0x03,0x06,0x0C}; // Her adım 5.625 derece
int i=0, hiz=400;
int a=30;
int b=0;
int saat = 18;

void main () {

setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

set_tris_b(0x00);
output_b(0x00);

while(TRUE) {

if ((saat >= 6) && (saat<=20) ) { // Bu kısımda istenilen motorun b değişkeni kadar dönmesidir.

   b=a/5.625; // 5.625 step motorun açısıdır. Ondalık olarak değil tam sayı olarak açı olacak.
              // Yani 5 adım atacak. (30/5.625) Yaklaşık olarak tam sayı alıyoruz.
   for( i = 0; i<=b; i++){
   
   if(i==3)
      i=-1;
     
   output_b(tam_adim[i]);
   delay_ms(hiz);
    
   if(i > b)
      i = 0;
      
     // Bu kod ile motor 11.3 derecede kalıyor yani 2 adım atıyor. İstenilen 30 dereceyi sağlaması,
     // yani 5 adım atması.
   }
   
   }
   }
}

fide

Alıntı yapılan: DaisysFox - 13 Mart 2022, 02:39:46
  for( i = 0; i<=b; i++){
  
  if(i==3)
      i=-1;
    
  output_b(tam_adim[i]);
  delay_ms(hiz);
    
  if(i > b)
      i = 0;
      
   

Kod içinde iki yerde sayaç içindeki değişkene müdahale var. Ve bu döngünün kırılmasına/kilitlenmesini sebep oluyor.

4 adımda süreceğiniz için bu şekilde düşündünüz sanırım ama yöntem içindeki kullanım yanlış.
Ccs c de mod alma işlemini hatırlamıyorum ama % yada %% olması gerekir.
Şu şekilde olabilir:
For (i=0, i<b; i++)
{
İf (i %4 ==0)
  Output_b(tam_adim[0];

İf (i %4 ==1)
  Output_b(tam_adim[1];

İf (i %4 ==2)
  Output_b(tam_adim[2];

İf (i %4 ==3)
  Output_b(tam_adim[3];
}

Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

Diğer bir nokta koddan anladığım kadarıyla b portu ilk 4 biti ile l298 türü bir sürücü kullanıyorsunuz.
Step motor son adımı attıktan sonra son enerji verilen sargı enerjili 8larak kalmaya devam edecek. Bu da sargı üzerinden yüksek akım geçmesine sebep olacak. Isınma, deformasyon yada güç kaynağının aşırı yüklenmesi olası sonuçlar.

Bunu multimetre akım kademesinde ölçerek siz de görebilirsiniz.  :du:

A4988 türü hem adımla çalışan hem de akım sınırlama özelliği olan bir çip deneyin.  ::ok  ::ok

Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

fide

İlk post için sonradan farkettim bir bug var. Belki aşılabilir ama durum şu:
Diyelim adım sayınız 35
Mod alma işleminden kalan sayınız 3
Bir turu tamamlanıza 1badım var istediğiniz yere ulaştınız. Sonraki gelen hareket bilgisinde ise 15 adım atacaksınız diyelim. Bu durumda ileri yada geri hareket etseniz de ya 3 ten geri sayacaksınız yada ileri. Eğer saymaya 0dan başlarsanız step motor bu adımı atamayacak ve sonraki birkaç adımda sadece titreyecektir. Bu da adım kaybına ve hatalı harekete sebep olacak.
A4988 bu yüzden daha iyi bir çözüm.
Her birimiz, geride bıraktığımız eserler kadar ölümsüzüz. Evlat gibi, talebe gibi, icatlar gibi...   http://fidenetgaraj.blogspot.com

DaisysFox

Bahsettiğiniz kodun üzerine mod işlemlerinden sonra delay ekleyerek ve for döngüsünün dışında motoru durdurarak istediğim sonucu elde ettim. Sürücü hakkındaki yorumlarınızı da dikkate alarak sürece devam edeceğim. Cevaplarınız için çok teşekkürler :)

DaisysFox

Motoru geri döndürmek için yukarıda @fide 'nin yazmış olduğu kodu aşağıda bulunan koda çevirdim fakat motor 1 adım fazladan atıyor. Bunu düzeltmek için b-1 olarak ayarladığımda sorun çözülüyor fakat b'nin sıfır olduğu durumlarda kod bozuluyor ve motor sonsuz bir şekilde dönmeye başlıyor. Düz mantık yürüterek bu kodu elde ettim fakat motorun fazladan adım atmayacağı ya da b=0 durumunda nasıl bir kod yazmam gerekiyor bulamadım. Yardımcı olabilirseniz çok sevinirim, teşekkürler :)

const int tam_adim[]={0x09,0x03,0x06,0x0C}; 
const int geri_adim[]={0x0C,0x06,0x03,0x09}; // GERİ ADIM İÇİN TAM ADIMIN TERSİNİ ALDIM

for (i=0; i<=(b-1); i++)
{
   if (i%4 ==0)
      output_d(geri_adim[0]);
      delay_ms(50);
   if (i%4 ==1)
      output_d(geri_adim[1]);
      delay_ms(50);
   if (i%4 ==2)
      output_d(geri_adim[2]);
      delay_ms(50);
   if (i%4 ==3)
      output_d(geri_adim[3]);
      delay_ms(50);
}

      if(i>(b-1))
      {
         sayac++;   
         output_d(0x00); 
      }

z

for (i=0; i<=(b-1); i++) yerine

for (i=0; i<b; i++) dene
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

DaisysFox

Bahsettiğiniz kodu denedim fakat şimdi de kodumun başka bir yerinde sorun oluştu :( Çift eksenli bir güneş takip sistemi yapmaktayım fakat kod penceresinde göreceğiniz elevasyon açısını motor için işlerken bir sorun oluşuyor. Sorun da şu şekilde: Saat 6'da kod, motor() fonksiyonuna giriyor ve hesaplanan b değeri kadar dönüyor, daha sonra saat 7 olduğunda b değeri, saat 6'daki b değerinden çıkarılarak farkı kadar dönmesi sağlanıyor fakat, burada bir hata oluyor ve motor iki adım geri gidip sıfıra geliyor ve iki adım ileri giderek duruyor. Asıl yapması gereken ise b=2 için 2 adım ileri gitmesi. Ayrıca, sonraki işlemler için her saatte önceki b'den fark alarak ileri veya geri gitmesi. 12'ye kadar ileri (motor() fonksiyonu), 12'den sonra geri (geri_motor() fonksiyonu) gitmesi gerekiyor.

Örnek: Saat 6 için b=2, Motorun geldiği açı 11.3 // Motor adım açısı 5.625 derece
      Saat 7 için b=2, Olması gereken açı 11.3+11.3=22.6 , Olan ise 11.3-11.3 + 11.3 Yani iki adım geri atıp sıfırlanıyor sonra ileri 2 adım atıyor.

Not: Kod yazmakta acemi olduğum için her şeyi açık açık yazarak sistemi zorladığımı biliyorum fakat bu şekilde anlayabiliyorum. Yardımlarınız için teşekkürler :)

#include <18f4550.h>
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay (clock=4000000)

#define use_portb_lcd TRUE

#define RTC_SCLK PIN_c1
#define RTC_IO PIN_c2
#define RTC_RST PIN_c0

#include <DS1302.c>
#include <lcd.c>
#include <math.h>

long d;
unsigned saniye,dakika,saat,ay,yil,haftanin_gunu;
unsigned gun;

int fi;
int w; // Saat açısı
float dec; // Deklinasyon açısı
float e; // Altitude,elevasyon
float a; // Azimuth
float elev;
float azi;
signed int b;
int sayac=0;
int i=0;

int b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15;

const int tam_adim[]={0x09,0x03,0x06,0x0C}; // Her adım 5.625 derece
const int geri_adim[]={0x0C,0x06,0x03,0x09}; // Her adım 5.625 derece

void d_hesabi();
void motor();
void geri_motor();
void hesap();
void saat_sayac();
void basla();
void tur_ileri();
void tur_geri();

void main () {

setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);

lcd_init();
rtc_init();

rtc_set_datetime(10,6,22,1,6,59); // day,mth,year,dow,hour,min

while(1) {

rtc_get_time(saat,dakika,saniye);
rtc_get_date(gun,ay,yil,haftanin_gunu);

d_hesabi();

printf(lcd_putc,"\nSaat:%02d:%02d:%02d",saat,dakika,saniye);
delay_ms(500);

hesap();
saat_sayac();


}}  ////// Void Sonu


void d_hesabi() {

switch(ay) {

case 1: //ocak
d=gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 2: //şubat
d=31+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 3: //mart
d=59+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 4: //nisan
d=90+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 5: //mayıs
d=120+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 6: //haziran
d=151+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 7: //temmuz
d=181+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 8: //ağutos
d=212+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 9: //eylül
d=243+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 10: //ekim
d=273+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 11: //kasım
d=304+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;

case 12: //aralık
d=334+gun; 
printf(lcd_putc,"\fGun=%Ld",d);
delay_ms(500);
break;
}

}

void hesap() {
fi=41;  

  if (saat<12) {
w=-1*(15*(saat-12)); // Saat açısı // 15
}
  else {
w=15*(saat-12); // Saat açısı // 15
}

dec=23.45*sin((0.986*(284+d))*(PI/180)); // 18.95

e=(sin(dec*(PI/180))*sin(fi*(PI/180))+cos(dec*(PI/180))*cos(fi*(PI/180))*cos(w*(PI/180))); // -360 ile 360 // 0.9025
elev=asin(e);  //  -1 ile 1 // 64.49
elev=(elev*180)/PI; // -16.77 
elev=elev;


a=((sin(dec*(PI/180))*cos(fi*(PI/180))-cos(dec*(PI/180))*cos(w*(PI/180))*sin(fi*(PI/180)))/cos(elev*(PI/180))); // 0.5683
azi=acos(a); // 34.64 


if (saat>12){
azi=(azi*180)/PI;
azi=360-azi;
}
else {
azi=(azi*180)/PI;
}

}

void saat_sayac() {
if (sayac==0) {
if(saat==6) {
  tur_ileri();
  b=(elev/5.625);
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);

  b1=(elev/5.625);
  motor();
}}
if (sayac==1) {
if(saat==7) {
  tur_ileri();
  b=(elev/5.625)-b1;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);
  
  b2=(elev/5.625);
  motor();
}}
if (sayac==2) {
if(saat==8) {
  tur_ileri();
  b=(elev/5.625)-b2;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);

  b3=(elev/5.625);
  motor();
}}
if (sayac==3) {
if(saat==9) {
  tur_ileri();
  b=(elev/5.625)-b3;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);

  b4=(elev/5.625);
  motor();
}}
if (sayac==4) {
if(saat==10) {
  b=(elev/5.625)-b4;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);

  b5=(elev/5.625);
  motor();
}}
if (sayac==5) {
if(saat==11) {
  b=(elev/5.625)-b5;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);

  b6=(elev/5.625);
  motor();
}}
if (sayac==6) {
if(saat==12) {
  b=(elev/5.625)-b6;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);

  b7=(elev/5.625);
  motor();
}}
if (sayac==7) {
if(saat==13) {
  b=(elev/5.625)-b7; 
  b=-b;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);

  b8=(elev/5.625);
  geri_motor();
}}
if (sayac==8) {
if(saat==14) {
  b=(elev/5.625)-b8;
  b=-b;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);
  
  b9=(elev/5.625);
  geri_motor();
}}
if (sayac==9) {
if(saat==15) {
  b=(elev/5.625)-b9;
  b=-b;
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);
  
  b10=(elev/5.625);
  geri_motor();
}}
if (sayac==10) {
if(saat==16) {
  tur_ileri();
  b=(elev/5.625)-b10;
  b=-b;
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);
  
  b11=(elev/5.625);
  geri_motor();
}}
if (sayac==11) {
if(saat==17) {
  tur_ileri();
  b=(elev/5.625)-b11;
  b=-b;
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);
  
  b12=(elev/5.625);
  geri_motor();
}}
if (sayac==12) {
if(saat==18) {
  tur_ileri();
  b=(elev/5.625)-b12;
  b=-b;  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);
  
  b13=(elev/5.625);
  geri_motor();
}}
if (sayac==13) {
if(saat==19) {
  tur_ileri();
  b=(elev/5.625)-b13;
  b=-b;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);
  
  b14=(elev/5.625);
  geri_motor();
}}
if (sayac==14) {
if(saat==20) {
  b=(elev/5.625)-b14;
  tur_ileri();
  b=-b;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);
  
  b15=(elev/5.625);
  geri_motor();
}}

if (sayac>14) {
  b=0;
  
printf(lcd_putc,"\f      tur=%d",b);
delay_ms(500);
  
  basla();
}
}

void motor() {

  for (i=0; i<=(b); i++)
{
  if (i%4 ==0)
      output_d(tam_adim[0]);
      delay_ms(50);
  if (i%4 ==1)
      output_d(tam_adim[1]);
      delay_ms(50);
  if (i%4 ==2)
      output_d(tam_adim[2]);
      delay_ms(50);
  if (i%4 ==3)
      output_d(tam_adim[3]);
      delay_ms(50);
}
      if(i>(b))
      {
        sayac++;  // saat+ olana kadar bekle
        output_d(0x00); //akım çekmememsi için.
      }
      
}

void basla() {
for (i=0; i<=b; i++)
{
  if (i%4 ==0)
      output_d(tam_adim[0]);
      delay_ms(50);
  if (i%4 ==1)
      output_d(tam_adim[1]);
      delay_ms(50);
  if (i%4 ==2)
      output_d(tam_adim[2]);
      delay_ms(50);
  if (i%4 ==3)
      output_d(tam_adim[3]);
      delay_ms(50);
}
      if(i>b)
      {
        sayac=0;  // saat+ olana kadar bekle
        output_d(0x00); //akım çekmememsi için.
      }
}

void geri_motor() {
  
  for (i=0; i<b; i++)
{
  if (i%4 ==0)
      output_d(geri_adim[0]);
      delay_ms(50);
  if (i%4 ==1)
      output_d(geri_adim[1]);
      delay_ms(50);
  if (i%4 ==2)
      output_d(geri_adim[2]);
      delay_ms(50);
  if (i%4 ==3)
      output_d(geri_adim[3]);
      delay_ms(50);
}

      if(i>=b)
      {
        sayac++;  // saat+ olana kadar bekle
        output_d(0x00); //akım çekmememsi için.
      }
      
}

void tur_ileri() {
if (elev<0) {
elev=0;
}}



Alimertt16

Step motorunuzun büyüklüğünü bilmiyorum ama step motorlara göre sürücüler var ve sizin sadece yaptığınız yön ve pals kontrolünü yapmak işinizi daha çok kolaylaştırabilir

DaisysFox

Byj48 kullanacağım ama b değeri RTCye bağlı olarak her gün ve her saat değişiyor. Bu yüzden saat başı hesaplanan elavasyon değeri kadar motoru döndürmeliyim. Ayrıca gerçekleme olarak düzgün çalışmasa bile simülasyonda çalışması önemli.

Void motor()
For(i=0;i<b;i++) iken saat 6 da b kadar dönüyor fakat saat 7de yeni b değeriyle 6 daki b değerinin farkını alıp üstüne ekleyerek dönmesi gerekirken yapmıyor.

Fakat,
For(i=0;i<(b+2);i++) , b nin yanına +2 gibi rastgele bir sayı eklediğimde motor istediğim şekilde dönüyor yani farkını alıp üstüne ekleyerek dönmeye devam ediyor.

Bunun sebebi nedir acaba?

Epsilon

Bu bir ödevmi ,üniversite bitirme tezi mi? Yoksa bir konuyu öğrenmek için hobby amaçlı mı?
Zira eğer bir tez çalışması ise ve güneşten verim alacak şekilde güneş panellerinde kullanılacaksa bu konuda yazılmış tezleri incelerseniz algoritmalarını  izah ediyor .
Ayrıca projelerde GPS kullanılarak pekçok değer oradan okunuyormuş
Yazılım ın temel yapısı başlığında yazılanların yaklaşık türkçesi

Geliştirilen güneş takip algoritması
yıl boyunca yüksek hassasiyetle güneş öğlen, gün doğumu ve gün batımı için güneş açılarının ve zamanlarının belirlenmesini sağlar.
Algoritmanın akış şeması Şekil 5'te çizilmiştir. Güneş takip algoritması yazılımı ile güneş açılarının hesaplanması, basitçe bir GPS sistemi aracılığıyla konumun tarih, saat, kesin boylam, enlem ve kotunun belirtilmesini gerektirir.

Yok sadece CCS öğrenmek içinse, CCS in Ana sayfasında forum menüsünde benzer projeler ve kodları var.

DaisysFox

Evet bitirme tezi fakat, bu tezdeki asıl amaç güneş takip sistemi yapmak. Bunun için üniversite arduino harici bir mikroişlemci kullanmamı şart koyuyor. Ben de PIC şeçtim ve kodun son aşamasındayım. Bütün güneş açı hesaplarını doğru bir şekilde hesaplıyor fakat, dikeyde takip yapmasını sağlayan elevasyon açısını döndürecek motor istediğim hareketleri yapmıyor. Elde ettiğim açıyı step motorun adım açısı olan 5.625 dereceye bölerek motorun kaç adım atacağını hesaplatıyorum bu hesabı b olarak adlandırdım. Bu b değeri 10 Haziran 2022 Saat:6 için 2 adım atıp 11.25 dereceye geliyor yani b=2, Saat:7 için ise b değeri 4 oluyor ve 7'de 22.5 derece değerinde olması gerekiyor. Burada yapması gereken işlem 7'deki b'den 6'daki b'yi çıkarması ve o kadar adım atması çünkü, 2 adım atmış motorun üstüne 4 adım atarsa toplamları olan 33.75 dereceye gelir ve 22.5 olması gerekirken yanlış olmuş olur.

Kodda saat_sayac() fonksiyonu içine girerek her saat için b değeri hesaplanıyor ve motor() fonksiyonu kullanılarak motor b kadar döndürülüyor. Saat 6 için 11.25 dereceye geliniyor. Saat 7 olduğunda ise b değeri bir önceki b'den çıkarılarak 2 olarak hesaplanıyor. Kod doğru çalışsaydı 11.25 in üstüne 2 adım atıp 22.5 olacaktı fakat, saat 7 olduğunda motor kendini geri döndürerek sıfırlıyor üstüne 2 adım atarak 11.25 e geliyor. Kısaca açıklamak gerekirse ben motorun kendini sıfırlamamasını, hesaplanan değerin üstüne dönmesini istiyorum. Hatanın da void motor() fonksiyonunda olduğunu düşünüyorum fakat nedenini çözemedim :/

Epsilon

Eklediğim  link beşyüz kusur sayfalık dökümandır.
İçerisinde PLC ARDUİNO ve C dilleri nasıl takip edilebileceğine dair örnekler vardır.
Dökümanda anlatılanlara göre  komplex algoritmalarla yapılabildiğini anlatmaktadır.

Sizden eğer şehir seçilerek bu şehre uygun güneş takip sistemi istenirse yazılımınız bunu destekleyebilecekmi?

Dökümanı iyice incelemenizi tavsiye ederim (İndirmek için sağ taraftaki "Download Fulltext.pdf " e tıklayın
Link

DaisysFox

Kaynak için teşekkür ederim çok yararlı oldu fakat birçok link maalesef artık kullanım dışı kalmış ve olan kodlar da kafamı baya karıştırdı. Çünkü bir çoğu açı hesaplamak için yazılmış, motor döndürmek için değil. Güneş takibi için iki açı gerekli birisi azimut, diğeri elevasyon. Paylaştığım kod takip sisteminin tam hali değil sadece elavasyon için deneme yaptığım için o kısmı içeriyor. Azimut açısını hesaplayabiliyorum ve simülasyonda doğru bir şekilde motoru döndürebiliyorum o yüzden azimut için bir sıkıntı yok geriye kalan elevasyonda sıkıntı oluyor. Azimut çalışmışken aynı kodu elavasyon için de kullanıyorum fakat dediğim gibi saat 6 için örnek verirsem istediğim değere geliyor ama bir sonraki saat sıfırlayıp elde edilen değere geliyor. Tek istediğim motoru sıfırlamaması.

Sorunuz için de şunu söyleyebilirim, güneş açı hesaplarında enlem değeri giriliyor(kodda fi=41, İstanbul için) ve bu sayede istediğiniz şehir için takip yapmanız mümkün oluyor.

Epsilon

Rica ederim.Yazılımdaki sorunun çözümü için bölme işleminden sonra Absulate veya üste yuvarla gibi farklı 2 komuttan biri gerekebilir.Döndürme işleminde dereceyi radyana çevirirken basit bir hata yapılmış olabilir
Yada değişken tanımlama türlerinde hata yapılmış olabilir.CCS bilmiyorum

Adım adım çalıştırıp değişkenleri ekrana yazdırıp, nerede saçmalıyor görebilirsiniz
Benzer projeler için CCS in forum adresi
http://www.ccsinfo.com/forum/
Üsteki "Search" bölümünden benzer projeleri bulabilirsiniz.
Kolay gelsin