estabilidad medida A/D PIC16F876

a ver si alguien puede ayudarme con el A/D que me trae loco, no consigo medidas estables os explico:

uso RA0 como entrada analogica (tambien la tengo como entrada con TRIS) selecciono justificacion para leer en ADRESH un resultado de 8 bits, asi desprecio los errores de los dos ultimos bits he probado cambiando el reloj de Fosc/32 a interno (el cristal es de 8MHz) la entrada es simplemente un potenciometro conectado a Vdd, masa y el cursor a la entrada analogica (he probado añadiendo condensador de 100nF y de 10uF) he cambiado el potenciometro de 100K a 10K y a 4K7 hago la medida 60 veces por segundo, tiempo mas que suficiente (creo)

pues nada, que no hay manera, cada pocos segundos va variando la medida sin tocar el potenciometro, sin embargo en los extremos es estable!!

alguien ha trasteado con el A/D??necesito una ayudita

saludos,

Paco

Reply to
Paco Canada
Loading thread data ...

El error quiza venga de la alimentacion del chip o del potenciometro, filtra la alimentación a ambos.

"Paco Canada" escribió en el mensaje news: snipped-for-privacy@uni-berlin.de...

cursor

10uF)

sin

Reply to
Perico

Has configurado correctamente el registro ADCON1 para seleccionar las patillas que funcionaran como entrada analogica? Creo que tienes un fallo en el soft, revisa bien tu programa y seguro das con el error.

Saludos

Reply to
FlyBoy

"FlyBoy" escribió en el mensaje news: snipped-for-privacy@uni-berlin.de...

en

El ADCON1 lo tengo a 0x0E, para una entrada analogica por RA0.

Reply to
Paco Canada

Otro detalle de importancia es que debes darle un tiempo de casi 20us para que se cargue el capacitor de retencion interno del micro(Chold) cuando seleccionas el canal analogico que vas a emplear. Lo que se me hace raro es que solo estas usando un solo canal. Te molestaria colocar el codigo fuente para ver algun posible fallo?

Por cierto cuanto dices que varia la señal leida por el ADC? (en bits significativos)?

Saludos

Reply to
FlyBoy

"FlyBoy" escribió en el mensaje news: snipped-for-privacy@uni-berlin.de...

es

fuente

entro a la rutina de conversion, guardo el valor y no entro en la rutina hasta 16ms mas tarde (aprox. 60Hz) me varia el bit o dos menos significativos, pero es de 8 bits luego son 3 o

4 bits de la medida de 10 bits. alimento con un 78L05 desde un 7812, ya que solo tengo el PIC y una LCD y creo que bien filtrado con 100uF y 100nF en la parte de 5V

RA_TRIS equ 0xFF ; RA0: Pot RA1..RA5: inputs RA_INI equ 0x00 ;

AD_INI equ 0x0E ; RA0 analog rest digital inputs AD_CTRL equ 0x81 ; fosc/32, enable ad

......

Start: ..... movlw RA_INI ; Set ports movwf PORTA ...... movlw AD_CTRL movwf ADCON0 .... SEL_BANK_1 movlw AD_INI ; Set AD conversion movwf ADCON1 movlw RA_TRIS ; Set ports I/O configuration movwf TRISA ..... ..... ..... ReadAD: ; aqui entro cada 16ms bsf ADCON0,GO ReadADwait: btfss PIR1,ADIF ; antes tenia btfsc ADCON0,GO pero tampoco funciona goto ReadADwait movf ADRESH,w bcf PIR1,ADIF

movwf POT_SPD ; adjust speed to direction btfss POT_SPD,7 xorlw 0x7F movwf POT_SPD ; esto es para tener el 0 en el centro del recorrido del potenciometro (bit 7:derecha/izq, bits 0..6:medida ) .... movf POT_SPD,w ; convert pot position to step movwf TEMP ..... movf TEMP,w ; no, pot equal to current speed? xorwf CURRSPD,w btfsc STATUS,Z return ; yes, nothing to do! movf TEMP,w ; no, update speed and menu movwf CURRSPD

pues eso que CURRSPD es la medida que varia el bit menos significativo,

gracias

Reply to
Paco Canada

Dos preguntas:

1) Por el trozo de código que muestras, me lo parece, pero no me queda muy claro. ¿Estás cerrando algún bucle, por software? 2) [Esta pregunta sólo tiene sentido si la respuesta a 1) era "sí".] Cuando dices que te varía el bit menos significativo (de los 8 bits más significativos de la medida), ¿eso lo observas estando cerrando ese bucle?

Si es así, podría ser inestabilidad. Es decir, que la velocidad de "corrección" no se ajustara bien a la inercia de hardware que quieres "regular". Prueba a hacer correcciones cada más tiempo, o a insertarte un umbral, de manera que cuando el error (objetivo - medida) sea inferior a él, _no_ modifiques en absoluto la excitación que va al hardware.

O, antes que eso, prueba a ver cuánto te varían las mediciones en lazo abierto. Es decir, haz que la señal de excitación (ciclo de trabajo, lo que sea) al hardware sea una constante pura y dura. Observa la medida en ese caso.

No sé, es una posibilidad.

Hasta luego.

Reply to
Mochuelo

Yo creo que la rutina de conversión está más o menos bien, pero deberías volver a poner la comprobación de que la conversión ha terminado como la tenías antes. Además, y esto sí podría darte fallos, no sé si es que no has incluido ese trozo de programa, pero no veo que en la rutina cambies al banco 0, antes de modificar el valor de ADCON0. Para mí, debería quedar algo así:

ReadAD: BANK0 BSF ADCON0,GO ;INICIA CONVERSION BTFSC ADCON0,GO ;ESPERA CONVERSION COMPLETA GOTO $-1 MOVF ADRESH,W MOVWF POT_SPD ;SUPONIENDO POT_SPD EN BANCO 0

También puede ser que el problema esté en otro sitio. Asegúrate de que no hay interrupciones por ahí que puedan ocurrir a mitad de la conversión, y de que no se cambia el valor de POT_SPD en otro sitio del programa.

--

Saludos de Jose Manuel Garcia snipped-for-privacy@terra.es http://213.97.130.124

"Paco Canada" escribió en el mensaje news: snipped-for-privacy@uni-berlin.de...

para

o

recorrido

Reply to
Pepitof

de

las interrupciones afectan a la conversion? es que las tengo activadas para el puerto serie.

Reply to
Paco Canada

No, no es que tengan que afectar a la conversión si están bien gestionadas, pero pueden desbaratar cualquier rutina si, por ejemplo, no te aseguras de que al volver de una interrupción ciertos registros mantienen el valor que tenían antes de producirse la interrupción. Además, un fallo en la rutina de interrupción podría estar modificando el valor de POT_SPD, por ejemplo. La cuestión es que no hemos visto esa porción de código, y como no hay nada que lo evite, puede ejecutarse en mitad de la conversión.

Yo de todas formas me inclino más por un problema hardware, probablemente relacionado con la alimentación. ¿No tienes un polímetro? Si no es muy malo, puedes medir el rizado en la alimentación (midiendo tensión alterna). Y desde luego, si pudieras colgar en alguna parte el esquema y el programa completo, sería más fácil buscar el fallo.

--


Saludos de Jose Manuel Garcia
jose.mgg@terra.es
http://213.97.130.124


"Paco Canada"  escribió en el mensaje
news:2th4g0F1vj8fcU1@uni-berlin.de...
> > También puede ser que el problema esté en otro sitio. Asegúrate de que
no
> > hay interrupciones por ahí que puedan ocurrir a mitad de la conversión,
y
> de
> > que no se cambia el valor de POT_SPD en otro sitio del programa.
>
>
> las interrupciones afectan a la conversion? es que las tengo activadas
para
> el puerto serie.
>
>
Reply to
Pepitof

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.