Autor Tema: PIC18F46K22 y problema raro del ADC  (Leído 2268 veces)

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

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
PIC18F46K22 y problema raro del ADC
« en: 03 de Abril de 2022, 16:53:10 »
Amigos del foro, TODOPIC.

Tengo un problema con la lectura del ADC del PIC18F46K22 en CCS C y el problema es el siguiente:
 
Estoy realizando la medición del adc a 10 bits
Código: C++
  1. #device adc=10

y los fuses asi:
Código: C++
  1. #fuses HSH,NOPLLEN,PRIMARY_ON,NOWDT,PUT,NOBROWNOUT,NOPBADEN,MCLR,PROTECT,NOLVP,NOSTVREN,NODEBUG

a 20 Mhz con un crystal fisicop externo de 20Mhz

Código: C++
  1. #use delay(clock=20000000, crystal=20000000)

dentro del el main:

Código: C++
  1. setup_adc_ports (sAN0 | VSS_VDD);           // setup_adc_ports (sAN0 | VSS_VDD);  para 18f46k22  
  2.          setup_adc(ADC_CLOCK_INTERNAL | ADC_TAD_MUL_0);
  3.          set_adc_channel(0);

Bueno, pues resulta sin tener nada conectado en la entrada AN0 del 18F46K22 (deberia de ser 0V cd), me muestra una lectura de 0.82 Vcd medidos con el multimetro (Esta medición la tomo rápido por que casi al momento de medirla cae el voltaje a cero). Coloco mi dedo en la entrada del adc y cae ese voltaje a cero, lo cual es lo que debería de ser correcto, quito mi dedo y ese voltaje de 0.82 vuelve a aparecer como si fuera ruido o no se pero ya me esta volviendo loco :?.

Ese mismo código, claro solo cambiando los #fuses  para que compile el programa con el PIC18F4550 funciona de maravilla, es decir, aquí sin tener nada conectado marca 0 Volts, la cuestion es que ya tengo unas pcb ensambladas y no quisiera cambiar de Pic por presupuesto.

No se que es y me da vueltas la cabeza podría ser:

1.- Configuración de los #fuses que es lo único que cambio del pic 18F46K22 al PIC18F4550 (El 4550 funciona al 100).
2.- Ruido eléctrico.
3.- El adc del 18F46K22 no esta funcionando bien o el compilador de CCS para este pic esta fallando con algún bugs.
4.- Configurar el ADC de otra manera o por registros.
5.- Impedancia de entrada del ADC para este pic.
6.- Los extraterrestres me quieren hacer la vida de cuadritos  :mrgreen:

Por favor alguien a me podría aclarar esto, o alguna ayuda.

Gracias.

Olvidaba decir que ese voltaje de 0.8 o mas ya que varia un poco, lo estoy convirtiendo a porcentaje, el cual muestro en el LCD.

La dinámica en la LCD es que a 0V =% y a 5V 100%.

En la imagen, la lcd muestra 14% y no tengo nada conectado en la entrada del AN0.

« Última modificación: 03 de Abril de 2022, 16:58:55 por mariacontenis »

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #1 en: 03 de Abril de 2022, 17:59:10 »
...Bueno, pues resulta sin tener nada conectado en la entrada AN0 del 18F46K22 (deberia de ser 0V cd), me muestra una lectura de 0.82 Vcd medidos con el multimetro (Esta medición la tomo rápido por que casi al momento de medirla cae el voltaje a cero)....

Ese debería es un error de concepto tuyo. En una entrada de alta impedancia podés tener cualquier lectura.  Esos 0.82V probablemente sea ruido que parte se rectifica por el diodo de protección.
Ya ves que al conectar un multímetro (cuya resistencia de entrada suele ser de 10Mohms) cae a 0.

En general esto no tiene importancia porque normalmente esa entrada debe ir conectada, pero si por cuestiones estétitas debe marcar 0 pues ponele una resistencia de 1Mohm a masa.

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #2 en: 03 de Abril de 2022, 18:17:37 »
Amigos del foro, TODOPIC.

Tengo un problema con la lectura del ADC del PIC18F46K22 en CCS C y el problema es el siguiente:
 
Estoy realizando la medición del adc a 10 bits
Código: C++
  1. #device adc=10

y los fuses asi:
Código: C++
  1. #fuses HSH,NOPLLEN,PRIMARY_ON,NOWDT,PUT,NOBROWNOUT,NOPBADEN,MCLR,PROTECT,NOLVP,NOSTVREN,NODEBUG

a 20 Mhz con un crystal fisicop externo de 20Mhz

Código: C++
  1. #use delay(clock=20000000, crystal=20000000)

dentro del el main:

Código: C++
  1. setup_adc_ports (sAN0 | VSS_VDD);           // setup_adc_ports (sAN0 | VSS_VDD);  para 18f46k22  
  2.          setup_adc(ADC_CLOCK_INTERNAL | ADC_TAD_MUL_0);
  3.          set_adc_channel(0);

Bueno, pues resulta sin tener nada conectado en la entrada AN0 del 18F46K22 (deberia de ser 0V cd), me muestra una lectura de 0.82 Vcd medidos con el multimetro (Esta medición la tomo rápido por que casi al momento de medirla cae el voltaje a cero). Coloco mi dedo en la entrada del adc y cae ese voltaje a cero, lo cual es lo que debería de ser correcto, quito mi dedo y ese voltaje de 0.82 vuelve a aparecer como si fuera ruido o no se pero ya me esta volviendo loco :?.

Ese mismo código, claro solo cambiando los #fuses  para que compile el programa con el PIC18F4550 funciona de maravilla, es decir, aquí sin tener nada conectado marca 0 Volts, la cuestion es que ya tengo unas pcb ensambladas y no quisiera cambiar de Pic por presupuesto.

No se que es y me da vueltas la cabeza podría ser:

1.- Configuración de los #fuses que es lo único que cambio del pic 18F46K22 al PIC18F4550 (El 4550 funciona al 100).
2.- Ruido eléctrico.
3.- El adc del 18F46K22 no esta funcionando bien o el compilador de CCS para este pic esta fallando con algún bugs.
4.- Configurar el ADC de otra manera o por registros.
5.- Impedancia de entrada del ADC para este pic.
6.- Los extraterrestres me quieren hacer la vida de cuadritos  :mrgreen:

Por favor alguien a me podría aclarar esto, o alguna ayuda.

Gracias.

Olvidaba decir que ese voltaje de 0.8 o mas ya que varia un poco, lo estoy convirtiendo a porcentaje, el cual muestro en el LCD.

La dinámica en la LCD es que a 0V =% y a 5V 100%.

En la imagen, la lcd muestra 14% y no tengo nada conectado en la entrada del AN0.

¿Usas un filtro pasabanda o pasabajos? Es casi necesario utilizarlo en conjunto con un ADC.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #3 en: 03 de Abril de 2022, 18:29:03 »
Gracias por responder. Eduardo2 y DominusDRR.

Ahora probare las sugerencias. Aun asi, por que si cambio el pic  un 18F4550 no hay error, el voltaje cae completamente a cero cuando no tengo nada conectado?.

DominusDRR, de que valores recomiendas el RC para el filtro?.

Eduardo2
Citar
En general esto no tiene importancia porque normalmente esa entrada debe ir conectada

Para este caso ese sensor conectado a AN0 se puede dañar y si sucede así el valor debería caer a cero para validar una condición de que el sensor de daño y alarmar el sistema.

Bueno, pruebo y muestro resultados, saludos!!.
« Última modificación: 03 de Abril de 2022, 18:38:18 por mariacontenis »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #4 en: 03 de Abril de 2022, 18:37:12 »

Ahora probare las sugerencias. Aun asi, por que si cambio el pic  un 18F4550 no hay error, el voltaje cae completamente a cero cuando no tengo nada conectado?.

Talvez deberías compartir una imagen del esquemático, y si es posible una imagen del hardware (fotografía), tal vez se pueda determinar alguna cosa

DominusDRR, de que valores recomiendas el RC para el filtro?.


Eso deberías determinarlo en función de que frecuencias mínimas y bajas deseas rechazar y el tiempo de respuesta deseada. Por ejemplo, la señal de la empresa eléctrica (60Hz) suele aparecer en muchos circuitos analógicos. Un filtro para eliminar esa frecuencia introduce una latencia grande en el sistema.

Si estás midiendo temperatura, ese retardo no es problema, ya que la temperatura cambia de manera mucho más lento que 60Hz.

Pero si estás midiendo la corriente de un motor eléctrico para determinar una sobre corriente, ahí es un problema antes que una solución, el filtro.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #5 en: 03 de Abril de 2022, 18:39:20 »

Eso deberías determinarlo en función de que frecuencias mínimas y bajas deseas rechazar y el tiempo de respuesta deseada. Por ejemplo, la señal de la empresa eléctrica (60Hz) suele aparecer en muchos circuitos analógicos. Un filtro para eliminar esa frecuencia introduce una latencia grande en el sistema.

Si estás midiendo temperatura, ese retardo no es problema, ya que la temperatura cambia de manera mucho más lento que 60Hz.

Pero si estás midiendo la corriente de un motor eléctrico para determinar una sobre corriente, ahí es un problema antes que una solución, el filtro.

Yo he utilizado este software para diseñar filtros para utilizarse en conjunto con un ADC.

https://www.microchip.com/en-us/development-tool/FilterLabDesignSoftware
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #6 en: 03 de Abril de 2022, 18:42:00 »

Eso deberías determinarlo en función de que frecuencias mínimas y bajas deseas rechazar y el tiempo de respuesta deseada. Por ejemplo, la señal de la empresa eléctrica (60Hz) suele aparecer en muchos circuitos analógicos. Un filtro para eliminar esa frecuencia introduce una latencia grande en el sistema.

Si estás midiendo temperatura, ese retardo no es problema, ya que la temperatura cambia de manera mucho más lento que 60Hz.

Pero si estás midiendo la corriente de un motor eléctrico para determinar una sobre corriente, ahí es un problema antes que una solución, el filtro.

Yo he utilizado este software para diseñar filtros para utilizarse en conjunto con un ADC.

https://www.microchip.com/en-us/development-tool/FilterLabDesignSoftware

Esta herramienta es mucho más actual. No la he utilizado:

https://mad.microchip.com/SGN_CHAIN
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #7 en: 03 de Abril de 2022, 23:48:34 »

Eduardo2 coloque la resistencia de 1M en la entrada del AN0 y GND y Wualaaa!!. Funciono...

Ahora desconectado el sensor se va a cero el valor y conectándolo funciona de maravilla.

Gracias por la ayuda.

DominusDRR Gracias de igual manera, opte por la primera opción por que es menos Hardware.

Gracias!!.

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 965
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #8 en: 04 de Abril de 2022, 00:29:35 »
Tené en cuenta que si bien 1Mohm te resuelve el problema,  si la sonda tuviera varios metros de cable y se te corta el de masa -->  1Mohm sea insuficiente y necesites bajarla a 100k...10k etc 
Es experimental porque dependés de por donde pasa el cable y lo "ruidoso" de los cables vecinos.

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #9 en: 04 de Abril de 2022, 00:38:59 »
Gracias Eduardo2, lo tendré en cuenta y no cerrare el tema hasta ponerlo por unos días en operación.

Por lo pronto esta trabajando al 100. :mrgreen:

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #10 en: 04 de Abril de 2022, 10:04:46 »
Gracias Eduardo2, lo tendré en cuenta y no cerrare el tema hasta ponerlo por unos días en operación.

Por lo pronto esta trabajando al 100. :mrgreen:

Yo te recomendaría utilizar un osciloscopio para que veas que realmente está llegando al ADC. Aun que es raro que con el otro microcontrolador no necesites la resistencia mencionada.

También si está muy lejos el sensor respeto a la entrada del ADC, debes usar un amplificador diferencial para disminuir el ruido en los cables que se comportan como antenas, y luego de dicho amplificador, el filtro.

Obviamente estas recomendaciones son si vas a comercializar un producto y de esa manera evitar dolores de cabeza.

Si es algo didáctico, con la resistencia o hasta con simple filtro RC es más que suficiente.

Acá esta la imagen de un amplificador diferencial que reduce una entrada que varía de 0 a 10 V de 3 a 0V de un producto que comercializamos, V1 es el sensor que varía su voltaje de 0 a 10V y la salida de X2 varía ente 3V a 0V



Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #11 en: 16 de Abril de 2022, 10:19:46 »
Saludos  a todos. Después de 10 días de operación del circuito todo trabaja de maravilla. Antes de cerrar el tema tengo una pregunta mas (no tan relacionada con lo mismo pero me interesa).

E visto que esto con en ccs.

Código: C++
  1. if(!input(pin_A4))
  2. {
  3. if(!input(pin_A4))
  4. {
  5. delay_ms(10);
  6. Email_Now();
  7. while(!input(pin_A4))
  8. delay_ms(2000);
  9. }
  10. }

Mi pregunta es, que razón tiene ese doble if?.



Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #12 en: 16 de Abril de 2022, 11:53:47 »
Yo diría que no tiene ningún sentido duplicarlo

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 114
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #13 en: 16 de Abril de 2022, 11:55:08 »
Ok. Gracias Sr. Nocturno.

Desconectado dogflu66

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3510
Re:PIC18F46K22 y problema raro del ADC
« Respuesta #14 en: 30 de Abril de 2022, 06:37:42 »
Eso se usa cuando puedes tener una transición muy rápida y quieres estar seguro que la señal estuvo activa un tiempo mínimo.
Es un recurso muy utilizado porque evitas colocar código más complicado.

A eso yo le llamo código redundante necesario.  :mrgreen:
« Última modificación: 30 de Abril de 2022, 07:01:34 por dogflu66 »
Saludos desde Granada, España.