Autor Tema: Adaptar impedancia en ADC de un PIC  (Leído 3563 veces)

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

Desconectado Eduardo Rodas

  • PIC12
  • **
  • Mensajes: 62
    • Kit electronica
Adaptar impedancia en ADC de un PIC
« en: 16 de Julio de 2021, 18:30:40 »
Hola a todos. Tengo un problema con la entrada análoga de un PIC16F1827 y es que hay un voltaje de 2.5 que quiero
medir, pero cuando intento llevarlo al ADC (AN0) dicho voltaje se cae a 0.93v. Utilice un LM358 como seguidor de
tensión y el voltaje ahora se cae a 1.4v pero no lo puedo llevar a 2.5. :(

He probado cambiando el Tad, el tiempo de adquisición y nada ... probé también con un PIC16F88 y hace
exactamente lo mismo. ¿Alguien sabe que esta pasando o como solucionarlo?

Gracias.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #1 en: 16 de Julio de 2021, 20:25:48 »
.... ¿Alguien sabe que esta pasando
Errores en el programa o la señal es inestable.

Citar
o como solucionarlo?
Corrigiendo el programa o estabilizando la señal.


Es obvio que si no publicás el programa y el circuito nada útil se puede decir.

Desconectado Eduardo Rodas

  • PIC12
  • **
  • Mensajes: 62
    • Kit electronica
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #2 en: 16 de Julio de 2021, 22:22:20 »
Si, es un programa para medir corriente alterna desde el modulo ACS712. En Proteus funciona, pero en la
realidad no. El programa esta en Basic (Proton IDE). Gracias.

Device = 16F1827
Reminders 0
Config1 FOSC_XT,WDTE_OFF,PWRTE_ON,MCLRE_ON,CP_OFF,CPD_OFF,BOREN_OFF,IESO_OFF,FCMEN_OFF
Config2 WRT_OFF,PLLEN_OFF,STVREN_OFF,LVP_OFF
Declare PORTB_Pullups = OFF
Reminders 1
Declare Xtal 4
Declare Create_Coff = On
Declare Optimiser_Level = 1
'****************************************************************
TRISA = %00000001
TRISB = %00000000
'**************************************************************
'ADC
Declare Adin_Res = 10 
Declare Adin_Tad 64_FOSC
Declare Adin_Stime = 50
FVRCON = %10000011 'Vref = 4.096V
ADCON0 = %00000000
ADCON1 = %11100011'Vref interno, TAD 
ANSELA = %00000001
ANSELB = %00000000
OPTION_REG = %10000000
'****************************************************************
'DISPLAY LCD
Declare LCD_DTPin = PORTB.4
Declare LCD_RSPin = PORTB.2
Declare LCD_ENPin = PORTB.3
Declare LCD_Interface = 4
Declare LCD_Lines = 2
Declare LCD_Type = 0
Declare LCD_CommandUs = 2000
Declare LCD_DataUs = 50
'****************************************************************
'FLOAT
Declare Float_Display_Type = Fast
Declare Float_Rounding = Off
'****************************************************************
Dim VAR1 As Word  'Variables utilizadas
Dim CORRIENTE As Float
Dim VMAX As Float
Dim VMIN As Float
Dim VPP As Float
Dim MEDIRC As Byte
'******************************************
'VALORES DE INICIO
CORRIENTE = 0
MEDIRC = 0
VMIN = 5.0
VMAX = 0.0
'******************************************
Cls
DelayMS 100
'****************************************
AMPERIOS:
For MEDIRC = 1 To 100
VAR1 = ADIn 0
CORRIENTE = (4.096 / 1024) * VAR1
If CORRIENTE <= VMIN Then VMIN = CORRIENTE
If CORRIENTE >= VMAX Then VMAX = CORRIENTE
Next
'*********************************************
VPP = VMAX - VMIN
CORRIENTE = Abs(1.9111 * VPP)
Print At 1,1,"Irms=",Dec3 CORRIENTE,"          "
DelayMS 300
VMIN = 5.0
VMAX = 0.0
CORRIENTE = 0
VAR1 = 0
GoTo AMPERIOS
End



Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #3 en: 17 de Julio de 2021, 20:10:17 »
Si en Proteus te funciona y en la realidad no, evidentemente no es programación.

Esa caída de tensión es imposible en un pin configurado como entrada...  Salvo que se haya quemado.
La duda te la sacás fácilmente usando otro pin.

Desconectado Eduardo Rodas

  • PIC12
  • **
  • Mensajes: 62
    • Kit electronica
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #4 en: 19 de Julio de 2021, 14:12:49 »
Si era la programación. Cambie la formula para el ADC y todo se arreglo ...no se porque pasa eso, pero ahora funcionan los 2 programas en Proteus, pero solo uno de ellos funciona en la realidad. No hubo necesidad de usar el LM358.

Muchas gracias por las respuestas.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #5 en: 19 de Julio de 2021, 15:20:18 »
Subí los cambios que hiciste, si no el hilo queda incompleto. A quien tenga un problema parecido leer esto no le sirve de nada.

Tal vez no te importe un pomo, pero el espíritu de los foros es compartir la información.

Desconectado Eduardo Rodas

  • PIC12
  • **
  • Mensajes: 62
    • Kit electronica
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #6 en: 19 de Julio de 2021, 17:24:39 »
Cambie esta linea:
CORRIENTE = (4.096 / 1024) * VAR1  (Funciona en Proteus pero no en la realidad)

Por esta otra:
CORRIENTE = VAR1 / 249.755 (Funciona en Proteus y también en la realidad)

249.755 sale de: 1023 (pasos del ADC) / 4.096 (voltaje de referencia interno)

Me dijeron que lo correcto es usar 1023 y no 1024.

Todo lo demás quedo igual en el programa.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #7 en: 19 de Julio de 2021, 17:57:00 »
Eso es un ajuste en la cosntante de escala,  afecta a CORRIENTE apenas un 0.1%.  No tiene absolutamente nada que ver con las  caídas de tensión que hablabas al principio.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #8 en: 20 de Julio de 2021, 04:04:44 »
Pero ¿como sabías que la tensión caía al acoplar el ACS712 al pin?.  ¿Lo medias con un polimetro, osciloscopio directamente en el pin? ¿O lo veías en el resultado de esa operación que has cambiado?.

  Por que si es lo segundo pinta a truncamiento de datos a la hora de hacer la operación que te fallaba. Especialmente la división 4,096 / 1024  que eso da 0,004 y desconozco como lo hace ese compilador y sus limitaciones en cuanto a la precisión.

Para estas cosas, casi que mejor usar punto fijo y no flotante salvo que sepas muy bien y controles bien lo que hace el compilador para sacar los resultados.

 
« Última modificación: 20 de Julio de 2021, 04:06:47 por remi04 »

Desconectado Eduardo Rodas

  • PIC12
  • **
  • Mensajes: 62
    • Kit electronica
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #9 en: 20 de Julio de 2021, 13:53:19 »
Eso es un ajuste en la cosntante de escala,  afecta a CORRIENTE apenas un 0.1%.  No tiene absolutamente nada que ver con las  caídas de tensión que hablabas al principio.

Si fue por eso, lo comprobé varias veces y siempre medí con el multimetro. El pin como que se queda en estado bajo (AN0) y tumba el voltaje que llegue ahí.

Pero ¿como sabías que la tensión caía al acoplar el ACS712 al pin?.  ¿Lo medias con un polimetro, osciloscopio directamente en el pin? ¿O lo veías en el resultado de esa operación que has cambiado?.

  Por que si es lo segundo pinta a truncamiento de datos a la hora de hacer la operación que te fallaba. Especialmente la división 4,096 / 1024  que eso da 0,004 y desconozco como lo hace ese compilador y sus limitaciones en cuanto a la precisión.

Para estas cosas, casi que mejor usar punto fijo y no flotante salvo que sepas muy bien y controles bien lo que hace el compilador para sacar los resultados.

 

Si, siempre mido con el multimetro lo que llega al PIC. Use osciloscopio para medir la salida del ACS712 porque hay 2.5vdc mas la señal alterna. El problema exacto es que PROTON no multiplico 0.004 * VAR1 pero Proteus si. El programa lo adapte de otro que vi en Arduino y ahí si funcionaba bien, incluso toda la matemática estaba en una sola ecuación, pero PROTON no podía hacerla, me decía que la hiciera por partes. Creo que estudiare el lenguaje de Arduino ... es muy potente!!.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #10 en: 20 de Julio de 2021, 16:25:58 »
Eso es un ajuste en la cosntante de escala,  afecta a CORRIENTE apenas un 0.1%.  No tiene absolutamente nada que ver con las  caídas de tensión que hablabas al principio.

Si fue por eso, lo comprobé varias veces y siempre medí con el multimetro. El pin como que se queda en estado bajo (AN0) y tumba el voltaje que llegue ahí.

Correlación no implica causalidad. 

Citar
El problema exacto es que PROTON no multiplico 0.004 * VAR1 pero Proteus si.
Proteus ejecuta lo que compiló Proton,  no interpreta el fuente.

Citar
El programa lo adapte de otro que vi en Arduino y ahí si funcionaba bien, incluso toda la matemática estaba en una sola ecuación, pero PROTON no podía hacerla, me decía que la hiciera por partes. Creo que estudiare el lenguaje de Arduino ... es muy potente!!.
No existe lenguaje Arduino.  Es C/C++ y un surtido de librerías. 


Al programa lo ralentizás inútilmente con operaciones en punto flotante, cuando solamente necesitás hacer una multiplicación.

Código: [Seleccionar]
Dim VAR1 As Word 
Dim CORRIENTE As Float
Dim VMAX As Word
Dim VMIN As Word
Dim VPP As Word
Dim MEDIRC As Byte
'******************************************
Cls
DelayMS 100
'****************************************

Symbol ka = 1.9111*4.096/1023     //  Esta constante se ajusta por calibración.

AMPERIOS:
    VMIN = 4095
    VMAX = 0
    For MEDIRC = 1 To 200
        VAR1 = ADIn 0
        If VAR1 < VMIN Then  VMIN = VAR1
        If VAR1 > VMAX Then  VMAX = VAR1
    Next

    VPP =  VMAX - VMIN
    CORRIENTE = ka * VPP
    Print At 1,1,"Irms=",Dec3 CORRIENTE,"          "
    DelayMS 300
    GoTo AMPERIOS
End

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #11 en: 20 de Julio de 2021, 17:15:03 »
Eso es un ajuste en la cosntante de escala,  afecta a CORRIENTE apenas un 0.1%.  No tiene absolutamente nada que ver con las  caídas de tensión que hablabas al principio.

Si fue por eso, lo comprobé varias veces y siempre medí con el multimetro. El pin como que se queda en estado bajo (AN0) y tumba el voltaje que llegue ahí.

Pero ¿como sabías que la tensión caía al acoplar el ACS712 al pin?.  ¿Lo medias con un polimetro, osciloscopio directamente en el pin? ¿O lo veías en el resultado de esa operación que has cambiado?.

  Por que si es lo segundo pinta a truncamiento de datos a la hora de hacer la operación que te fallaba. Especialmente la división 4,096 / 1024  que eso da 0,004 y desconozco como lo hace ese compilador y sus limitaciones en cuanto a la precisión.

Para estas cosas, casi que mejor usar punto fijo y no flotante salvo que sepas muy bien y controles bien lo que hace el compilador para sacar los resultados.

 

Si, siempre mido con el multimetro lo que llega al PIC. Use osciloscopio para medir la salida del ACS712 porque hay 2.5vdc mas la señal alterna. El problema exacto es que PROTON no multiplico 0.004 * VAR1 pero Proteus si. El programa lo adapte de otro que vi en Arduino y ahí si funcionaba bien, incluso toda la matemática estaba en una sola ecuación, pero PROTON no podía hacerla, me decía que la hiciera por partes. Creo que estudiare el lenguaje de Arduino ... es muy potente!!.

  El lenguaje arduino, siempre que no uses el modo en bloques u otros, es C/C++

  Lo que quieres entonces aprender es eso mismo. C/C++.   Con eso podrás programar desde un arduino hasta un cortex de 64 bits. Lo que quieras. 

  Luego lo que tendrás que aprenderte es el “core” en si de la plataforma que vas a usar. En tu caso Arduino, podría ser un Avr directamente, un ARM, un PIC, etc.   

  En arduino lo que pasa es que como te metas a programar enmascarandote en las miles de librerías que hay para todo, no aprendes nunca nada acerca del hardware que manejas. No es inconveniente si vas a hacer cosas simples, pero a menos que te metas a hacer cosas más serias, como tengas que depurar y ponerte a examinar errores y cosas que no funcionan como esperas te van a entrar ganas de pillarte los huevos con una puerta para desahogarte.

  Yo prefiero ampliamente ponerme a ver un datasheet de un micro y elaborarme las librerías de lo que vaya necesitando hacer antes que ponerme a buscar librerías que ya lo hagan.  Pero bueno, todo el mundo no opina lo mismo y hay soluciones para todos los gustos.

Desconectado Eduardo Rodas

  • PIC12
  • **
  • Mensajes: 62
    • Kit electronica
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #12 en: 20 de Julio de 2021, 23:14:11 »
Citar
No existe lenguaje Arduino.  Es C/C++ y un surtido de librerías.

No escribí lenguaje Arduino; escribí el lenguaje de Arduino ... son 2 cosas diferentes.

Me refiero al lenguaje C que parece ser muy bueno con las matemáticas. Aunque no me gustan las librerías.

Nota: no me gusta Arduino, solo su lenguaje.

Citar
Yo prefiero ampliamente ponerme a ver un datasheet de un micro y elaborarme las librerías de lo que vaya necesitando hacer antes que ponerme a buscar librerías que ya lo hagan.  Pero bueno, todo el mundo no opina lo mismo y hay soluciones para todos los gustos.

Pienso lo mismo. Gracias.

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #13 en: 27 de Julio de 2021, 10:41:49 »
El operacional que usaste es Rail to Rail ? Si no usas un Operacional Rail to Rail la salida nunca podra alcanzar el VCC
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Eduardo Rodas

  • PIC12
  • **
  • Mensajes: 62
    • Kit electronica
Re:Adaptar impedancia en ADC de un PIC
« Respuesta #14 en: 27 de Julio de 2021, 12:04:49 »
El operacional que usaste es Rail to Rail ? Si no usas un Operacional Rail to Rail la salida nunca podra alcanzar el VCC

Creo que no lo es, solo llega hasta 3.6v la salida. Al final no hubo necesidad de usarlo. Gracias.