Codigo de Los Encoders ---- USB.

download Codigo de Los Encoders ---- USB.

of 3

Transcript of Codigo de Los Encoders ---- USB.

  • 7/24/2019 Codigo de Los Encoders ---- USB.

    1/3

    #include

    #fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN // XTAL=04MHz/*XTPLL: ES PLL es lo que define la frecuencia de un artefacto electrnico

    NOWDT: No Watchdog TimerNOPROTECT: Codigo no protegido de lecturaNOLVP: Deshabilita un pin asignado para la programacion de bajo voltaje

    NODEBUG: NO debug mode for ICDUSBDIV: Transmision para usb corriendo a 48MhzPLL1: Significa que el PLL prescaler NO dividir la frecuencia del cristal.

    CPUDIV1: El PLL postscaler decide la divisin en 2 de la frecuencia de salida del PLL de 96MHZ, si queremos 48MHZ, lo dejaremos como est.VREGEN: Habilita el regulador de 3.3 volts que usa el mdulo USB, no lo usaremos por los momentos, se cambiar por NOVREGEN*/#use delay(clock=48000000) //Se usara un oscilador externo de 4MHz

    #Byte PortA = 0xF80 // Direccin del puerto A para la familia 18Fxx5x.

    #Byte PortB = 0xF81 // Direccin del puerto B para la familia 18Fxx5x.#Byte PortC = 0xF82 // Direccin del puerto C para la familia 18Fxx5x.#Byte PortD = 0xF83 // Direccin del puerto D para la familia 18Fxx5x (Slo 40/44 pines).#Byte PortE = 0xF84 // Direccin del puerto E para la familia 18Fxx5x.#bit A0 = PortA.0 // Creamos una asignacin para hacer referencia albit RA0 del PIC.

    #define USB_HID_DEVICE FALSE //Disable HID#define USB_EP1_TX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for IN bulk/interrupt transfers#define USB_EP1_RX_ENABLE USB_ENABLE_BULK //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers

    #define USB_EP1_TX_SIZE 10 //size to allocate for the tx endpoint 10 buffer#define USB_EP1_RX_SIZE 1 //size to allocate for the rx endpoint 1 buffer

    #include //Microchip PIC18Fxx5x Hardware layer for CCS's PICUSB driver#include "usb_desc_scope.h" //Enumerador PalitroqueZ#include //handles usb setup tokens and get descriptor reports

    #use fast_io(a) //Se utilizara el puerto A#use fast_io(b) //Se utilizara el puerto B

    #use fast_io(c) //Se utilizara el puerto C#use fast_io(d) //Se utilizara el puerto D#use fast_io(e) //Se utilizara el puerto E

    //int8 crea una variable que puede guardar 8 bits de datos (guarda 8 valores enlugar de solamente 0 / 1)//int8 va esde 0 a 255.int8 Aux1=0, Aux2=0, Aux3=0, Aux4=0, Aux5=0;int8 Enc1=0, Enc2=0, Enc3=0, Enc4=0, Enc5=0;int8 Q=0;

  • 7/24/2019 Codigo de Los Encoders ---- USB.

    2/3

    int8 outa[1];int16 cont[5];

    void main(){

    set_tris_a(0b11111110); //PortA set_tris_b(0b11111111); //PortB set_tris_c(0b11111111); //PortC set_tris_d(0b11111111); //PortD set_tris_e(0b11111111); //PortE

    setup_adc (adc_clock_div_32); //No ADC, no comparators... setup_adc_ports(NO_ANALOGS); setup_adc(ADC_OFF); setup_comparator(NC_NC_NC_NC); setup_vref(FALSE); port_b_pullups(FALSE);

    usb_init(); //init USB usb_task(); //enable usb device and interruptions usb_wait_for_enumeration(); //wait

    outa[0]=0; do

    { cont[Q]=0; // Adems de poner a cero el array Cont, aprovecho para hacer parpadear Q++; // un LED al comienzo. Parpadear 6 veces, una vez que elPIC y el PC se reconocen.

    A0=0; delay_ms(100); A0=1; delay_ms(100); } while (Q

  • 7/24/2019 Codigo de Los Encoders ---- USB.

    3/3

    If ((Aux2 == 12) && (Enc2 == 8)) { cont[1]--;}If (bit_test(PORTD, 6) == 0) { cont[1]=0;}//La linea anterior no se ocupa debido a que los encoder del mouse no t

    ienen Pb.

    Aux3 = Enc3;Enc3 = PORTB & 48; // Aislamos los dos bi

    ts RB4 y RB5 de PortB para que el Pic solo pueda contar 00 - 01 - 10 - 11 en esos pines

    If ((Aux3 == 32) && (Enc3 == 48)) { cont[2]++;} If ((Aux3 == 48) && (Enc3 == 32)) { cont[2]--;} If (bit_test(PORTD, 5) == 0) { cont[2]=0;} //La linea anterior no se ocupa debido a que los encoder del mouse no tienen Pb.

    Aux4 = Enc4;Enc4 = PORTB & 192; // Aislamos los dos bit

    s RB6 y RB7 de PortB para que el Pic solo pueda contar 00 - 01 - 10 - 11 en esospines If ((Aux4 == 128) && (Enc4 == 192)) { cont[3]++;}

    If ((Aux4 == 192) && (Enc4 == 128)) { cont[3]--;} If (bit_test(PORTD, 4) == 0) { cont[3]=0;} //La linea anterior no se ocupa debido a que los encoder del mouse no tienen Pb.

    Aux5 = Enc5; Enc5 = PORTD & 3; // Aislamos los dos bits RD0 y RD1 de PortD para que el Pic solo pueda contar 00 - 01 - 10 - 11 en esospines If ((Aux5 == 2) && (Enc5 == 3)) { cont[4]++;} If ((Aux5 == 3) && (Enc5 == 2)) { cont[4]--;} If (bit_test(PORTD, 3) == 0) { cont[4]=0;} //La linea anterior no se ocupa debido a que los encoder del mouse no tienen Pb.

    If (usb_enumerated()) {

    usb_put_packet(1, cont, 10, USB_DTS_TOGGLE); }

    }}