Colocando esta directiva en la parte de preprocesado (por ejemplo,justo después de #include "18F2550.h") te debería valer:
#device ADC=10
De todas formas,tl y como dices te sería mas facil usando las funciones que ya trae implementadas CCS para el manejo de los conversores:
Para configurar los canales que vas a usar y cual va a ser la tension de referencia...
setup_adc_ports(RA0_RA1_RA3_ANALOG); // RA0,RA1 y RA3 entradas analógicas // // Vref = VDD
setup_adc(ADC_CLOCK_INTERNAL); // Reloj interno
Si vas a usar varios canales,antes de hacer una lectura en una canal,debes activarlo:
set_adc_channel(0); // Activamos canal 0
Si solo usaras un canal,con activarlo una única vez al principio sería suficiente.
Y cuando quieras hacer una lectura en alguno de los canales,basta con hacer lo siguiente:
valor = read_adc(); // Sin olvidar que si el ADC está a 10 bits,la variable valor debe // ser mínimo una word.
Cuando usas un único canal,debes dejar pasar un tiempo mínimo entre lectura y lectura,que ronda los 10 us.Si por el contrario,realizas lecturas en diferentes canales,este tiempo mínimo es mayor.Estos tiempos vienen especificados en el datasheet.
Te pongo un ejemplo de un voltímetro que hice a ver si te ayuda
Codigo:
#include <16F876.h>
#device adc=8
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT
#use delay(clock=10000000)
#include <math.h>
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#byte PORTB = 0x06
#byte PORTC = 0x07
void calcula_voltaje(long int val,long int &dec,int &ent)
{
const int escala = 255; // Escala del conversor ADC (8 bits)
const float v_max = 25.2; // Voltaje máximo que entrega la fuente
float voltaje,fraccion;
voltaje = (val*v_max)/escala;
ent = floor(voltaje);
fraccion = fmod(voltaje,ent);
fraccion = fraccion*10;
fraccion = floor(fraccion);
dec = floor(fraccion);
}
void separa_unidades(int entero,int &uni,int &dec)
{
if (entero < 10)
{
uni = entero;
dec = 10;
}else {
dec = entero/10;
uni = entero - (dec*10);
}
}
void tabla_display(int &x,boolean punto)
{
if (punto)
{
switch(x) {
case 0: x = 0b00010000;
break;
case 1: x = 0b01111100;
break;
case 2: x = 0b00100010;
break;
case 3: x = 0b00101000;
break;
case 4: x = 0b01001100;
break;
case 5: x = 0b10001000;
break;
case 6: x = 0b10000000;
break;
case 7: x = 0b00111100;
break;
case 8: x = 0b00000000;
break;
case 9: x = 0b00001000;
break;
default: x = 0b11111111;
break;
}
}else {
switch(x) {
case 0: x = 0b00010001;
break;
case 1: x = 0b01111101;
break;
case 2: x = 0b00100011;
break;
case 3: x = 0b00101001;
break;
case 4: x = 0b01001101;
break;
case 5: x = 0b10001001;
break;
case 6: x = 0b10000001;
break;
case 7: x = 0b00111101;
break;
case 8: x = 0b00000001;
break;
case 9: x = 0b00001001;
break;
default: x = 0b11111111;
break;
}
}
}
void visualiza_displays(int uni,int transistor)
{
delay_ms(1);
PORTB = uni;
delay_ms(1);
switch(transistor) {
case 1: output_high(PIN_C5);
break;
case 2: output_high(PIN_C6);
break;
case 3: output_high(PIN_C7);
break;
default:
break;
}
delay_ms(5);
output_low(PIN_C5);
output_low(PIN_C6);
output_low(PIN_C7);
}
void main()
{
long int valor,parte_decimal;
int parte_entera,decimas,unidades,decenas;
setup_adc_ports(RA0_RA1_RA3_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
set_tris_A(0b00001011);
set_tris_B(0b00000000);
set_tris_C(0b00000000);
port_b_pullups(FALSE);
for(;
{
valor = read_adc();
calcula_voltaje(valor,parte_decimal,parte_entera);
separa_unidades(parte_entera,unidades,decenas);
decimas = parte_decimal;
tabla_display(decimas,FALSE);
tabla_display(unidades,TRUE);
tabla_display(decenas,FALSE);
visualiza_displays(decimas,1);
visualiza_displays(unidades,2);
visualiza_displays(decenas,3);
delay_ms(1);
}
}