serhatuysal
Üye
- Katılım
- 5 Haz 2009
- Mesajlar
- 3
- Puanları
- 1
- Yaş
- 39
Merhaba arkadaşlar,
aşağıda vermiş olduğum kodlarda şöyle bir sıkıntı yaşıyorum, usb taktığım zaman programım bazen tanıyor bazen tanımıyor, ama #int_ext , #int_ext1 ve #int_timer2 kesme kod bloklarını kaldırdığım zaman sorunsuz çalışıyor,sizce nedendir?
aşağıda vermiş olduğum kodlarda şöyle bir sıkıntı yaşıyorum, usb taktığım zaman programım bazen tanıyor bazen tanımıyor, ama #int_ext , #int_ext1 ve #int_timer2 kesme kod bloklarını kaldırdığım zaman sorunsuz çalışıyor,sizce nedendir?
Kod:
#include <18F4550.h>#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN,PBADEN
#use delay(clock=20000000) // siempre ponemos (48000000)
// CCS Library dynamic defines
#DEFINE USB_HID_DEVICE TRUE //Tells the CCS PIC USB firmware to include HID handling code.
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT //turn on EP1 for IN bulk/interrupt transfers
#define USB_EP1_TX_SIZE 8 //Numero de byte de envio (maximo 64 bytes)
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT //turn on EP1 for OUT bulk/interrupt transfers
#define USB_EP1_RX_SIZE 8 //Numero de byte de Recepcion (maximo 64 bytes)
int8 in_data[USB_EP1_RX_SIZE]; //Declaramos la variable de entrada y su tamañano de n bytes
int8 out_data[USB_EP1_TX_SIZE]; //Declaramos la variable de salida y su tamañano de 8 bytes
// CCS USB Libraries
#include <pic18_usb.h> //Microchip 18Fxx5x hardware layer for usb.c
#include <hid n-byte.h> //USB Configuration and Device descriptors for this UBS device
#include <usb.c> //handles usb setup tokens and get descriptor reports
#zero_ram
#separate
void Motor_1(int8,int8,int8,int8);
#separate
void Motor_2(int8,int8,int8,int8);
#use fast_io(b)//Kullandığımız portu tanımlıyoruz
#byte PORTA = 0xF80
#byte PORTB=0xF81
#byte PORTD=0xF83
#bit MOTOR1PULSEPORT =PORTD.0
#bit MOTOR1ENABLEPORT =PORTD.1
#bit MOTOR1YONPORT =PORTD.2
#bit MOTOR2PULSEPORT =PORTD.5
#bit MOTOR2ENABLEPORT =PORTD.6
#bit MOTOR2YONPORT =PORTD.7
struct MOTOR
{
#zero_ram
int1 Enable;
int1 Yon;
//int1 AdimTuru;
int32 AdimSayisi;
int32 TamKisim;
int32 KalanKisim;
int Timersayac;
int8 Hiz;
} Motor1,Motor2;
#int_ext //Motor1 Encoder RB0
void Motor1EncoderKesmesi()
{
if(Motor1.AdimSayisi>0)
{
Motor1.AdimSayisi--;
out_data[0]=1;
out_data[1]=2;
usb_put_packet(1, out_data, USB_EP1_TX_SIZE, USB_DTS_TOGGLE) ;
}
else
{
out_data[0]=2;
}
}
#int_ext1 //Motor2 Encoder RB1
void Motor2EncoderKesmesi()
{
if(Motor2.AdimSayisi>0)
{
Motor2.AdimSayisi--;
out_data[0]=2;
out_data[1]=1;
usb_put_packet(1, out_data, USB_EP1_TX_SIZE, USB_DTS_TOGGLE) ;
}
else
{
out_data[1]=2;
}
}
#INT_TIMER2
void rtcc_timer2(void)
{
if(Motor1.AdimSayisi>0)
{
Motor1.Timersayac++;
if(Motor1.Timersayac==Motor1.Hiz)
{ MOTOR1PULSEPORT=1; }
if(Motor1.Timersayac==(Motor1.Hiz*2))
{
MOTOR1PULSEPORT=0;
Motor1.Timersayac=0;
}
}
else
{
MOTOR1PULSEPORT=0;
Motor1.Timersayac=0;
//MOTOR1ENABLEPORT=0;
}
if(Motor2.AdimSayisi>0){
Motor2.Timersayac++;
if(Motor2.Timersayac==Motor2.Hiz)
{MOTOR2PULSEPORT=1; }
if(Motor2.Timersayac==(Motor2.Hiz*2))
{
MOTOR2PULSEPORT=0;
Motor2.Timersayac=0;
}
}
else{
MOTOR2PULSEPORT=0;
Motor2.Timersayac=0;
//MOTOR2ENABLEPORT=0;
}
}
void main()
{
set_tris_a(0); //d portu çıkış
set_tris_d(0); //d portu çıkış
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//set_tris_b(0xF0);//B portunu kullanacağımızı belirledik.
//output_b(0x00);//B portunu komple çıkış yaptık.
//ext_int_edge(H_TO_L); // init interrupt triggering for button press
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
setup_timer_2(T2_DIV_BY_16,62,16);
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
/////////////////////////////////////////////
usb_init(); // Usb hazırlanıyor
usb_task();
///////////////////////////////////////////// ,
PORTA=0;
while(1)
{
while(usb_enumerated())
{
if (usb_kbhit(1)) //Eğer pc'den yeni bir paket geldiyse
{
usb_get_packet(1, in_data, USB_EP1_RX_SIZE);// //paketi oku a[0];
if(in_data[0]==0x01)
{
Motor_1(in_data[1],in_data[2],in_data[3],in_data[4]);//veri-tam-kalan
}
if(in_data[0]==0x02)
{
Motor_2(in_data[1],in_data[2],in_data[3],in_data[4]);//veri-tam-kalan
}
}
}
}
}
void Motor_1(int8 Kontrol, int8 TamKisim, int8 KalanKisim,int8 Hiz)
{
Motor1.Yon=bit_test(Kontrol,0); //0000000x 0.biti okudu
MOTOR1YONPORT=Motor1.Yon;
Motor1.Enable=bit_test(Kontrol,1); //000000x0 1.biti okudu
MOTOR1ENABLEPORT=Motor1.Enable;
Motor1.Hiz=Hiz+3;
Motor1.TamKisim =TamKisim;
Motor1.KalanKisim=KalanKisim;
Motor1.TamKisim =TamKisim;
Motor1.KalanKisim=KalanKisim;
if (Motor1.TamKisim==0) { Motor1.AdimSayisi=Motor1.KalanKisim;}
else if (Motor1.TamKisim>=1) {Motor1.AdimSayisi=(255*Motor1.TamKisim)+Motor1.KalanKisim; }
}
void Motor_2(int8 Kontrol, int8 TamKisim, int8 KalanKisim,int8 Hiz)
{
Motor2.Yon=bit_test(Kontrol,0); //0000000x 0.biti okudu
MOTOR2YONPORT=Motor2.Yon;
Motor2.Enable=bit_test(Kontrol,1); //000000x0 1.biti okudu
MOTOR2ENABLEPORT=Motor2.Enable;
Motor2.Hiz=Hiz+3;
Motor2.TamKisim =TamKisim;
Motor2.KalanKisim=KalanKisim;
Motor2.TamKisim =TamKisim;
Motor2.KalanKisim=KalanKisim;
if (Motor2.TamKisim==0) { Motor2.AdimSayisi=Motor2.KalanKisim;}
else if (Motor2.TamKisim>=1) {Motor2.AdimSayisi=(255*Motor2.TamKisim)+Motor2.KalanKisim; }
}