Autor Tema: conversión A/D  (Leído 3054 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado TREMENS

  • PIC16
  • ***
  • Mensajes: 125
conversión A/D
« en: 11 de Noviembre de 2006, 12:30:28 »
;****código******

medida var byte

Obtenerdato:
 
 ADCON1 =%00000100            ;configura PortA 0,1, 3 en conversores A/D
       
     
 
sensor1:                   
ADCON0 =%00000001            ;activar canal 0 a Fosc/2

medicion:          ;subrutina para leer el conversor A/D
Pauseus 50              ;pausa par setear el canal
ADCON0.2 = 1            ;iniciar conversión

preguntositermino:
if ADCON0.2 = 1 then goto preguntositermino ; si GO/DONE=1 significa
                                ;q no terminó conversión entonces
                                ;sigo preguntando hasta que sea 0
medida=ADRESH                   ;cuando es 0 guardo el valor de 8bit
                                ; en medida

              goto sensor1      ;voy a sensor1 y repito el ciclo
     
--------------------------------------------------------------------

1)Mi primera duda es si está bien el programa de arriba

2) si quiero obtener un Tad=32Tosc=Fosc/32, activando el canal 0,1 y 2 es correcto poner ADCON0=%10011010 ¿   

3)   Escribiendo ADCON1=%00000001 estoy configurando como entrada analógica a A7,A6,A5,A4,A2,A1,A0 y como entrada de Vref+ a A3, Vref- la toma internamente de la masa q la que conecté el pic  ¿?

4)leyendo observé que Tad debe ser por lo menos 1,6 useg. Si uso un reloj de 20Mhz a  y haciendo la conversión a fosc/32 obtengo exactamente 1.6useg.
Es dudosa esa conversión porq estoy exactamente al límite??? Me conviene usar un Tad un poquito mayor a 1.6useg. para asegurarme que funciona bien???
Pregunto esto porque quiero hacerla lo más rápido posible, al igual qu el programa quiero que sea lo más rápido posible.

Espero que me ayuden con su experiencia.
Gracias.

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: conversión A/D
« Respuesta #1 en: 11 de Noviembre de 2006, 15:16:26 »
ADCON1 =%00000100            ;configura PortA 0,1, 3 en conversores A/D
      
Bien.
     
ADCON0 =%00000001            ;activar canal 0 a Fosc/2
       
Bien.

medicion:          ;subrutina para leer el conversor A/D
Pauseus 50              ;pausa par setear el canal
ADCON0.2 = 1            ;iniciar conversión
       
Aquí no es necesario y no se recomienda que manipules este bit; este bit se activa por hardware.
Elimina esa línea de código.


preguntositermino:
if ADCON0.2 = 1 then goto preguntositermino ; si GO/DONE=1 significa
                                ;q no terminó conversión entonces
                                ;sigo preguntando hasta que sea 0
medida=ADRESH       ;cuando es 0 guardo el valor de 8bit
                                ; en medida
       
Bien.

      goto sensor1      ;voy a sensor1 y repito el ciclo
--------------------------------------------------------------------
       
Sería mejor que lo mandaras a preguntositermino.
No es necesario que reescribas toda la configuración al µicro.

1)Mi primera duda es si está bien el programa de arriba
       
Si, solo ese pequeño detalle.

2) si quiero obtener un Tad=32Tosc=Fosc/32, activando el canal 0,1 y 2 es correcto poner ADCON0=%10011010 ¿   
Si para lo de Fosc/32; No para lo del canal 2, con esa configuración estás seleccionando el canal 3 solamente.

3)Escribiendo ADCON1=%00000001 estoy configurando como entrada analógica a A7,A6,A5,A4,A2,A1,A0 y como entrada de Vref+ a A3, Vref- la toma internamente de la masa q la que conecté el pic  ¿?
Bien.

4)leyendo observé que Tad debe ser por lo menos 1,6 useg. Si uso un reloj de 20Mhz a  y haciendo la conversión a fosc/32 obtengo exactamente 1.6useg.
Es dudosa esa conversión porq estoy exactamente al límite??? Me conviene usar un Tad un poquito mayor a 1.6useg. para asegurarme que funciona bien???
Pregunto esto porque quiero hacerla lo más rápido posible, al igual qu el programa quiero que sea lo más rápido posible.
Nunca he trabajado con estas frecuencias de conversión, siempre lo hago con el RC interno (4Mhz-->19.6µs). Supongo que debería funcionar.

Si lo quieres lo más rápido posible, utiliza ensamblador; el BASIC no es lo más eficiente en ese sentido.



Espero te sirva la explicación.
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee

Desconectado TREMENS

  • PIC16
  • ***
  • Mensajes: 125
Re: conversión A/D
« Respuesta #2 en: 13 de Noviembre de 2006, 11:13:58 »
1)Me dices que no es necesario ni recomendable la línea ADCON0.2 = 1            ;iniciar conversión
Pero cómo sabe el micro cuando iniciar la conversión

2)Sería mejor que lo mandara a preguntositermino????
Esa rutina solamente espera hasta que termina la conversion y yo debo hacer un goto para adquirir un nuevo dato, en todo caso iría a medicion, o no??

3)creo que basandome en las dos preguntas anteriores, es fundamental que me expliques bien como se inicia la conversion, siempre tuve entendido que mas allá del lenguaje debes hacerlo por software
       

Desconectado Mario

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 873
Re: conversión A/D
« Respuesta #3 en: 13 de Noviembre de 2006, 13:23:29 »
1)Me dices que no es necesario ni recomendable la línea ADCON0.2 = 1            ;iniciar conversión
Pero cómo sabe el micro cuando iniciar la conversión
La conversión inicia cuando prendes el convertidor ADCON0.0=1 y activas el ADCON0.2
Tienes razón  :shock:

2)Sería mejor que lo mandara a preguntositermino????
Esa rutina solamente espera hasta que termina la conversion y yo debo hacer un goto para adquirir un nuevo dato, en todo caso iría a medicion, o no??
Estás en lo correcto.

3)creo que basandome en las dos preguntas anteriores, es fundamental que me expliques bien como se inicia la conversion, siempre tuve entendido que mas allá del lenguaje debes hacerlo por software
No necesariamente.
Tu haces todo paso a paso, como aquí:
http://www.microengineeringlabs.com/resources/samples/pbp/a2d8.bas
http://www.rentron.com/PICX2.htm

Pero me parace mejor hacerlo asi:
http://www.microengineeringlabs.com/resources/samples/x1/pbp/adcin3x.bas
Con la intrucción ADCIN.

Te repito que si necesitas adquicisión rápida, hazlo en ensamblador e inclúyelo en PBP.


Siento confundirte, en ocaciones me confundo también..... pero ya no pasará  :)
La buena administración es utilizar el sentido común y la regla de oro; aunque el sentido común no es tan común como quisiéramos que fuera y, quien tiene el oro, hace las reglas.
George Terry

"A loser will defeat a genius with hard work"
Rock Lee