Motylowy termometr

Kontroler DMA

Mikrokontrolery STM32F107 wyposażono w 12-kanałowy kontroler DMA. Każdy kanał może mieć programowo przypisany priorytet. Możliwa jest transmisja pomiędzy dwoma urządzeniami peryferyjnymi, z urządzenia peryferyjnego do pamięci, z pamięci do urządzenia peryferyjnego oraz z pamięci do pamięci. Dane można przesyłać od/do pojedynczych adresów, można także przesyłać bloki danych, przy czym maksymalny rozmiar takiego bloku może wynosić 65535 elementów (bajtów, półsłów lub słów).
Fragment programu konfigurującego kontroler DMA do pracy z przetwornikiem A/C przedstawiono na list. 2.

List. 2. Konfiguracja DMA do pracy z przetwornikiem A/C

 

 

Sterowniki wyświetlacza LCD

Na potrzeby aplikacji przygotowano trójwymiarową tablice zawierającą wygląd cyfr o wymiarach 24 na 40 pikseli, co umożliwiło zdefiniowanie czcionki Comic Sans MS o rozmiarze 36 punktów. Oprócz cyfr od 0 do 9 w tablicy znajduje się również znak oC. Fragment tablicy zamieszczono na list. 3.

List. 3. Fragment tablicy definicji znaków o rozmiarze 24 na 40 pikseli

 

Wyświetlenie znaku z tablicy odbywa się za pomocą wywołania funkcji LCD_WriteChar(). W argumentach należy podać pozycję znaku w tablicy oraz numery wiersza i kolumny (początek rysowania znaku). Ciało funkcji przedstawiono na list. 4.

List. 4. Funkcja rysująca na LCD duże cyfry

 

Spojrzenie na całość

Po zakończeniu konfiguracji mikrokontroler przystępuje do wykonywania pętli while, przedstawionej na list. 5. Wynik pomiaru temperatury po obliczeniach jest przechowywany w zmiennej globalnej temp_a, jest to aktualna wartość temperatury zmierzonej przez czujnik ulokowany w strukturze mikrokontrolera.

List. 5. Główna pętla programu

 

Dla poprawienia dokładności pomiarów obliczana jest średnia arytmetyczna wyników kolejnych 256 pomiarów. Następnie mikrokontroler sprawdza, czy od ostatniej aktualizacji zawartości wyświetlacza temperatura zmieniła się. Jeśli tak, to zawartość wyświetlacza LCD jest aktualizowana, a wartość aktualnej temperatury jest archiwizowana w zmiennej temp_p.

O autorze