Duda con el conversor an /dig de los pics?

hola,la duda es cuando uno trabaja con el cad ,lo hace en forma de interrupcion? o hay que hacer un repaso
por programa? osea cada ves que uno mueve el potencimetro de la entrada se produce una interrupcion?
o hay que ir si o si con el programa para checarlo? les agradezco de antemano..saludos
 
Hola (de nuevo),

Si estás usando el MikroC, lo chequeás en la rutina común, la no-interruptiva.

Sería algo así

unsigned int dato;
while(1){
dato = ADC_read(0); // el 0 es la entrada AN0
}

Es un dato de 10 bits, ojo que si le definís como short (8 bits) no te lo va a leer con todos los bits.

Saludos
 
Lo trabajas de ambos modos, puedes configurar el AD para que se genere una interrupcion al final de cada conversion, o puedes monitorear el AD para obtener el ultimo dato convertido

Incluso algunos micros (no se si sea el caso del PIC) permiten modos mejorados donde configuras tiempos automatizados de conversion, configuras el timer para que cada cierto tiempo el convertidor tome un dato y lo coloque en memoria....
 
Lo estoy usando en essambler ,

Lo trabajas de ambos modos, puedes configurar el AD para que se genere una interrupcion al final de cada conversion, o puedes monitorear el AD para obtener el ultimo dato convertido
seria algo como que esta todo el tiempo convirtiendo y yo por programa voy revisando?
como seria esa configuracion en el 12f675?
por que yo lo estoy usando asi:

hago la conversion y con el dato paso a una rutina ,termino la rutina y vuelvo a convertir

y lo que no se es si mientras esta haciendo la rutina ,,esta haciendo interrupciones y empezando la rutina
de cero cada vez que uno mueve el potenciometro,o si hay que esperar que termine la rutina para convertir
me explico?
lo ideal seria que constantemente haga interrupciones ,trabajaria mas rapido pero es lo que no se si esta haciendo,,

gracias karopatula y chico3001,saludos
 
Si, ojo que en assembler tenés que esperar a que termine de convertir.

O sea, la conversión AD demora un tiempo de varios ciclos de instrucción.

Hay un flag que te dice cuando terminó, así que leé el dato sólo cuando sepas que terminó la conversión chequeando ese flag.

Es indistinto si lo hacés interruptivo o no. En los 2 casos chequeás el flag.

Te recominedo que lo ahgas en C, pero si lo hacés en assembler tenés que hace lo que puse antes.

Saludos
 
harley

en el caso del 16F877 cuando activas el modulo ADC, tenes que considerar un tiempo de adquisicion para ver el resultado de la convercion (ADRESH:ADRESL).

Dependiendo de la aplicacion podes:

-chequeas si el bit ADIF es 1 continuas con el programa.
-tambien podes chequear el bit GO/DONE que se pone a cero cuando termina la convercion.
-o bien esperas que se inicie la interrupcion cuando termina la convercion.

entonces lo podes hacer interruptivo o no.
 
lmarvg ,,,el 12f675 no tiene el adif ,,,pero si el go/done y es el que estoy usando
pero lo que no c es se inicia sola interrupcion cuando termina la conversion ? o yo por programa tengo que llevarlo a esto ,,,osea a que haga denuevo la conversion ,no se si me estoy expresando bien con la pregunta

gracias por responder ,,saludos
 
Harley

el registro PIR1 del PIC12F675 esta en la direccion de memoria de datos 0C y el bit ADIF es el <6>. La interrupcion se realiza una vez que la convercion se termina , o sea que el dato se pueda leer de los registros ADRESH y ADRESL.
Si no utilizas la interrupcion proba con:

btfss PIR1,ADIF
goto $-1
bcf PIR1,ADIF

.....(RESTO DE PROGRAMA)

recorda que el registro PIR1 se encuentra en el banco 0 de la memoria.

en particular yo utilizo el servicio de interrupcion para leer el valor de la convercion.

Bueno espero que te ayude saludos.
 
Puedes usar el modulo CCP en modo compare, creo, y cada cierto tiempo te genera una conversion del adc puedes mirarlo en el datasheet, este modulo emplea el timer2, lo mejor es que lo hace todo por hardware no necesitas usar las interrupciones del timer.
 
Atrás
Arriba