Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

21/04/2009 #1


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
21/04/2009 #2


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
21/04/2009 #3
Moderador

Avatar de Chico3001

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....
21/04/2009 #4


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
21/04/2009 #5


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
21/04/2009 #6


en c no me acuerdo como era,hace rato aue no programo,,
el tema es entonces como lo hago interruptivo o no? lo demas ya se como funciona,,saludos
21/04/2009 #7


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.
21/04/2009 #8


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
21/04/2009 #9


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.
21/04/2009 #10


lmarvg ,

tenes razon se me escapo lo del pir1,,,como dije antes hace rato no programo y estoy medio colgado
gracias saludos
22/04/2009 #11


La interrupción sólo se ejecuta si la activás en el Bit Enable de la interrupción correspondiente
22/04/2009 #12


En los atmega tiene adc en modo libre en cada 13uS muestrea sin necesidad de ejecutar una rutina cada que quieras tener una convercion, solo lo lees de los registros del adc.
22/04/2009 #13


cristian en que lenguaje se programan los atmega?saludos
22/04/2009 #14
Moderador

Avatar de Chico3001

Igual que los PIC, C o assembler para AVR
23/04/2009 #15


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.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.