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
! 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>>
;
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);
}
}
}
}