realistic
Üye
- Katılım
- 20 May 2008
- Mesajlar
- 13
- Puanları
- 1
- Yaş
- 40
Merhaba arkadaşlar
Bilgisayardan ccs c'nin usb cdc kütüphanesini kullanarak veri alıp seri iletişimle başka bir pic'e göndermek istiyorum.
İsiste simülasyon gayet düzgün çalıştı fakat devreyi bredbord üzerine kurduğum zaman bilgisayarda "usb aygıt tanınamadı" hata uyarısını alıyorum
Yardımınıza ihtiyacım var!!!
KODLARIM:
#define __USB_PIC_PERIF__ 1
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <stdlib.h>
#include <math.h>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)
#include <usb_cdc.h>
#use fast_io(d)
const int8 uzuv1 = 24;
const int8 uzuv2 = 15;
const int8 uzaklik = 3;
const int8 x_scale = 30;
const int8 y_scale = 30;
static int8 last_cdc;
int8 new_cdc;
float servo1,servo2,servo3,aci_step;
unsigned int8 pozisyon_x,pozisyon_y;
char gelen;
int8 kontrol=1;
int8 sepet;
char ok = 13;
//*** SERVOLARA ACI DEGERLERINI GONDEREN FONKSIYON ***\\
void cisme_git()
{
output_high(pin_d0);
printf("%f",servo1);
putc(ok);
delay_ms(50);
printf("%f",servo2);
putc(ok);
delay_ms(50);
output_low(pin_d0);
output_high(pin_d1);
printf("%f",servo3);
putc(ok);
delay_ms(50);
output_low(pin_d1);
delay_ms(1000);
}
//*** 3 farkli sepetin gonderilmesi icin servolara aci degerleri gonderir ***\\
void sepete_git(int z)
{
output_high(pin_a3);
delay_ms(200);
switch (z)
{
case 1:
output_high(pin_d0);
printf("30");
putc(ok);
printf("95");
putc(ok);
delay_ms(50);
output_low(pin_d0);
output_high(pin_d1);
printf("120");
putc(ok);
delay_ms(50);
case 2:
output_high(pin_d0);
printf("50");
putc(ok);
printf("95");
putc(ok);
delay_ms(50);
output_low(pin_d0);
output_high(pin_d1);
printf("120");
putc(ok);
delay_ms(50);
case 3:
output_high(pin_d0);
printf("120");
putc(ok);
printf("95");
putc(ok);
delay_ms(50);
output_low(pin_d0);
output_high(pin_d1);
printf("120");
putc(ok);
delay_ms(50);
}
delay_ms(1000);
output_low(pin_a3);
// matlab'e cismin tasinip birakildigi bilgisi gonderiliyor
printf(usb_cdc_putc, "\n\rok");
}
//*** 255 x 255 birimlik alandaki pozisyon bilgirenie göre servo acisi hesaplnamasi ***\\
void aci_hesapla(float x, float y)
{
float a,b;
//ustteki degiskenler float olarak degistirilmeye calisilmali
float temp,p;
printf(usb_cdc_putc,"\n\rx......=%f",x);
printf(usb_cdc_putc,"\n\ry......=%f",y);
if (x<=127)
{
a = (x_scale/2)-((x*x_scale)/254);
// printf(usb_cdc_putc,"\n\ra......= %f",a);
b = y_scale - (y/254)*y_scale;
// printf(usb_cdc_putc,"\n\rb......= %f",b);
temp =(b+uzaklik)*(b+uzaklik) + a*a;
// printf(usb_cdc_putc,"\n\rtemp......= %f",temp);
p = sqrt(temp);
// printf(usb_cdc_putc,"\n\rp......= %f",p);
aci_step=asin((b+uzaklik)/p);
// printf(usb_cdc_putc,"\n\raci_step......= %f",aci_step);
}
else
{
a = ((x-127)/254)*x_scale;
// printf(usb_cdc_putc,"\n\ra......= %f",a);
b = y_scale - (y/254)*y_scale;
// printf(usb_cdc_putc,"\n\rb......= %f",b);
temp =(b+uzaklik)*(b+uzaklik) + a*a;
// printf(usb_cdc_putc,"\n\rtemp......= %f",temp);
p = sqrt(temp);
// printf(usb_cdc_putc,"\n\rp......= %f",p);
aci_step = asin(a/p);
aci_step = aci_step+pi/2;
// printf(usb_cdc_putc,"\n\raci_step......= %f",aci_step);
}
temp = ((uzuv1*uzuv1) + (uzuv2*uzuv2) - (p*p))/(2*uzuv1*uzuv2);
// printf(usb_cdc_putc,"\n\rtemp......= %f",temp);
servo2 = acos(temp);
temp = (uzuv2*sin(servo2))/p;
servo1 = acos(temp);
servo3 = pi+servo1-servo2;
servo1=floor(180/pi*servo1);
servo2=floor(180/pi*servo2);
servo3=floor(180/pi*servo3);
printf(usb_cdc_putc,"\n\rservo1......= %f",servo1);
printf(usb_cdc_putc,"\n\rservo2......= %f",servo2);
printf(usb_cdc_putc,"\n\rservo3......= %f",servo3);
}
void main()
{
set_tris_a(0x00);
set_tris_d(0x00);
setup_adc(ADC_OFF);
setup_adc_ports(NO_ANALOGS);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
output_low(pin_d0);
while (1)
{
usb_task();
new_cdc=usb_cdc_connected();
if (usb_enumerated()) {output_high(pin_B4);}
if (usb_cdc_connected()) {output_high(pin_B5);}
while (new_cdc && !last_cdc)
{
if (usb_cdc_kbhit())
{
switch (kontrol)
{
case 1:
gelen = usb_cdc_getc();
pozisyon_x=(int8)gelen;
//printf(usb_cdc_putc,"\n\rpozisyon_x......= %u",pozisyon_x);
kontrol = 2;
case 2:
gelen = usb_cdc_getc();
pozisyon_y=(int8)gelen;
//printf(usb_cdc_putc,"\n\rpozisyon_y......= %u",pozisyon_y);
kontrol = 3;
case 3:
gelen = usb_cdc_getc();
sepet = (int8)gelen;
//printf(usb_cdc_putc,"\n\rsepet......= %d",sepet);
kontrol = 4;
}
}
delay_ms(200);
if (kontrol == 4)
{
kontrol = 1;
aci_hesapla(pozisyon_x,pozisyon_y);
cisme_git();
sepete_git(sepet);
output_high(pin_d0);
delay_ms(1000);
output_low(pin_d0);
}
}
last_cdc=new_cdc;
}
}
Bilgisayardan ccs c'nin usb cdc kütüphanesini kullanarak veri alıp seri iletişimle başka bir pic'e göndermek istiyorum.
İsiste simülasyon gayet düzgün çalıştı fakat devreyi bredbord üzerine kurduğum zaman bilgisayarda "usb aygıt tanınamadı" hata uyarısını alıyorum
Yardımınıza ihtiyacım var!!!
KODLARIM:
#define __USB_PIC_PERIF__ 1
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <stdlib.h>
#include <math.h>
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)
#include <usb_cdc.h>
#use fast_io(d)
const int8 uzuv1 = 24;
const int8 uzuv2 = 15;
const int8 uzaklik = 3;
const int8 x_scale = 30;
const int8 y_scale = 30;
static int8 last_cdc;
int8 new_cdc;
float servo1,servo2,servo3,aci_step;
unsigned int8 pozisyon_x,pozisyon_y;
char gelen;
int8 kontrol=1;
int8 sepet;
char ok = 13;
//*** SERVOLARA ACI DEGERLERINI GONDEREN FONKSIYON ***\\
void cisme_git()
{
output_high(pin_d0);
printf("%f",servo1);
putc(ok);
delay_ms(50);
printf("%f",servo2);
putc(ok);
delay_ms(50);
output_low(pin_d0);
output_high(pin_d1);
printf("%f",servo3);
putc(ok);
delay_ms(50);
output_low(pin_d1);
delay_ms(1000);
}
//*** 3 farkli sepetin gonderilmesi icin servolara aci degerleri gonderir ***\\
void sepete_git(int z)
{
output_high(pin_a3);
delay_ms(200);
switch (z)
{
case 1:
output_high(pin_d0);
printf("30");
putc(ok);
printf("95");
putc(ok);
delay_ms(50);
output_low(pin_d0);
output_high(pin_d1);
printf("120");
putc(ok);
delay_ms(50);
case 2:
output_high(pin_d0);
printf("50");
putc(ok);
printf("95");
putc(ok);
delay_ms(50);
output_low(pin_d0);
output_high(pin_d1);
printf("120");
putc(ok);
delay_ms(50);
case 3:
output_high(pin_d0);
printf("120");
putc(ok);
printf("95");
putc(ok);
delay_ms(50);
output_low(pin_d0);
output_high(pin_d1);
printf("120");
putc(ok);
delay_ms(50);
}
delay_ms(1000);
output_low(pin_a3);
// matlab'e cismin tasinip birakildigi bilgisi gonderiliyor
printf(usb_cdc_putc, "\n\rok");
}
//*** 255 x 255 birimlik alandaki pozisyon bilgirenie göre servo acisi hesaplnamasi ***\\
void aci_hesapla(float x, float y)
{
float a,b;
//ustteki degiskenler float olarak degistirilmeye calisilmali
float temp,p;
printf(usb_cdc_putc,"\n\rx......=%f",x);
printf(usb_cdc_putc,"\n\ry......=%f",y);
if (x<=127)
{
a = (x_scale/2)-((x*x_scale)/254);
// printf(usb_cdc_putc,"\n\ra......= %f",a);
b = y_scale - (y/254)*y_scale;
// printf(usb_cdc_putc,"\n\rb......= %f",b);
temp =(b+uzaklik)*(b+uzaklik) + a*a;
// printf(usb_cdc_putc,"\n\rtemp......= %f",temp);
p = sqrt(temp);
// printf(usb_cdc_putc,"\n\rp......= %f",p);
aci_step=asin((b+uzaklik)/p);
// printf(usb_cdc_putc,"\n\raci_step......= %f",aci_step);
}
else
{
a = ((x-127)/254)*x_scale;
// printf(usb_cdc_putc,"\n\ra......= %f",a);
b = y_scale - (y/254)*y_scale;
// printf(usb_cdc_putc,"\n\rb......= %f",b);
temp =(b+uzaklik)*(b+uzaklik) + a*a;
// printf(usb_cdc_putc,"\n\rtemp......= %f",temp);
p = sqrt(temp);
// printf(usb_cdc_putc,"\n\rp......= %f",p);
aci_step = asin(a/p);
aci_step = aci_step+pi/2;
// printf(usb_cdc_putc,"\n\raci_step......= %f",aci_step);
}
temp = ((uzuv1*uzuv1) + (uzuv2*uzuv2) - (p*p))/(2*uzuv1*uzuv2);
// printf(usb_cdc_putc,"\n\rtemp......= %f",temp);
servo2 = acos(temp);
temp = (uzuv2*sin(servo2))/p;
servo1 = acos(temp);
servo3 = pi+servo1-servo2;
servo1=floor(180/pi*servo1);
servo2=floor(180/pi*servo2);
servo3=floor(180/pi*servo3);
printf(usb_cdc_putc,"\n\rservo1......= %f",servo1);
printf(usb_cdc_putc,"\n\rservo2......= %f",servo2);
printf(usb_cdc_putc,"\n\rservo3......= %f",servo3);
}
void main()
{
set_tris_a(0x00);
set_tris_d(0x00);
setup_adc(ADC_OFF);
setup_adc_ports(NO_ANALOGS);
setup_ccp1(CCP_OFF);
setup_ccp2(CCP_OFF);
output_low(pin_d0);
while (1)
{
usb_task();
new_cdc=usb_cdc_connected();
if (usb_enumerated()) {output_high(pin_B4);}
if (usb_cdc_connected()) {output_high(pin_B5);}
while (new_cdc && !last_cdc)
{
if (usb_cdc_kbhit())
{
switch (kontrol)
{
case 1:
gelen = usb_cdc_getc();
pozisyon_x=(int8)gelen;
//printf(usb_cdc_putc,"\n\rpozisyon_x......= %u",pozisyon_x);
kontrol = 2;
case 2:
gelen = usb_cdc_getc();
pozisyon_y=(int8)gelen;
//printf(usb_cdc_putc,"\n\rpozisyon_y......= %u",pozisyon_y);
kontrol = 3;
case 3:
gelen = usb_cdc_getc();
sepet = (int8)gelen;
//printf(usb_cdc_putc,"\n\rsepet......= %d",sepet);
kontrol = 4;
}
}
delay_ms(200);
if (kontrol == 4)
{
kontrol = 1;
aci_hesapla(pozisyon_x,pozisyon_y);
cisme_git();
sepete_git(sepet);
output_high(pin_d0);
delay_ms(1000);
output_low(pin_d0);
}
}
last_cdc=new_cdc;
}
}