Autor Tema: Mensaje de error con ADC  (Leído 9659 veces)

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

JoseV

  • Visitante
Mensaje de error con ADC
« en: 13 de Octubre de 2009, 20:11:03 »
Hola.
¿Porqué me sale un mensaje de error cuando activo el conversor ADC? (Isis 7,2)

INICIO
   MOVLW   B'01000001'
   MOVWF   ADCON0
   MOVLW   B'00000001'
   TRIS   0X06
   BCF      GPIO,1
   BSF      ADCON0,GO   <- al ejecutar esta instruccion
   BTFSC   ADCON0,GO   
   GOTO   $-1

"ADC conversion started before 'wait' time has expired following previus conversion or chanel change"

Aunque le ponga por delante surutinas de espera, me da el mensaje. Luego no pasa nada el programa funciona pero algo no parece ser que le guste.
Saludos
JoseV

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mensaje de error con ADC
« Respuesta #1 en: 13 de Octubre de 2009, 20:25:46 »
Hola, es que la subrutina de espera no va adelante... va detrás.

"ADC conversion started before 'wait' time has expired following previus conversion or chanel change"

"La conversión ADC inició antes de que el tiempo de espera haya expirado reflejando una conversión o canal previo."

Pon el delay de 20us antes de levantar la bandera de GO.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Mensaje de error con ADC
« Respuesta #2 en: 13 de Octubre de 2009, 23:29:18 »
O podrías testear el flag hasta que el mismo te avise que la conversión termino.

Saludos
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mensaje de error con ADC
« Respuesta #3 en: 13 de Octubre de 2009, 23:47:15 »
O podrías testear el flag hasta que el mismo te avise que la conversión termino.

Saludos

No, eso ya lo hace su programa...

Código: [Seleccionar]
   BSF      ADCON0,GO   <- al ejecutar esta instruccion
   BTFSC   ADCON0,GO   
   GOTO   $-1

El problema reside en que el pic acaba de ser encendido y ya está queriendo adquirir la medición ADC sin siquiera esperar 20us para que el sample&hold copie el voltaje a medir.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Mensaje de error con ADC
« Respuesta #4 en: 13 de Octubre de 2009, 23:58:19 »
ah!!!!  :oops: :oops: :oops:

que pena!!! jeje se nota que de ASM nada no?  ;-)
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mensaje de error con ADC
« Respuesta #5 en: 14 de Octubre de 2009, 00:19:07 »
jeje no hay problema  :mrgreen:

JoseV

  • Visitante
Re: Mensaje de error con ADC
« Respuesta #6 en: 14 de Octubre de 2009, 05:31:03 »
Hola. Gracias por vuestras respuestas. Aunque no afectara al funcionamiento, pero siempre es conveniente saber el porqué de las cosas.
Ahora ya no da mensaje de error

   MOVLW   B'01000001'
   MOVWF   ADCON0
   MOVLW   B'00000001'
   TRIS           0X06
   BCF      GPIO,1
   MOVLW   B'01010000'
   OPTION   
   CALL           _.1S
   BSF      ADCON0,GO
   BTFSC   ADCON0,GO
   GOTO   $-1
        ......

migsantiago, como tu me indicas, antes de levantar el flag lo mando a una subrutina de espera, de .1 seg. (porque ya está hecha) y ya no se atraganta en el tiempo.
Saludos
JoseV

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mensaje de error con ADC
« Respuesta #7 en: 14 de Octubre de 2009, 17:48:04 »
Hola. Gracias por vuestras respuestas. Aunque no afectara al funcionamiento, pero siempre es conveniente saber el porqué de las cosas.

Bueno, la primer muestra tomada sería errónea ya que el valor del sample&hold no es el correcto... es aleatorio al no estar bien cargado. Pero bueno, qué bien que ya quedó.

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6759
Re: Mensaje de error con ADC
« Respuesta #8 en: 14 de Octubre de 2009, 18:38:38 »
Revisa por aquí para que te veas como trabaja el módulo de conversión analógica/digital.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado matucho

  • PIC10
  • *
  • Mensajes: 7
Re: Mensaje de error con ADC
« Respuesta #9 en: 24 de Octubre de 2011, 15:28:50 »
Hola a todos esta es mi primera vez en el foro, ademas estoy empezando con la programacion en ASM.
Tengo un problema similar a l de JoseV
El microcontrolador utilizado es un PIC16F1939, el circuito se basa en 3 potenciometros mediantes los cuales deseo controlar el dutyi de 3 PWM.
Al simular en ISIS la convercion AD resulta buena pero me salen MUCHOS mensajes de erro del tipo:

ADC conversion started before wait time has expired following previous convercion or chanel change

Adjunto el fragmento del codigo donde se realiza la convercion AD donde supongo q recide el problema, puse un dalay antes de realizar la convercion como aconseja el fabricante pero sigo teniendo los mensajes de error. En caso de ser necesario adjunto el codigo completo.

Citar
;****************************************************************
;********************  CONFIGURACION DE TMR1 ********************
;****************************************************************

      BANKSEL T1CON
      movlw   b'00110000'   ;Fuente de Clock Fos/4, prescale en 8,Apagado
      movwf   T1CON
      movlw   b'00000000'   ;Desactivo Disparos
      movlw   T1GCON


;****************************************************************
;***************  CONFIGURACION DE CONVERSORES AD ***************
;*   AN12 (RB0, pin 33) ===>> Dimer Red    \\   Ya definidas      *
;*   AN10 (RB1, pin 34) ===>> Dimer Green  >>  como entradas      *
;*    AN 8 (RB2, pin 35) ===>> Dimer Blue  //   analogicas      *
;****************************************************************
; A este registro lo configuro solo al principio, porq determina el clock de convercion, tensiones de referencia
;y tipo de justificacion, parametros q no necesito afectar luego

      BANKSEL   ADCON1
      movlw   b'01100000'   ;b7=0 Justificado a izquierda (ADRESH tiene los 8 mas significativos,
      movwf   ADCON1      ;b6-b4 => clock = Fosc/64, b2 => V-=Vss, b1-b0 => V+=Vdd,
      movlw    b'00000001'   ;Selecciono AN0, GO=0, AD ON
      movwf   ADCON0
   
;****************************************************************
                call    PAUSA
CONV:
;CONVERCION Dimer Red ==> Determino Duty Red
           BANKSEL   ADCON0
      movlw   b'00110011'   ;b6-b2 selecciono AN12 (dimer red), b1=1 => convercion en proceso,
      movwf   ADCON0      ;b0=1 => ADC on
      btfsc   ADCON0,GO_NOT_DONE   ;testeo la bandera GO si esta es 1 todabia esta realizandoce la convercion
      goto    $-1               ;y me mantengo en bucle, si es 0 la convercion se termino y salto una linea
      BANKSEL   ADRESH            
      movfw   ADRESH            ;tomo la parte alta de la convercion y lo muevo a W
      BANKSEL CCPR1L            
      movwf   CCPR1L            ;muevo W a CCPR1L q determina el duty de PRM Red
      call    PAUSA
         
;CONVERCION Dimer Green ==> Determino Duty Green
      BANKSEL   ADCON0
      movlw   b'00101011'   ;b6-b2 selecciono AN10 (dimer green), b1=1 => convercion en proceso,
      movwf   ADCON0
      btfsc   ADCON0,GO_NOT_DONE
      goto    $-1
      BANKSEL   ADRESH
      movfw   ADRESH
      BANKSEL CCPR2L
      movwf   CCPR2L            ;muevo W a CCPR1L q determina el duty de PRM green
      call    PAUSA
            
;CONVERCION Dimer Blue ==> Determino Duty Blue
      BANKSEL   ADCON0
      movlw   b'00100011'   ;b6-b2 selecciono AN8 (dimer blue), b1=1 => convercion en proceso,
      movwf   ADCON0
      btfsc   ADCON0,GO_NOT_DONE
      goto    $-1
      BANKSEL   ADRESH
      movfw   ADRESH
      BANKSEL CCPR3L
      movwf   CCPR3L            ;muevo W a CCPR1L q determina el duty de PRM Blue
      call    PAUSA      
      
      goto    CONV            ;me mantengo en un ciclo realizando las converciones AD sucesivamente

;****************************************************************

PAUSA:
      BANKSEL   PIR1      ;selecciono bank de PIR1 donde tambien esta TCON y TMR1
      bcf      PIR1,TMR1IF
      clrf   TMR1L      ;Cago 0000 en el TMR1L
      clrf   TMR1H
      bsf      T1CON,TMR1ON;prendo TMR1
      btfss   PIR1,TMR1IF   ;Si TMR1IF es 1 salta la linea
      goto   $-1         ;mientras sea cero sigue preguntando
      bcf      T1CON,TMR1ON
      return

Desde ya muchas gracias por su ayuda!

« Última modificación: 24 de Octubre de 2011, 15:34:49 por matucho »

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1689
Re: Mensaje de error con ADC
« Respuesta #10 en: 24 de Octubre de 2011, 20:35:33 »
cuando se elige el canal de lectura se debe esperar un tiempo, por lo de la carga del condensador del ADC
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado matucho

  • PIC10
  • *
  • Mensajes: 7
Re: Mensaje de error con ADC
« Respuesta #11 en: 25 de Octubre de 2011, 22:57:54 »
De diez lo hice andar! Muchas gracias!!!!!
Le puse una pausa arbitraria, pero no se con exactitud cuanto debe durar la misma. De donde puedo sacar el dato?

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1689
Re: Mensaje de error con ADC
« Respuesta #12 en: 25 de Octubre de 2011, 23:13:03 »
del datasheet del pic en cuestion
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA