Autor Tema: Ayuda con el conversor A/D del 16F876  (Leído 12169 veces)

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

Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #30 en: 27 de Diciembre de 2005, 21:50:00 »
Hola.... una duda Muchas risas

he estado tomando muestras a traves de salidas port puerto C y B (AdresH y adresL) a traves de un potenciometro para variar la tension de entrada mas o menos como un Lm35 y esto son los resultados:
mv ..... decimal ..... hex
170        37             25
180        39             27
190        45             2d
210        45             2d
220        47             2f
230        52             34
240        53             35
250        no varia la salida
260        55             37


es decir, de 190 a 220 tiene la misma salida  y en 250mv no varia la salida con respecto a 240mv....
y da un salto enorme de 180mv a 190mv en la salida del PIC.

alguien sabe pq? esto lo he hecho como medida si tuviera un lm35 que varia cada 10mv/ºC pero asi en 19, 20 21 y 22 ºC daria la misma salida el PIC, por eso es necesario un amplificador, para agrandar las señales y tener mas margen de cambio?

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #31 en: 28 de Diciembre de 2005, 05:12:00 »
Escrito originalmente por dj_valle
Hola.... una duda Muchas risas



Realmente es muy raro lo que muestras y solo lo adjudico a que tengas algún problema de ruido o a que tu muestreo sea muy bajo.

Aumentale el tiempo de muestreo, es decir el tiempo en que no haces "nada" despues de sacar por el puerto los datos.  El tiempo de establecimiento es proporcional a la impedancia externa.  Te aconsejo hagas caso a Microchip y utilices algúna impedancia del orden de los 10K o menor para tu potenciómetro.

Por último todo esto "suponiendo" que haces las cosas bien, jamás tuve semejante problema.

Si trabajas con un conversor de 5V / 1024 muestras, tienes una precisión de 5mV
Lograr tal precisión te digo NO ES FACIL , porqué? precisamente por cuestiones de ruido eléctrico.  Es por eso que cuando la gente pide conversores A/D de 12 o 16 bits uno no sabe si reirse o si admirar a quien pretende utilizar tal precisión.  No solo es complicado técnicamente eliminar el ruido sino que también es muy costoso.

Los ultimos bits terminan variando precisamente por razones de ruido de conmutación de la fuente o el ruido blanco presente en todas las líneas eléctricas y semiconductores.  Si usas un osciloscopio debieras ver este ripple.  Si utilizas un multímetro digital tal vez no porque estos equipos gralmente toman un valor RMS y lo integran (esto si el multímetro es bueno) .  Si tu multímetro es de marca poco reconocida y te salió un par de dólares... entonces ni siquiera confíes en el.

Vuelve a probar con un potenciómetro menor y un mayor tiempo entre muestras y vuelve a postear tus resultados.

Si piensas utilizar esos sensores de temperatura te aconsejo lo "escales" con algún operacional con ganancia 3 a 1, o 10 a 1.
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #32 en: 28 de Diciembre de 2005, 08:48:00 »
Hola

aqui te posteo los resultados creados con un potenciometro 4k7 y un retardo de mas o menos 1 segundo entre muestras:

mv ......... dec
230 ........ 49
235 ........ 52
240 ........ 53
257 ........ 55
267 ........ 57
270 ........ 60
275 ........ 61
300 ........ 63
308 ........ 65
310 ........ 68
315 ........ 69
337 ........ 71

los rangos que dan saltos es porque la salida me la detectaba con el mismo valor que el anterior com 280mv, 285mv, 290mv. Puede que sea por el polimetro que me marque mal la entrada.... alguien me deja un fluke?

de todas formas si parece que cada bit de conversion varie 5mv a la entrada. Ampliare la señal con un operacional a ver que obtengo a la salida.

gracias

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #33 en: 28 de Diciembre de 2005, 12:57:00 »
Ahora me queda mas claro, fijate , si tu tensión de referencia es 5,00V , entonces cada bit significará 4.88mV
Haciendo algunos redondeos, tu tabla quedaría así.

230   . . . . . . 47
235   . . . . . . 48
240   . . . . . . 49
257   . . . . . . 52
267   . . . . . . 54
270   . . . . . . 55
275   . . . . . . 56
300   . . . . . . 61
308   . . . . . . 63
310   . . . . . . 63
315   . . . . . . 64
337   . . . . . . 69

Pero esto es teniendo en cuenta que tu voltaje de referencia no oscile en ningun momento ni en lo más mínimo.  Pon un capacitor de .1uF entre VCC y GND bien pegado al microcontrolador.

Por otra parte, en tus datos veo que el salto es en los 300mV.  Esto se puede deber precisamente al multímetro.   Me preguntarás porque... bien, te paso a contar que es lo que me parece.
Los multímetros trabajan en un rango amplio de tensiones, esto lo logran todo con una misma lógica de conversión interna la cual va "conmutando" de acuerdo a la tensión de entrada (si es auto rango) o manualmente con la llave selectora si es manual.

IMaginemos que tu multímetro tiene una resolución de 100 valores en todo le rango.
Esto hace que por ejemplo de 0 a 200mV tenga una precisión de ese rango dividido 100 veces, es decir una precisión de 2mV.  
Al pasarse al siguiente rango, que iría de 0 a 2V, la precisión también son 100 valores, es decir que la precisión ahora es de 20mV por medición.  Me sigues la idea?

Es probable que tu multímetro tenga un salto justo en esa zona.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado dj_valle

  • PIC10
  • *
  • Mensajes: 48
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #34 en: 28 de Diciembre de 2005, 13:13:00 »
aja, ya veo a lo que te refieres.

ahora lo que he hecho es amplificar la señal x3 (con el condensador que me haces referencia)... ahora da todos los resultados mas precisos.

No sabia lo del polimetro que funcionara asi, pensaba que el valor que daban de origen (margen de error) era lineal en toda su escala, pero segun dices no es asi... de todas formas voy a ver si puedo adquirir un fluke serie 100.

Muchas gracias por la explicacion, me fue muy util.

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Ayuda con el conversor A/D del 16F876
« Respuesta #35 en: 29 de Diciembre de 2005, 05:36:00 »
Escrito originalmente por dj_valle
aja, ya veo a lo que te refieres.

ahora lo que he hecho es amplificar la señal x3 (con el condensador que me haces referencia)... ahora da todos los resultados mas precisos.

No sabia lo del polimetro que funcionara asi, pensaba que el valor que daban de origen (margen de error) era lineal en toda su escala, pero segun dices no es asi... de todas formas voy a ver si puedo adquirir un fluke serie 100.

Muchas gracias por la explicacion, me fue muy util.


Me alegro que te haya funcionado mejor y aqui estaré para leer tus novedades Sonrisa

Lo del capacitor es SIEMPRE SIEMPRE SIEMPRE, en cualquier PIC que uses, no importa que sea para sensar canales analógicos o no.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Ayuda con el conversor A/D del 16F876
« Respuesta #36 en: 04 de Diciembre de 2008, 10:57:29 »
Hola a todos.

Re abro este hilo, porque mi problema trata de la simulación del convertidor A/D y como aquí se trató el tema, y pali en un hilo que armó cita este post, será más fácil su uso.

Cuando simulo, el primer dato que cargo en el archivo con los valores a convertir, lo hace bien. El problema está cuando vuelvo a repetir el ciclo y tendría que convertir el segundo dato, lo hace mal. He cargado nuevos datos en el archivo que luego vuelvo a generar el archivo.scl y me convierte el mismo dato. :shock:

No logro decifrar dónde está el error, ya que el primero, lo hace bien pero el segundo no.

Estos son los valores a convertir:

2FF
041
1FF

La forma que guardé los datos es como lo explica aquí MAUNIX.

Este es el valor que me convierte a 2FF ADRESH B'00000010' y ADRESL B'11111111' (tiene alineación a la deracha), como ven, lo hace bien, pero cuando convierte el valor 041 me da ADRESH B'00010000' ADRESL B'01000000' Y por mas que cambie otro valor, me da el mismo dato.

Copio la primera parte del código

Código: ASM
  1. CLRF            PORTA
  2.                         CLRF            PORTB
  3.                         CLRF            PORTC
  4.                         CLRF            PORTD
  5.                         CLRF            PORTC
  6.                         BSF                     STATUS,RP0
  7.                         BCF                     STATUS,RP1
  8.                         MOVLW           .1
  9.                         MOVWF           TRISA                   ;RA0 COMO ENTRADA, DEMÁS SALIDAS
  10.                         BCF                     STATUS,RP0              ;BANCO 0
  11.                         MOVLW           B'10000001'             ;ADC ENC. CANAL AN0. FREC Fosc/32
  12.                         MOVWF           ADCON0                  ;Y LO PASO AL ADCON0
  13.                         BSF                     STATUS,RP0              ;BANCO 1
  14.                         MOVLW           B'10000001'             ;+VREF RA3, ALINEACIÓN A LA DERECHA Y PORTA TODAS ANALÓGICAS.
  15.                         MOVWF           ADCON1                  ;Y LO PASO AL ADCON1
  16.                         BCF                     STATUS,RP0              ;BANCO 0
  17.                         BCF                     PIR1,ADIF               ;INDICO QUE LA CONVERSIÓN NO ESTÁ ECHA
  18.                        
  19. COMIENZO        BSF                     ADCON0,GO               ;INICIO LA CONVERSIÓN
  20. CAD                     BTFSC           ADCON0,GO               ;¿TERMINÓ LA CONVERSIÓN?
  21.                         GOTO            CAD                             ;NO, VUELVO A CAD
  22.                         GOTO            CONVERSION

Una vez que termino de hacer lo que necesito con los datos requeridos, vuelvo a la etiqueta COMIENZO. Vale aclarar que los datos ADRESL y ADRESH los paso cada valor a una pocición de la RAM correspondiente y no actuo más sobre los registro ADRESL ADRESH
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Ayuda con el conversor A/D del 16F876
« Respuesta #37 en: 05 de Diciembre de 2008, 12:43:36 »
Solucionado.

La etiqueta COMIENZO tiene que ir en la línea BSF STATUS,RP0 que antecede a la línea MOVLW   B'10000001'

En resumen, no respeté los pasos necesario para la segunda conversión. Error tonto que sabía que pasos hay que respetar pero sin querer me equivoqué.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.