Autor Tema: Error de lectura del AD0 de un Pic18f4550  (Leído 1498 veces)

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

Desconectado Alexandra

  • PIC10
  • *
  • Mensajes: 22
Error de lectura del AD0 de un Pic18f4550
« en: 26 de Mayo de 2009, 19:58:35 »
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

Código: [Seleccionar]
#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);
               }
      }
  }
}
« Última modificación: 27 de Mayo de 2009, 10:27:16 por Alexandra »

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Error de lectura del AD0 de un Pic18f4550
« Respuesta #1 en: 28 de Mayo de 2009, 23:48:43 »
Posiblemente requieras de un potenciómetro de precisión no has generado una simulación con proteus y observar que fenómeno te da??


 

anything