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:
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:
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