Podrias dar mas datos? sobre que ADC estamos hablando?
La otra es que si es externo, lo mejor es que uses interrupciones para tomar las medidas. Aunque imagino que vos se las tenes que pedir.
Hola, el adc es ads7841 es de 12bits por SPI utlilizo esto:
configuracion:
setup_spi(SPI_MASTER|SPI_H_TO_L|SPI_XMIT_L_TO_H|SPI_CLK_DIV_16);
tomar datos:
output_low(CS);
spi_write(220);/* canal 3*/
flujoh=spi_read(0);
flujol=spi_read(0);
output_high(CS);
flujoh = flujoh & 0x7F;
flujo16bits=make16(flujoh,flujol);//convertimos a un registro de 16Bits
flujo16bits=flujo16bits>>3;
enviar[1]=flujo16bits;
eso en el ciclo do while y lo envio por usb del tipo bulk que esta configurado asi:
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#DEFINE USB_HID_DEVICE TRUE
#define USB_EP1_TX_ENABLE USB_ENABLE_INTERRUPT //turn on EP1 for IN bulk/interrupt transfers
#define USB_EP1_TX_SIZE 8
#define USB_EP1_RX_ENABLE USB_ENABLE_INTERRUPT //turn on EP1 for OUT bulk/interrupt transfers
#define USB_EP1_RX_SIZE 8
#include <pic18_usb.h>//Funciones de bajo nivel(hardware) para la serie PIC 18Fxx5x que serviran en usb.c
#include <usb_desc_hid.h>//Aqui es donde van las descripciones de este dispositivo (como lo reconocera windows)
para el envio:
usb_put_packet(1, enviar, 8, USB_DTS_TOGGLE);