PIC C proje yardım

Başlatan piquand, 19 Haziran 2007, 00:28:38

piquand

Selam arkadaşlar,

PIC C de bir odevim var ve yapamıyorum . Forumda bircok eski konuya kadar bakındım ama tam anlamıyla işime yarayacak bişey bulamadım, o yuzden sizlerden yardımlarınızı bekliyorum.

Şimdi, elimde iki tekerlekli ve iki dc motor ile sürülmüş bir araç var. Bu aracın belirtilen koordinatlara (ornegin: (x1,y1)=(30,50), (x2,y2)=(-5,20))
gitmesini istiyorum. Herbir koordinata geldiginde ulaştıgına dair buzzer ile bir ses cıkarması ya da bir led yakması isteniyor. Verilen koordinatlara göre aracın 90 ya da 180 derece donmesi bekleniyor.

Bu işlemler sırasında motorları pwm ile kontrol ediyoruz ve tekerleklerin dısına yapıstırmıs oldugumuz siyahlı-beyazlı düzlemleri cny70 ile sayıp ona gore motorun ne kadar yol alacagını hesaplatıyoruz.

Aşagıda ayrı ayrı denemiş oldugum programları ekliyorum;

1) tek dc motor için;

//  #include <16F84A.h>
//  #fuses XT,NOWDT,PUT,NOPROTECT
//  #use delay(clock=4000000)
//  #use fast_io(A)
//  #use fast_io(B)
//  int1 Enable1,Input1,Input2;
//
//  void main() {
//  set_tris_b(0x00);
//  Enable1=1;
//    for ( ;; ) { //infinite loop
//
//   //Motor is running ClockWise (CW)
//   Input1=1;
//   Input2=0;
//        output_bit(PIN_B0,Enable1);
//        output_bit(PIN_B1,Input1);
//        output_bit(PIN_B2,Input2);
//        delay_ms(15000);
//
//   //Stop Motor
//   Input1=0;
//   Input2=0;
//        output_bit(PIN_B1,Input1);
//        output_bit(PIN_B2,Input2);
//        delay_ms(5000);
//
//  //Motor is running CounterClockWise (CCW)
//   Input1=0;
//   Input2=1;
//        output_bit(PIN_B1,Input1);
//        output_bit(PIN_B2,Input2);
//        delay_ms(15000);
//   }}

2) PWM ile dc motor

//  #include <16F877A.h>
//  #fuses XT,PUT,NOWDT,NOBROWNOUT,NOLVP,NOPROTECT
//  #use delay(clock=4000000)
//  #use fast_io(C)
//  long duty=0;
//  void main()
//  {
//  set_tris_c (0x00);
//  setup_timer_2(T2_DIV_BY_1,249,1);
//  setup_ccp1(CCP_PWM); //4kHz PWM signal output at CCP1 pin 17

//  while (TRUE) {
//  duty=500;
//  set_pwm1_duty (duty);
//  delay_ms(10000);
//  duty=750;
//  set_pwm1_duty (duty);
//  delay_ms(10000);
//  }}

3) cny70 ile sayma

//  #include <16F877A.h>
//  #fuses XT,PUT,NOWDT,NOBROWNOUT,NOLVP,NOPROTECT
//  #use delay(clock=4000000)
//  #use fast_io(B)
//  #use fast_io(A)
//  int counted_events=0;
//  
//  void main(void)
//  {
//  setup_adc_ports(NO_ANALOGS);
//  setup_adc(ADC_OFF);
//  set_tris_a(0xFF);
//  set_tris_b(0x00);
//  output_b(0x00);
//  set_timer0(0);
//  setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_1);
//
//  while(TRUE) {
//  counted_events=get_timer0();
//  output_b(counted_events);
//  }}

Sorun şu ki, ayrı ayrı elimde olan bu programları bir araya getirip en ustte belirttigim odevimi yapamıyorum. Misal, tek motorun donusleri oluyo ama bunu çift motor için yazmaya calıstıgımda hata veriyor, ya da koordinat girip ona gore aracıma yol aldırma işlemini tasarlayamadım ve hala buzzer/led olayını nasıl ve nereye koyacagımı da bilmiyorum ...

Şimdiden hepinize teşekkür ediyorum. Mesaj biraz uzun oldu galiba, kusura bakmayın. Sormak istediginiz ya da acık olmayan bir kısım varsa sorularınıza yanıt vermeye calısırım.

Hepinize iyi aksamlar !!!

piquand

Sorunu hemen hemen hallettim; geriye tek bişey kaldı;
Verilen koordinatlara gore aracın yol alması (gerektiginde 90/180 derece donebilmesi).

Bunu da gidecegi noktanın bir onceki ile arasındaki farkı hesaplatıp, mesafeyi elde etmek ve bu mesafe kadar aracın yol almasını saglamakla yapacagım. Ama nasıl? Bunu yapan programı yazamadım hala. Bu konuda yardmıcı olabilir misiniz peki?