TODOPIC
Simuladores, editores de PCB, etc => Simuladores de circuitos => Mensaje iniciado por: JoseV 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
-
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.
-
O podrías testear el flag hasta que el mismo te avise que la conversión termino.
Saludos
-
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...
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.
-
ah!!!! :oops: :oops: :oops:
que pena!!! jeje se nota que de ASM nada no? ;-)
-
jeje no hay problema :mrgreen:
-
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
-
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ó.
-
Revisa por aquí (http://www.todopic.com.ar/foros/index.php?topic=27929.0) para que te veas como trabaja el módulo de conversión analógica/digital.
Saludos!
-
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.
;****************************************************************
;******************** 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!
-
cuando se elige el canal de lectura se debe esperar un tiempo, por lo de la carga del condensador del ADC
-
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?
-
del datasheet del pic en cuestion