ZL27ARM: obsługa cyfrowego termometru 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. 2. Kolorowe przewody CAB_A ułatwiające wykonanie połączeń
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 prosty. 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
int main(void) { //konfiguracja RCC Configuration_RCC(); //inicjalizacja TC77 TC77_Init(); //pobranie id układu TC77 id_tc77 = TC77_GetID(); //konfiguracja przerwania SysTcik Configuration_Interrupts(); //inicjalizacja i obsługa wyświetlacza PCD8544_INIT(); PCD8544_LCDClear(); PCD8544_LCDWriteText("Pomiar temp.", 6, 1); //zapisanie ID na wyświetlacz PCD8544_LCDWriteText("TC77 ID:", 3, 4); PCD8544_LCDWriteSign('0', 57, 4); PCD8544_LCDWriteSign('x', 63, 4); PCD8544_LCDWriteSign(id_tc77 / 0x1000 + 0x30, 69, 4); PCD8544_LCDWriteSign(id_tc77 % 0x1000 / 0x0100 + 0x30, 75, 4); while (1){} }