Autor Tema: Sensor de temperatura MAX31865 no consigo que funcione  (Leído 6921 veces)

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

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Sensor de temperatura MAX31865 no consigo que funcione
« en: 22 de Mayo de 2025, 10:07:52 »
Hola a todos, pues tengo un módulo de esos de Adafruit de los que se emplean para arduino pero yo lo quiero usar en un PIC18F4620 con C18 para medir la temperatura con una sonda PT100 y no consigo echarlo a andar,

El módulo está configurado para una PT100 de tres terminales.

He utilizado la librería SPI de microchip y funciona bine, digo que funciona bien por que he probado con un MAX6675 para medir temperatura con un termopar y funciona bien por eso tengo la certeza de que la comunicación SPI por hardware funciona.

   He creado un driver para el manejo del sensor, donde utilizo una función para configurarlo:
Código: [Seleccionar]
void HW_MAX31865_Config(unsigned char reg, unsigned char config_MAX31865)
{
//---Configuramos el PIN CS
TRIS_CS_MAX31865 = 0; //Configuración como salida
CS_PIN_MAX31865 = 1; //Estado alto


CS_PIN_MAX31865 = 0; ///Select Device
WriteSPI(0x80 | reg); //Seleccion registro de configuración, y con la mascara aseguramos que es de escritura   
WriteSPI(config_MAX31865); //Se escribe la configuración
CS_PIN_MAX31865 = 1; //Seselect device
}

donde el registro es el 0x00 y lo que escribimos en el es 0xF0

Con eso queda el sensor configurado

Y para leer la temperatura lo hago en los registros de lectura 0x01 y 0x02 con esta función:
Código: [Seleccionar]
char HW_MAX31865_Temp(void)
{
unsigned char ReadTemp_MSB = 0;
unsigned char ReadTemp_LSB = 0;

CS_PIN_MAX31865 = 0; //Select Device
    WriteSPI(0x7F & 0x01); //Registro donde vamos a leer la temperatura
    ReadTemp_MSB = ReadSPI(); //Leer el registro 0x01 
    ReadTemp_LSB = ReadSPI(); //Leer el registro 0x02
    CS_PIN_MAX31865 = 1; //Select Device

return 0;

}

Se supone que desde que apuntes a un registro el MAX va camniando de registro secuencialmente según vayas leyendo sin hacer falta volver a enviar el comando de lectura del siguiente registro. Pues bien, cuando leo esos registros, el registro 0x01 está en 0b00000000 y el registro 0x02 está en 0b00000001
Creo entender por la hoja de datos que ese 1 en el primer bit avisa de fallo de PT100 pero no estoy seguro, he probado a cambiar de configuración de sonda y lo que devuelven esos registros es 0xFF y 0xFF

Comparto una imagen de una captura del analizador lógico para que se hagan una idea.


   En al elipse roja está el envío del comando de lectura y la dirección del registro a leer que en este caso es el 0x00 que es el registro de configuración

   Dentro de la elipse verde está la lectura de los datos almacenados en el registro de configuración que el valor es 0xE8 que no es el valor que le he enviado previamente, entiendo de que este valor cambia en función del estado de la sonda pero no lo tengo claro a ver si alguien me lo aclara.
Y se para la comunicación con el dispositivo poniendo a 1 el bit CS

  Ahora volvemos ha poner a 0 el bit CS para un nuevo comiendo de comunicación entre el PIC y el MAX

  Dentro de la elipse azul es el primer dato que el PIC envía al MAX donde se indica que vamos a leer un registro y el registro que vamos a leer que es RTD MSB (0x01).
   Dentro de la elipse naranja es donde el MAX envía el contenido del Registro RTD MSB (0x01) y como la lectura y escritura según el datasheet es secuencial también envía el contenido del registro RTD_LSB (0x02) que en teoría la unión de los datos de estos dos registros nos daría el valor de la sonda PT100

   Configure lo que configure en el registro 0x00 siempre me da el mismo resultado en los registros 0x01 y 0x02 y no sé que estoy haciendo mal, a ver si alguien me puede echar una mano.

Gracias
 
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Sensor de temperatura MAX31865 no consigo que funcione
« Respuesta #1 en: 22 de Mayo de 2025, 21:18:32 »
Hola a todos, pues tengo un módulo de esos de Adafruit de los que se emplean para arduino pero yo lo quiero usar en un PIC18F4620 con C18 para medir la temperatura con una sonda PT100 y no consigo echarlo a andar,

El módulo está configurado para una PT100 de tres terminales.

He utilizado la librería SPI de microchip y funciona bine, digo que funciona bien por que he probado con un MAX6675 para medir temperatura con un termopar y funciona bien por eso tengo la certeza de que la comunicación SPI por hardware funciona.

   He creado un driver para el manejo del sensor, donde utilizo una función para configurarlo:
Código: [Seleccionar]
void HW_MAX31865_Config(unsigned char reg, unsigned char config_MAX31865)
{
//---Configuramos el PIN CS
TRIS_CS_MAX31865 = 0; //Configuración como salida
CS_PIN_MAX31865 = 1; //Estado alto


CS_PIN_MAX31865 = 0; ///Select Device
WriteSPI(0x80 | reg); //Seleccion registro de configuración, y con la mascara aseguramos que es de escritura   
WriteSPI(config_MAX31865); //Se escribe la configuración
CS_PIN_MAX31865 = 1; //Seselect device
}

donde el registro es el 0x00 y lo que escribimos en el es 0xF0

Con eso queda el sensor configurado

Y para leer la temperatura lo hago en los registros de lectura 0x01 y 0x02 con esta función:
Código: [Seleccionar]
char HW_MAX31865_Temp(void)
{
unsigned char ReadTemp_MSB = 0;
unsigned char ReadTemp_LSB = 0;

CS_PIN_MAX31865 = 0; //Select Device
    WriteSPI(0x7F & 0x01); //Registro donde vamos a leer la temperatura
    ReadTemp_MSB = ReadSPI(); //Leer el registro 0x01 
    ReadTemp_LSB = ReadSPI(); //Leer el registro 0x02
    CS_PIN_MAX31865 = 1; //Select Device

return 0;

}

Se supone que desde que apuntes a un registro el MAX va camniando de registro secuencialmente según vayas leyendo sin hacer falta volver a enviar el comando de lectura del siguiente registro. Pues bien, cuando leo esos registros, el registro 0x01 está en 0b00000000 y el registro 0x02 está en 0b00000001
Creo entender por la hoja de datos que ese 1 en el primer bit avisa de fallo de PT100 pero no estoy seguro, he probado a cambiar de configuración de sonda y lo que devuelven esos registros es 0xFF y 0xFF

Comparto una imagen de una captura del analizador lógico para que se hagan una idea.


   En al elipse roja está el envío del comando de lectura y la dirección del registro a leer que en este caso es el 0x00 que es el registro de configuración

   Dentro de la elipse verde está la lectura de los datos almacenados en el registro de configuración que el valor es 0xE8 que no es el valor que le he enviado previamente, entiendo de que este valor cambia en función del estado de la sonda pero no lo tengo claro a ver si alguien me lo aclara.
Y se para la comunicación con el dispositivo poniendo a 1 el bit CS

  Ahora volvemos ha poner a 0 el bit CS para un nuevo comiendo de comunicación entre el PIC y el MAX

  Dentro de la elipse azul es el primer dato que el PIC envía al MAX donde se indica que vamos a leer un registro y el registro que vamos a leer que es RTD MSB (0x01).
   Dentro de la elipse naranja es donde el MAX envía el contenido del Registro RTD MSB (0x01) y como la lectura y escritura según el datasheet es secuencial también envía el contenido del registro RTD_LSB (0x02) que en teoría la unión de los datos de estos dos registros nos daría el valor de la sonda PT100

   Configure lo que configure en el registro 0x00 siempre me da el mismo resultado en los registros 0x01 y 0x02 y no sé que estoy haciendo mal, a ver si alguien me puede echar una mano.

Gracias

Tal vez sea de utilidad esto:

https://chatgpt.com/share/682fbe9e-208c-800e-94e2-516a2e34f61f
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Sensor de temperatura MAX31865 no consigo que funcione
« Respuesta #2 en: 23 de Mayo de 2025, 04:59:03 »
Buenos días, he probado con ese y con gemini 2.0 y ya de entrada te da mal la información de como hacer la lectura y escritura, y de la busqueda que me has hecho ya de entrada está mal lo que dice chatgpt, según la hoja de datos del MAX31865, el chip se adapta a los flacos de bajada o de subida, en principio no hace falta especificar nada por que el mismo IC lo detecta... lo de la IA está bien para tener una idea pero falla más que una escopeta de feria, pero de todas maneras he probado las indicaciones que me dan pero nada, no consigo medir nada,
Si les hace falta algún dato más de lo que estoy haciendo pues me lo piden sin problema.

Gracias
« Última modificación: 23 de Mayo de 2025, 05:03:51 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Sensor de temperatura MAX31865 no consigo que funcione
« Respuesta #3 en: 23 de Mayo de 2025, 06:35:27 »
Hola de nuevo, pues algo me está fallando y no sé lo que es, esta es la configuración que estoy grabando en el micro:
Código: [Seleccionar]
OpenSPI(SPI_FOSC_64, MODE_10, SMPMID);En teoría es la que recomienda ChatGOP y Gemini 2.0 y el datasheet

esta es la configuración del MAX31865:
Código: [Seleccionar]
HW_MAX31865_Config(0x00, 0xC2);
Esta es su función:
Código: [Seleccionar]
void HW_MAX31865_Config(unsigned char reg, unsigned char config_MAX31865)
{
//---Configuramos el PIN CS
TRIS_CS_MAX31865 = 0; //Configuración como salida
CS_PIN_MAX31865 = 1; //Estado alto

CS_PIN_MAX31865 = 0; //Select Device
WriteSPI(0x80 | reg);         //Selección registro registro de configuración, y con la mascara aseguramos que es de escritura   
WriteSPI(config_MAX31865); //Se escribe la configuración
CS_PIN_MAX31865 = 1; //Unselect Device

}

Y así es como quedarían los registros del módulo SPI configurados.
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Sensor de temperatura MAX31865 no consigo que funcione
« Respuesta #4 en: 23 de Mayo de 2025, 10:15:11 »
Controlá la polaridad y fase del clk SPI,  o probá con cual funciona, total son 4 modos

* ModosCLK.jpg
(47.18 kB, 512x411 - visto 385 veces)
.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Sensor de temperatura MAX31865 no consigo que funcione
« Respuesta #5 en: 23 de Mayo de 2025, 10:24:58 »
He probado con los cuatro modos y el resultado siempre es el mismo, ósea igual que la imagen del analizador lógico que compartí, ya se me acabaron las ideas  :(
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1982
    • Sicoy
Re:Sensor de temperatura MAX31865 no consigo que funcione
« Respuesta #6 en: 23 de Mayo de 2025, 18:03:56 »
He probado con los cuatro modos y el resultado siempre es el mismo, ósea igual que la imagen del analizador lógico que compartí, ya se me acabaron las ideas  :(

El hecho que la herramienta de análisis de protocolo (en este caso SPI) te diga que esos son los datos que van y vienen, no significan que esté bien.

Por ejemplo, si yo uso el analizador de UART en modo de 8 bits, pero la trama es de 9 bits. Voy a obtener datos, pero erróneos.

Tomar como verdadera el análisis de una herramienta de protocolo suele ser una  falacia de autoridad, ya que se está sumiendo que la señal se está generando correctamente-

Te recomiendo veas la forma de onda de MISO, MOSI; reloj, y confirmes si realmente estás generando la señal como las hojas de datos dicen que debe ser. Así como Eduardo2.0 te mostró una imagen.

Estas formas de onda debes vericar que se están generando como en la imagen:

« Última modificación: 23 de Mayo de 2025, 18:07:29 por DominusDRR »
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado scrwld

  • PIC12
  • **
  • Mensajes: 59
Re:Sensor de temperatura MAX31865 no consigo que funcione
« Respuesta #7 en: 24 de Mayo de 2025, 17:38:52 »

Desconectado Jiha

  • PIC10
  • *
  • Mensajes: 28
Re:Sensor de temperatura MAX31865 no consigo que funcione
« Respuesta #8 en: 26 de Mayo de 2025, 00:32:46 »
demo proteus con proton basic

Código: [Seleccionar]
Device = 18F4620
Declare Xtal = 20

Declare Create_Coff On
Declare Optimiser_Level = 0
Declare Bootloader off
Declare Dead_Code_Remove = 1        ' Remove dead code
Declare Watchdog Off
Declare Hints off
Declare LCD_DTPin PORTB.4
Declare LCD_RSPin PORTB.0
Declare LCD_ENPin PORTB.1
Declare LCD_Interface 4
Declare LCD_Lines 4

Symbol MAX31856_CONFIG_REG            0x00
Symbol MAX31856_CONFIG_REG_WRITE      0x80
Symbol MAX31856_CONFIG_BIAS           0x80
Symbol MAX31856_CONFIG_MODEAUTO       0x40
Symbol MAX31856_CONFIG_MODEOFF        0x00
Symbol MAX31856_CONFIG_1SHOT          0x20
Symbol MAX31856_CONFIG_3WIRE          0x10
Symbol MAX31856_CONFIG_24WIRE         0x00
Symbol MAX31856_CONFIG_FAULTSTAT      0x02
Symbol MAX31856_CONFIG_FILT50HZ       0x01
Symbol MAX31856_CONFIG_FILT60HZ       0x00

Symbol MAX31856_RTDMSB_REG           0x01
Symbol MAX31856_RTDLSB_REG           0x02
Symbol MAX31856_HFAULTMSB_REG        0x03
Symbol MAX31856_HFAULTLSB_REG        0x04
Symbol MAX31856_LFAULTMSB_REG        0x05
Symbol MAX31856_LFAULTLSB_REG        0x06
Symbol MAX31856_FAULTSTAT_REG        0x07

Symbol MAX31865_FAULT_HIGHTHRESH     0x80
Symbol MAX31865_FAULT_LOWTHRESH      0x40
Symbol MAX31865_FAULT_REFINLOW       0x20
Symbol MAX31865_FAULT_REFINHIGH      0x10
Symbol MAX31865_FAULT_RTDINLOW       0x08
Symbol MAX31865_FAULT_OVUV           0x04

Symbol rtd_a  3.9083/1000
Symbol rtd_b  -5.775/10000000

Symbol mosi_pin_max31685 = PORTC.5
Symbol miso_pin_max31685 = PORTC.4
Symbol Clock_pin_max31685 = PORTC.3
Symbol CS_pin_max31685 = PORTC.2


Dim buffer[2] As Byte
Dim temp As Word  = 0
Dim Temperature As Float
Dim Resistance As Float
Dim rtd As Word

Symbol Rnominal = 100.0
Symbol Rref = 430.0

TRISA = %00000011
TRISB = %00000000
TRISC = %00010011
 
 
Low mosi_pin_max31685
High CS_pin_max31685
DelayMS 100 ' //ensure chip has time to wake up
MAX31865_init() '//wake up chip

Cls
Do
  temp = readRTD()
  If temp & 1 = 1 Then
     
         'error bit is set, read the error status
         temp=readRegister8(MAX31856_FAULTSTAT_REG)
         'here add fault diagmostics
     
                   Else
   
         rtd = temp >> 1 '//remove low bit
         If rtd  = 0x7fff Then rtd  = 0
         Temperature =convert(rtd)
         Print At 1,1,"Temp :",Dec1 Temperature,"   "
         Print At 2,1,"rtd :",Dec rtd,"   "
         DelayMS 17 ' //minimum 16.5mSec between readings
  EndIf
  DelayMS 1000
Loop

Proc readRTD(),Word
Dim TT As Byte
clearfault()
enablebias(1)
DelayMS 10

tt = readRegister8(MAX31856_CONFIG_REG)
tt = tt | MAX31856_CONFIG_1SHOT
writeregister8(MAX31856_CONFIG_REG,tt)
DelayMS(65)
Result = readRegister16(MAX31856_RTDMSB_REG)

EndProc

Proc readfault(),Byte
Result = readRegister8(MAX31856_FAULTSTAT_REG)
EndProc

Proc clearfault()
Dim tt As Byte
tt = readRegister8(MAX31856_CONFIG_REG)
tt = tt & ~0x2c
tt = tt | MAX31856_CONFIG_FAULTSTAT
writeregister8(MAX31856_CONFIG_REG,tt)
EndProc

Proc autoconvert(B As Bit)
Dim tt As Byte
Dim aa As Byte
tt = readRegister8(MAX31856_CONFIG_REG)
If B = 1 Then
               tt = tt | MAX31856_CONFIG_MODEAUTO
          Else
               aa = MAX31856_CONFIG_MODEAUTO
               tt = tt & ~aa
EndIf
writeregister8(MAX31856_CONFIG_REG,tt)
EndProc

Proc enablebias(B As Bit)
Dim tt As Byte
Dim aa As Byte
tt = readRegister8(MAX31856_CONFIG_REG)
If B = 1 Then
               tt = tt | MAX31856_CONFIG_BIAS
          Else
               aa =  MAX31856_CONFIG_BIAS
               tt = tt & ~aa
EndIf
writeregister8(MAX31856_CONFIG_REG,tt)
EndProc

Proc setWires(wires As Byte)
Dim tt As Byte
Dim aa As Byte
tt = readRegister8(MAX31856_CONFIG_REG)
If wires = 3 Then
               tt = tt | MAX31856_CONFIG_3WIRE
          Else
               aa = ~MAX31856_CONFIG_3WIRE
               tt = tt & ~aa
EndIf
writeregister8(MAX31856_CONFIG_REG,tt)
EndProc


Proc readRegister8(addr As Byte),Byte
 readRegisterN(addr,1)
 Result = buffer[0]
EndProc

Proc readRegister16(addr As Byte),Word
 buffer = 0
 readRegisterN(addr,2)
 Result = buffer[0] * 256 + buffer[1]
EndProc

Proc readRegisterN(addr As Byte, n As Byte)
Dim ii As Byte
 addr = addr & $7f
 Low Clock_pin_max31685
 Low CS_pin_max31685
 spixfer(addr)
 For ii= 0 To n-1
 buffer[ii] = spixfer($FF)
 Next ii
 High CS_pin_max31685
EndProc

Proc  MAX31865_init()
 High CS_pin_max31685
 Low Clock_pin_max31685
 setWires(4)
 enablebias(0)
 autoconvert(0)
 clearfault()
EndProc

Proc spixfer(x As Byte),Byte
Dim ii As Byte
Dim reply As Byte =0
Dim tmp As Byte
Dim bb As Bit
For ii = 7 To 0 Step -1
reply = reply << 1
High Clock_pin_max31685
tmp = 1 << ii
If x & tmp <> 0 Then
                     mosi_pin_max31685 = 1
                Else
                     mosi_pin_max31685 = 0
EndIf                 

Low Clock_pin_max31685
DelayUS 2
If miso_pin_max31685 = 1 Then reply = reply | 1
Next ii
Result = reply
EndProc

Proc writeregister8(addr As Byte,dat As Byte)
 Low Clock_pin_max31685
 Low CS_pin_max31685
 spixfer ( addr | $80)
 spixfer(dat)
 High CS_pin_max31685
EndProc


Proc convert(r As Word),Float
Dim z1 As Float
Dim z2 As Float
Dim z3 As Float
Dim z4 As Float
Dim rt As Float
Dim temp As Float

    rt = r / 32768
    rt = rt * Rref
    z1 = -rtd_a
    z2 = (rtd_a * rtd_a) - (4 * rtd_b)
    z3 = (4 * rtd_b) / 100
    z4 = 2 * rtd_b
    temp = z2 + (z3 * rt)
    temp = (Sqr(temp) + z1) / z4
    If temp > 0 Then 
                    Result =temp
                    ExitProc
                Else     
                  rt = rt / Rnominal
                  rt = rt * 100
                  Dim rpoly As Float = rt
                  temp = -242.02
                  temp = temp + 2.2228 * rpoly
                  rpoly = rpoly * rt
                  temp = temp + 2.5859 * rpoly / 1000
                  rpoly = rpoly * rt
                  temp = temp - 2.8183 * rpoly / 100000000
                  rpoly = rpoly * rt
                  temp = temp + 1.5243 * rpoly / 10000000000
                  Result = temp
   EndIf
EndProc   
;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings

Config_Start
  OSC = HS ;HS oscillator
  FCMEN = OFF ;Fail-Safe Clock Monitor disabled
  IESO = OFF ;Oscillator Switchover mode disabled
  PWRT = OFF ;PWRT disabled
  BOREN = OFF ;Brown-out Reset disabled in hardware and software
  BORV = 3 ;Minimum setting
  WDT = OFF ;WDT disabled (control is placed on the SWDTEN bit)
  WDTPS = 32768 ;1:32768
  CCP2MX = PORTC ;CCP2 input/output is multiplexed with RC1
  PBADEN = OFF ;PORTB<4:0> pins are configured as digital I/O on Reset
  LPT1OSC = OFF ;Timer1 configured for higher power operation
  MCLRE = On ;RE3 input pin enabled; MCLR disabled
  STVREN = OFF ;Stack full/underflow will not cause Reset
  LVP = OFF ;Single-Supply ICSP disabled
  XINST = OFF ;Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
  Debug = OFF ;Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
  Cp0 = OFF ;Block 0 (000800-003FFFh) not code-protected
  CP1 = OFF ;Block 1 (004000-007FFFh) not code-protected
  CP2 = OFF ;Block 2 (008000-00BFFFh) not code-protected
  CP3 = OFF ;Block 3 (00C000-00FFFFh) not code-protected
  CPB = OFF ;Boot block (000000-0007FFh) not code-protected
  CPD = OFF ;Data EEPROM not code-protected
  WRT0 = OFF ;Block 0 (000800-003FFFh) not write-protected
  WRT1 = OFF ;Block 1 (004000-007FFFh) not write-protected
  WRT2 = OFF ;Block 2 (008000-00BFFFh) not write-protected
  WRT3 = OFF ;Block 3 (00C000-00FFFFh) not write-protected
  WRTC = OFF ;Configuration registers (300000-3000FFh) not write-protected
  WRTB = OFF ;Boot Block (000000-0007FFh) not write-protected
  WRTD = OFF ;Data EEPROM not write-protected
  EBTR0 = OFF ;Block 0 (000800-003FFFh) not protected from table reads executed in other blocks
  EBTR1 = OFF ;Block 1 (004000-007FFFh) not protected from table reads executed in other blocks
  EBTR2 = OFF ;Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks
  EBTR3 = OFF ;Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks
  EBTRB = OFF ;Boot Block (000000-0007FFh) not protected from table reads executed in other blocks
Config_End

;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Sensor de temperatura MAX31865 no consigo que funcione
« Respuesta #9 en: 28 de Mayo de 2025, 06:46:53 »
Hola a todos, pues comento lo que he hecho, resulta que me faltaba cortar una pista del jumper SL1 para que el MAX detecte la sonda de tres hilos, ¿cómo me di cuenta?.
Al hacer las lecturas de los registros RTD MSB y RTD LSB que es donde está el dato medido por la sonda, veía que estaba todo a 0 menos el Bit D0 que es el que avisa de fallo de sonda. a su vez el MAX tiene un registro que es el 0x07 que es un registro de status llamado Fault Status donde según el bit que esté activado te dice cual es el fallo que tiene al leer ese registro.

estos son los bits de dicho registro:
Bit D7 (High Threshold Fault): RTD por encima del límite alto configurado.
Bit D6 (Low Threshold Fault): RTD por debajo del límite bajo configurado.
Bit D5 (REFIN- Low/Open Fault): Circuito abierto en REFIN-.
Bit D4 (REFIN- High/Open Fault): Circuito abierto en REFIN+.
Bit D3 (RTDIN- Low/Open Fault): Circuito abierto en RTDIN-.
Bit D2 (Over/Under Voltage Fault): Voltaje fuera de rango.
Bit D1 (RTD Shorted Fault): RTD en cortocircuito (puede ser a GND o a VDD).
Bit D0 (Fault Status): Bit global de fallo (si cualquiera de los anteriores está activo, este bit también lo estará).

Pues cuando leía el registro de status me devolvía 01000000 eso según el Bit D6 hay un problema de alimentación a la sonda, pues mirando el datasheet de adafruit me di cuenta que tenía que haber cortado la pista esa que he mencionado más arriba.

   Corté esa pista y el MAX empezó a funcionar bien.... hasta que el día siguiente fui a meterme otra vez con mi desarrollo para seguir avanzando y ya no funciona, todos los registros me devuelven 0x00 menos el de configuración que le envío 0xD5 y me devuelve 0x91 ahora no sé si se ha roto el chip, tengo otra pcb igual de adafruit y sin tocar nada del código me devuelve todos los registros 0xFF.
   Sospecho que se han roto ya que son PCB de alixpress y ya sabemos que estos chinos te venden IC falsos que son una kk... creo que puede ser eso

   También entiendo según el datasheet del MAX que este está diseñado para trabajar como máximo a un voltaje de 3.3v tanto la alimentación del chip como los pines del protocolo SPI pero según la el datasheet de adafruit la PCB está preparada para conectar los pines del microcontrolador que trabaja a 5v directamente a los pines de la PCB por que adapta el nivel, eso es lo que he leído ahora no sé si eso se cumple
 
« Última modificación: 28 de Mayo de 2025, 10:07:33 por Thulsa Doom »
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...


 

anything