(6) Mikrokontrolery MSP430: porty I/O, obsługa wejść

W programie głównym zatrzymywana jest pracy układu Watchdog :

Następnie konfigurowane są linie wejścia/wyjścia mikrokontrolera. Wszystkie linie wejścia/wyjścia ustawiane są jako wyjścia w stanie niskim. Najpierw ustawiany jest stan niski na liniach, następnie zmieniany jest kierunek linii z wejścia na wyjście:

W kolejnych instrukcjach konfigurowana jest praca linii numer 0 portu P4 (jest to linia, do której dołączono przycisk S1). Aktywowany jest rezystor podciągający typu pull-up :

Zmieniany jest kierunek linii z wyjścia na wejście:

Linia P4.0 pracuje jako wejście z rezystorem podciągającym pull-up . W pętli głównej programu sprawdzany jest stan wejścia. Jeśli na wejściu wykryty zostanie stan niski (wciśnięcie przycisku S1), to włączana jest dioda sygnalizacyjna LED1:

W przeciwnym wypadku (przycisk S1 jest zwolniony) dioda sygnalizacyjna LED1 jest wyłączana:

 

Tryb przerwań

Kod źródłowy programu z obsługą wejścia w trybie przerwań pokazano na listingu 6.

List. 6 Obsługa wejścia. Tryb przerwań

W programie głównym jest zatrzymywana praca układu Watchdog . Linie wejścia/wyjścia mikrokontrolera ustawiane są jako wyjścia w stanie niskim. Linia P4.0 do której dołączono przycisk S1 jest konfigurowana jako wejście z włączonym rezystorem podciągającym pull-up .

Następnie konfigurowana jest obsługa przerwań dla wejścia P4.0. Ustawiane jest zbocze sygnału, które ustawia flagę przerwania. Ponieważ program ma reagować na wciśnięcie przycisku S1 (zmiana stanu na wejściu z wysokiego na niski), to ustawiane jest zbocze opadające:

Zerowana jest flaga przerwania:

Włączana jest obsługa przerwań dla wejścia P4.0:

Następnie odblokowywana jest obsługa przerwań maskowalnych:

W pętli głównej programu mikrokontroler wprowadzany jest w tryb uśpienia LPM4:

W trybie uśpienia LPM4 jednostka centralna CPU mikrokontrolera jest wyłączona. Źródła sygnałów zegarowych są wyłączone. Wszystkie sygnały zegarowe są nieaktywne. Jedynie co robi mikrokontroler to podtrzymuje zawartość pamięci SRAM. Mikrokontroler przebywa w trybie uśpienia LPM4, do momentu wciśnięcia przycisku S1. Wówczas stan sygnału na wejściu P4.0 zmienia się z wysokiego na niski (opadające zbocze sygnału). Ustawiana jest flaga przerwania, a program przechodzi do wykonania procedury obsługi przerwania:

W procedurze obsługi przerwania odczytywana jest wartość rejestru P4IV (instrukcja switch). Odczytanie z rejestru wartości 2 oznacza przerwanie od wejścia P4.0. W bloku programu z kodem obsługi przerwania od wejścia P4.0 wydawana jest instrukcja, która nakazuje aby po zakończeniu procedury obsługi przerwania mikrokontroler nie wracał do trybu uśpienia:

Następnie procedura obsługi przerwania jest kończona. Po wyjściu z procedury obsługi przerwania mikrokontroler opuszcza tryb uśpienia LPM4 i rozpoczyna wykonanie pętli głównej programu. W pętli głównej programu włączana jest dioda LED1:

W pętli while sprawdzany jest stan wejścia:

Pracę pętli while przerywa wykrycie stanu wysokiego na wejściu (puszczenie przycisku S1). Wówczas wydawana jest instrukcja wyłączająca diodę LED1:

Następnie mikrokontroler ponownie jest usypiany. W trybie uśpienie LPM4 mikrokontroler MSP430FR5739 pozostaje do momentu ponownego wciśnięcia przycisku S1.

 

Pobór prądu

W testowanym programie (tryb polling ) mikrokontroler cyklicznie sprawdza stan wejścia, pracując w trybie aktywnym AM. Pobór prądu przez mikrokontroler zastosowany w zestawie LaunchPad wynosi około 222,1 µA. W drugiej wersji programu – z wykorzystaniem przerwań – mikrokontroler korzysta z trybu uśpienia LPM4. W trybie uśpienia pobór prądu modułu LaunchPad wynosi 8,1 µA. W czasie, gdy przycisk S1 jest wciśnięty a dioda LED1 włączona, pobór prądu w obu przypadkach wynosi 2,58 mA.

Pobór prądu zestawu Launchpad mierzony był na złączu J3 (amperomierz wpięty w linię VCC układu). Zestaw był zasilany z portu USB komputera PC.

Zakładając, że w ciągu doby przycisk będzie wciskany 5 razy i za każdym razem na czas 20 sekund, to w przypadku programu z obsługą przerwań średni pobór prądu moduł będzie 20 razy mniejszy! Zasilając moduł LaunchPad z baterii CR2032 o pojemności 240 mAh, w pierwszym przypadku na jednym komplecie baterii moduł będzie pracować niecałe 45 dni, w drugim przypadku prawie 2,5 roku. W przypadku energooszczędnych aplikacji mikrokontroler powinien korzystać z trybów uśpienia LPMx, a wejścia mikrokontrolera powinny być obsługiwane w trybie przerwań!

Do pobrania

O autorze