Autor Tema: Duda usb pic bulk transfer simula y no funciona  (Leído 1269 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alejandromoises

  • PIC10
  • *
  • Mensajes: 1
Duda usb pic bulk transfer simula y no funciona
« en: 12 de Agosto de 2014, 15:15:18 »
Hola a todos! El cuento es el siguiente.... Estoy en mi proyecto de pasantia desarrollando un sistema que sense la presion y la muestre en un grafica en labview junto con otros periquitos mas :D! desarrolle un codigo con ayuda del proyecto picUSB para el envio de los 10bits del adc del pic184550 y su correspondiente programa en labview... el problema es que lo simulo en proteus y funciona a la perfeccion muestra el dato recibido entre 0 y 1023 pero a la hora de conectar el pic en la realidad, labview no lee los datos... ya revise bien el hardware es un hardware sencillo solo el pic su crystal par de leds para verificar la conexion un capacitor y un potenciometro para la simular la señal analoica.... :( alguna idea de que puede estar pasando? adjunto el codigo para que vean

#include <18F4550.h>
#device adc=10
#include <stdio.h>
#include <stdlib.h>
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses XTPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL1,CPUDIV1,VREGEN
#use delay(clock=48M)



#define USB_HID_DEVICE     FALSE             //deshabilita el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //habilita el EP1(EndPoint1) para interrupcion transmision en trasferencias bulk
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //habilita el EP1(EndPoint1) para interrupcion recepcion en transferencias bulk
#define USB_EP1_TX_SIZE    2                 //tamaño asignado para el buffer de transmision del endpoint 1
#define USB_EP1_RX_SIZE    2                 //tamaño asignado para el buffer de recepcion del endpoint 1

#include <pic18_usb.h>     //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>         //Configuración del USB y los descriptores para este dispositivo
#include <usb.c>           //handles usb setup tokens and get descriptor reports


//Asignacion de variables
#define LED_ON  output_high
#define LED_OFF output_low

#define modo      recibe[0]
#define param     recibe[1]
#define pres0     envia[0]
#define pres1     envia[1]

//declaramos variables globales

int8 recibe[2];                 
int8 envia[2];
//---------------------------------------
unsigned char  byte_high,byte_low;
int dat0,dat1,dat2,dat3,h,cont,cont1,cont2,cont3,j;
int dec7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};   //7seg hex 0-9
int16 dato=0,valor_b=0;
unsigned int32 total;
//---------------------------------------
void main(void)
{
   //-----------------------
   disable_interrupts(GLOBAL);     //deshabilitamos todas las interrupciones
   
   h=0;
   cont=0;
   j=0;
   setup_port_a(AN0_TO_AN1_ANALOG|VREF_VDD);//canal 0 y 1 analógico|Habilita voltaje de referencia
   setup_adc(ADC_CLOCK_INTERNAL);//reloj interno

   SET_TRIS_D(0x00);
   SET_TRIS_B(0x30);   
   //SET_TRIS_C(0x00);
   SET_TRIS_E(0x00);
 
   LED_OFF(PIN_B1);                   //Apagamos led Verde
   LED_ON(PIN_B0);                    //Encendemos led Rojo
   
   usb_init();                      //inicializamos el USB
   usb_task();                      //habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      //esperamos hasta que el PicUSB sea configurado por el host
     
   LED_OFF(PIN_B0);                   //Apagamos el led Rojo
   LED_ON(PIN_B1);                    //encendemos led verde
   
   
 
  while (TRUE)
   {
      if(usb_enumerated())          //Si el PicUSB está configurado
      {
         if (usb_kbhit(1))          //Si el endpoint de salida contiene datos del host
         { 
            usb_get_packet(1, recibe, 2); //Lee el paquete de tamaño 2bytes del endpoint 1 y almacenamos en recibe
                       
            if (modo==1)//modo salida digital d1,d2
            {
              if(input(PIN_B4)==0)
               { 
                  delay_ms(20);
                  if(j==0)j = 1;
                  else if(j==1)j = 0;   
               }
              else if(input(PIN_B5)==0)
               {
                  delay_ms(20);
                  j=0;
                  cont=0;
                  cont1=0; cont2=0; cont3=0;
               }
               set_adc_channel(0); // Tomamos datos del canal 0
               delay_us(20);        // Hacemos un retardo de 4 ms
               dato=read_adc();    // Leemos el dato
               total=4.8485*dato;//conversión del dato a psi psi=[0.70371*dato]
               dat0=total/1000;
               dat1=(total%1000)/100;
               dat2=((total%1000)%100)/10;
               dat3=((total%1000)%100)%10;
               
               valor_b=dato;
               byte_high=(dato>>8);
               byte_low=valor_b;
               delay_us(100);
               //if (byte_low < 256)
                  pres0=byte_low;
               //if (byte_high < 4)
                  pres1=byte_high;
               usb_put_packet(1,envia,2,USB_DTS_TOGGLE); //enviamos el paquete de tamaño 2byte del endpoint 1 al PC
                 
               }                 
               
               
            else
               LED_OFF(PIN_B6);
         } 
      }
   }
}