Escrito originalmente por micro_pepe
Hola, tengo una duda a cerca de la interrupcion en ccs con el conversor a/d.
Si yo pongo la instruccion: i=read_adc();
¿inmediatamente despues se ejecuta la siguiente instruccion, y cuando termine la conversión salta a la rutina de interrupción?
y ademas ¿cuando, la variable i tiene un valor valido?¿al saltar la interrupción?
Por otro lado me gustaria saber cuanto tiempo se debe esperar al cambiar de un canal de adquisicion a otro antes de una nueva conversion.
Saludos y gracias por atenderme.
No, mira si quieres ocupar la interrupcion del ADC tienes que hacer lo siguiente:
#INT_AD
AD_isr()
{
i=read_ADC(ADC_READ_ONLY);
valor_i_valido=TRUE;
}
void main()
{
.
.
.
enable_interrupts(INT_AD);
enable_interrupts(GLOBAL);
valor_i_valido=FALSE
x=read(ADC_START_ONLY); // Se ejecuta y luego salta a la siguiente instrucción, no se espera..
.
.
.
if (valor_i_valido==TRUE)
{Introduces lo que quieres hacer con el valor i}
}
Con lo del tiempo de espera para cambiar de canal, yo te recomiendo que hagas un delay_ms() de 1 ms, y yo creo que es suficiente..........
Otra cosa, hay una directiva que se ocupa para obtener el valor del ADc, la cual es #device ADC=10 o #DEVICE ADC=8, no se si para el pic q estas ocupando aplica, es decir de cuantos bits es el ADC interno del micro????
Si es de 10, entonces puedes ocupar ambas directivas que mencione, solo que hay que hacer una correcion, cuando definas el valor i lo tienes que hace de la siguiente manera
Si ocupas #DEVICE ADC=10 entonces int16 i=0; los valores de i van desde 00 hasta 0x03FF
Si ocupas #device ADC=8 entonces int i=0; los valores de i van desde 0 hasta 255, ojo aqui solo se toman los 8 bits menos signifdicativos
Espero haberte ayudado aunque sea un poco..............SALUDOS