Hola a todos, les agradeceria si alguien me puede ayudar, con este programa, por mas que intento no logro obtener la lectura correcta
Tomando de referencia el programa PicUSB de J1M, simplemente estoy usando el canal AD0 del Pic para leer el voltaje de un rango de o a 5V, para luego enviar este valor a traves del puerto USB a la PC, para valores bajo de voltaje menores a 2.5V tengo lecturas correctas de 0 a 127, pero para valores superiores la lectura se mantiene en este valor (127) a pesar de que estoy variando el voltaje de entrada, hasta llegar a 3.7V con una lectura de 205 de alli en adelante la lectura es nuevamente correcta, alguien me podria decir que es lo que estoy haciendo mal...
No es problema del potenciometro por que lo he verificado con un multimetro y este esta OK
#include <18F4550.h>
#DEVICE ADC=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48MHZ)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#define USB_HID_DEVICE FALSE //deshabilitamos el uso de las directivas 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 1 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 3 //size to allocate for the rx endpoint 1 buffer
#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
#define modo recibe[0]
#define param1 recibe[1]
#define param2 recibe[2]
#define resultado envia[0]
void main(void)
{
unsigned char recibe[3]; //declaramos variables
unsigned char adc[1];
unsigned int contador;
setup_adc_ports(ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_2);
set_adc_channel(0);
delay_us(10);
usb_init(); //inicializamos el USB
usb_task(); //habilita periferico usb e interrupciones
usb_wait_for_enumeration(); //esperamos hasta que el PoteUSB sea configurado por el host
while (TRUE)
{
if(usb_enumerated()) //si el PoteUSB está configurado
{
while(TRUE)
{
adc[0] = read_adc();
delay_us(10);
usb_put_packet(1, adc, 1, USB_DTS_TOGGLE);
printf("El valor de AD0 es: %2u\n\r",adc[0]);
delay_ms(500);
}
}
}
}