Czujnik temperatury TC77 z interfejsem SPI.
https://www.microchip.com/wwwproducts/en/TC77
https://ww1.microchip.com/downloads/en/DeviceDoc/20092B.pdf
1. Odczytujemy 2 bajty po SPI w mode 0, MSB first.
Dla STM32 zrealizuje to taki kod:
uint8_t data[2]; HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_RESET); HAL_SPI_Receive(&hspi1, data, 2, 100); HAL_GPIO_WritePin(SPI1_CS_GPIO_Port, SPI1_CS_Pin, GPIO_PIN_SET);
2. Ponieważ w 16 bitach danych temperatura jest zakodowana na 13 bitach w kodzie U2, musimy inaczej postąpić dla wartości ujemnych oraz dodatnich. Użyjemy zmiennej pomocniczej t, która przechowa wartość całkowitą.
uint8_t sign = data[1] & 0x80; int t; if(sign == 0) t = (((data[1]<<8)|data[0]) >> 3); else t = (((data[1] & 0x7f)<<8 | data[0]) >> 3) - 4096;
Konwersja odczytanej liczby na rzeczywistą wartość temperatury:
float temperatura = 0.0; if(data[0] & (1<<2)) temperatura = 0.0625 * t ; printf("T = %.1f *C \r\n", temperatura);
Drugi najmłodszy bit (licząc od zera) wskazuje, czy odczytana wartość jest po prawidłowej konwersji temperatury.