ZL27ARM: cyfrowy termometr z TC77

Projektując urządzenia elektroniczne niejednokrotnie konieczny jest pomiar temperatury otoczenia. W opisywanym projekcie przedstawiono wykorzystanie scalonego termometru TC77 firmy Microchip z wyjściem cyfrowym (SPI) we współpracy z mikrokontrolerem z rodziny STM32.

Dla wygody wykorzystano zestaw uruchomieniowy ZL27ARM z mikrokontrolerem STM32F103, w którym jest zamontowany układ TC77. Prezentacja zmierzonej temperatury odbywa się na dodatkowym module KAmodLCD1 z graficznym wyświetlaczem LCD.

Na rysunku 1 przedstawiono sposób dołączenia modułu wyświetlacza KAmodLCD1 do płytki ZL27ARM. Wyprowadzenia układu TC77 są dołączone do złącza szpilkowego w zestawie ZL27ARM – należy je dołączyć do odpowiednich linii portu PA (rysunek 1). Połączenie wygodnie jest wykonać za pomocą kolorowych przewodów CAB_A pokazanych na rysunku 2. Na rysunku 3 pokazano wyświetlacz LCD podczas pracy programu.

 

Rys. 1. Sposób dołączenia wyświetlacza i układu TC77 do mikrokontrolera STM32

Rys. 1. Sposób dołączenia wyświetlacza i układu TC77 do mikrokontrolera STM32

 

Rys. 2. Kolorowe przewody CAB_A ułatwiające wykonanie połączeń

Rys. 2. Kolorowe przewody CAB_A ułatwiające wykonanie połączeń

 

Rys. 3. Widok wyświetlacza podczas pracy programu

Rys. 3. Widok wyświetlacza podczas pracy programu

 

Zadaniem programu jest wyświetlenie temperatury zmierzonej przez układ TC77. Transmisja pomiędzy układem TC77 i mikrokontrolerem STM32 odbywa się przez interfejs SPI następująco:

  • ustawienie stanu niskiego na linii CS,
  • odczyt 16 bitów rejestru temperatury,
  • zapis 16 bitów do rejestru konfiguracyjnego,
  • odczyt 16 bitów rejestru ID,
  • wysłanie 8 lub 16 bitów do ustawienia trybu przetwarzania,
  • zakończenie transmisji przez ustawienie stanu wysokiego linii CS.

Należy zaznaczyć, że do odczytania tylko danych o temperaturze nie trzeba wykonywać przedstawionego procesu –  wystarczy po odczycie rejestru temperatury zakończyć transmisję. Numer identyfikacyjny układu TC77 jest zapisywany w pierwszych 8 bitach rejestru i powinien mieć wartość 0x54.
Szczególną uwagę należy poświecić na obsługę transmisji SPI przez mikrokontroler STM32. Kierunek transmisji jest zależny od ustawienia bitu BIDIOE w rejestrze SPI_CR1. Jeśli ten bit jest ustawiony, linia działa jako wyjście. Jeśli bit BIDIOE jest wyzerowany, to linia działa jako wejście. Co ważniejsze, w trybie wysyłania danych na linii SCK jest generowany sygnał tylko podczas wysyłania danych, jednak już w trybie obioru sygnał zegarowy jest generowany ciągle. Należy zwrócić także uwagę na znaczniki w rejestrze SPI_SR. Wysyłanie danych można uznać za zakończone po wyzerowaniu znacznika BSY. Ustawienie znacznika TXE informuje o przesłaniu danych z bufora do wysyłania, a sam proces transmisji może nadal trwać. Trzecim ważnym znacznikiem jest RXNE – w momencie jego ustawienia dostajemy informacje, że w buforze znajdują się odebrane dane.
Główny program mikrokontrolera jest stosunkowo nieskomplikowany. Składa się on z inicjalizacji bloku RCC mikrokontrolera oraz termometru cyfrowego. Następnie jest realizowana operacja pobrania ID układu TC77 oraz zapisanie wyświetlacza odpowiednimi danymi, a także konfiguracja przerwania pochodzącego od SysTick. Na listingu 1 przedstawiono funkcję main programu.

 

List. 1

Odczytywanie zmierzonej wartości temperatury z układu TC77 i wysyłanie danych do wyświetlacza LCD odbywa się podczas obsługi przerwania SysTick. Na listingu 2 zamieszczono funkcję obsługi tego przerwania. Odczyt temperatury jest realizowany przez funkcję TC77_GetTemp. Należy pamiętać, że wartość temperatury jest zapisana w 13 bardziej znaczących bitach, gdzie najstarszy to bit znaku. Należy więc wykonać przesunięcie o 3 bity w prawo, dodatkowo 2 najmniej znaczące bity są zerowane. W wyniku tych operacji uzyskiwana jest dokładność 0,25°C. Do przechowywania wartości zmierzonej temperatury w °C jest wykorzystywana ta sama zmienna, do której wcześniej była odczytywana wartość temperatury z układu TC77. Obliczenie temperatury jest realizowane przez iloczyn rejestru i liczby 625 w wyniku czego zmienna temp_tc77 przechowuje wartość temperatury postaci 10-4°C. Wcześniej jest sprawdzane, czy rejestr nie ma ustawionego bitu informującego o temperaturze ujemnej. W przypadku temperatur poniżej zera, aby uzyskać poprawny wynik, należy wartość zanegować i dodać 1 oraz usunąć wyzerować bit znaku.

 

List. 2

Dla zwiększenia przejrzystości w programie zastosowano trzy funkcje obsługi układu TC77. Pierwsza z nich (TC77_Init) służy do inicjalizacji układu, druga (TC77_GetTemp) do odczytania temperatury, trzecia funkcja (TC77_GetID) do pobrania ID układu. Funkcja pobrania ID układu jest niemal identyczna, jak pobrania wartości rejestru temperatury – różnica polega jedynie na tym, że w przypadku tej drugiej zaraz po pobraniu rejestru temperatury następuje zakończenie transmisji. Na listingu 3 przedstawiono funkcję pobrania ID układu TC77.

 

List. 3

Interfejs SPI w pracuje jako Master, tak więc w czasie odbioru na linię SCK jest wystawiany sygnał o określonej częstotliwości. W celu uniknięcia tego program po zakończeniu transmisji wyłącza interfejs SPI wykorzystując polecenie SPI1->CR1 &= ~SPI_CR1_SPE (zerujące bit SPE). Natomiast rozpoczęcie transmisji wymaga ustawienia tego bitu, jest to realizowane przez polecenie SPI1->CR1 |= SPI_CR1_SPE. Należy także zwrócić uwagę na przełączanie z trybu odbioru do nadawania realizowane przez polecenie SPI1->CR1 |= SPI_CR1_BIDIOE, powodujące ustawienie bitu BIDIOE. Wyzerowanie tego bitu powoduje przejście do trybu odbioru, polecenie ma postać SPI1->CR1 &= ~SPI_CR1_SPE.  Wartość rejestru jest zwracana poleceniem return.

Mariusz Dziębowski
m.dziebowski@interia.pl

Do pobrania

Autor: