Hola compañeros:
Resulta que estoy usando CCS y para poner una única entrada del CAD como analógica y el resto como digital no me funciona, en mi caso estoy usando un PIC18F13k50 pero esto tendría que ser extensible a todos los micros.
El código que estoy usando es el siguiente
#include <18F13K50.h>
#device adc=10
#fuses HS, NOWDT, NOPROTECT, NOLVP, USBDIV1, CPUDIV1
#use delay(clock=12000000)
#use rs232(baud=115200, xmit=PIN_B7, rcv=PIN_B5, stream=PC)
#byte ANSEL = 0xF7E //Dirección de memoria del byte ANSEL
#byte ANSELH = 0xF7F //Dirección de memoria del byte ANSELH
float const resoluc = 5.0/1024.0; // Conversión de 10 bits
long value;
float Voltios;
void main(void) {
// 1 = Para ponerlo como analogico
// 0 = Para ponerlo como digital
bit -> 7 6 5 4 3 2 1 0
//Registro ANSEL -> AN7 AN6 AN5 AN4 AN3 -- -- --
ANSEL = 0x80; //10000000 Ponemos únicamente el AN7 a analógico, ver datasheet pic 18F1Xk50
ANSELH = 0;
delay_ms(100);
setup_adc( ADC_CLOCK_INTERNAL );
//setup_adc_ports(0x7 | VSS_VDD); //No se pone ya que lo hemos configurado con ANSEL y ANSELH
enable_interrupts(global); // Habilita interrupciones
while (TRUE)
{
set_adc_channel(7);
delay_ms(1);//Esperamos a que se estabilice el CAD
value = read_adc();//voltios=((fondo_de_escala*read_adc())/2^n), donde n es el número de bit del CAD
Voltios = value * resoluc;
if (Voltios<1)
{
printf("V<1\r\n");
}
else if ((Voltios>1)&&(Voltios<2))
{
printf("1<V<2\r\n");
}
else if (Voltios>2)
{
printf("V>2\r\n");
}
}//Fin bucle infinito
}//Fin void
Si alguien sabe como se hace, aunque sea añadiendo unas lineas de ensamblador sería de agradecer.
Como siempre muchas gracias compañeros.