Powrót

Mikroprocesorowa ośla łączka, część 7

Jednocyfrowy wyświetlacz 7-segmentowy raczej nie pozwala na prezentowanie bardziej złożonej informacji. By w prosty sposób obsłużyć większe wyświetlacze (w sensie liczby znaków) koniecznością staje się pokonanie czegoś, co nazywa się przerwaniem.

Kolejna część cyklu poświęcona jest obsłudze wyświetlacza 7-segmentowego (tym razem składającego się z kilku cyfr). Jednocześnie wystąpią kolejne nowe elementy dotyczące typów danych oraz coś, co określane jest mianem przerwania. Wokół tego pojęcia narosła aura tajemniczości i skomplikowania. W rzeczywistości nie jest to „straszne” i przekonamy się, że „ten tygrys raczej nie gryzie”. Patrząc z innej perspektywy, dzisiaj nie ma mikroprocesorów, które nie dysponują mechanizmem obsługi przerwań, toteż pozostaje nam zaakceptować je i sprawnie się nim posługiwać. Ze sprzętowego punktu widzenia w mikrokontrolerach problematyka ich obsługi została opanowana i nie wymaga żadnych dodatkowych elementów (jako obsługa przerwań, co najwyżej czasami mogą wystąpić zewnętrzne dla mikrokontrolera elementy służące do ich generowania, gdyż istnieje grupa przerwań wzbudzanych sygnałami przychodzącymi spoza mikrokontrolera). Samo przerwanie to sygnał, pewnego rodzaju zaburzenie, które wdziera się do normalnej pracy mikroprocesora i wymaga poświęcenia mu uwagi. W programie sprowadza się to do zawarcia specjalnej funkcji do reakcji na to zdarzenie, która musi współgrać ze „sprzętem” mikrokontrolera. ATMEGA328 (podobnie jak wszystkie inne z tej rodziny) ma wiele źródeł takich sygnałów,
kilka z nich pokazuje tabela na rysunku 1 (wszystkie są wymienione w dokumentacji do ATMEGA328, dostępnej na stronie https://www.microchip.com).

Rysunek 1

Istotnym tutaj elementem jest szybkość reakcji na przerwanie, toteż mikrokontroler ma specjalizowany podzespół do ich obsługi. Przerwania te są wektoryzowane (są ponumerowane) i w pamięci programu Flash występuje specjalna tabela, wiążąca wektor przerwania (numer przerwania) z konkretną funkcją jej obsługi. Nad tymi powiązaniami „panuje” kompilator w kooperacji z linkerem a nam pozostaje jedynie w specjalny sposób „zaznaczyć” w programie źródłowym funkcje, które są przewidziane do reakcji na konkretne przerwanie.

Przerwanie od upływu czasu

Odmierzanie interwałów czasu jest prostą operacją polegającą na zliczaniu impulsów o określonej częstotliwości. Pamiętając, że częstotliwość taktowania modułu Arduino Nano wynosi 16 MHz, to zliczanie tych impulsów w specjalnym liczniku (przykładowo TIMER/COUNTER 0, rysunek 2) pozwala na pomiar czasu.

Rysunek 2

Licznik ten można tak zaprogramować, że po jego przepełnieniu zostanie wygenerowany sygnał przerwania. Licznik ten jest 8-bitowy, toteż po odliczeniu 256 impulsów nastąpi przepełnienie (przejście z FF hex na 00 hex), które z kolei wygeneruje odpowiedni sygnał przerwania. Łatwo policzyć, że to zdarzenie będzie zachodzić co 0,016 ms. Jest to dosyć „szybko”, toteż mikrokontrolery AVR mają preskaler (wstępny podzielnik) pozwalający na zmniejszenie częstotliwości zliczanych impulsów. Preskaler ten jest konfigurowalny przez program (poprzez zapis określonych informacji do jednego z rejestrów związanego z zespołem zegara/licznika). Do odmierzania interwałów czasu zostanie wykorzystany TIMER/COUNTER 0, generujący sygnał przerwania po wystąpieniu przepełnienia licznika. ATMEGA328 w swoich zasobach ma więcej takich zespołów. Identyczną funkcjonalnością dysponuje TIMER/COUNTER 1 oraz TIMER/COUNTER 2, co pokazuje rysunek 2 jako T/C1 oraz T/C2, z tym, że TIMER/COUNTER 1 jest licznikiem 16-bitowym (TIMER/COUNTER 0 oraz TIMER/COUNTER 2 są ośmiobitowe).

(…)

——– ciach! ——–

To jest tylko fragment artykułu, którego pełna wersja ukazała się w numerze grudniowym czasopisma Zrozumieć Elektronikę (ZE 12/2024). Pełną wersję czasopisma znajdziesz pod tym linkiem. Natomiast niepełna, okrojona wersja, pozwalająca zapoznać się z zawartością numeru ZE 12/2024 znajduje się tutaj.

Andrzej Pawluczuk
apawluczuk@vp.pl

 

Uwaga! Osoby, które nie są (jeszcze) stałymi Patronami ZE, mogą nabyć PDF-y z pełną wersję tego numeru oraz wszystkich innych numerów czasopisma wydanych od stycznia 2023, „stawiając kawę” (10 złotych za jeden numer czasopisma w postaci pliku PDF).
W tym celu należy kliknąć link (https://buycoffee.to/piotr-gorecki), lub poniższy obrazek
Postaw mi kawę na buycoffee.to
Następnie wybrać:
– jeśli jeden numer ZE – 10 zł,
– jeśli kilka numerów ZE – WSPIERAM ZA. I tu wpisać kwotę zależną od liczby zamawianych numerów – wydań (N x 10 zł),
Wpisać imię nazwisko.
Podać adres e-mail.
Koniecznie zaznaczyć: „Chcę dołączyć wiadomość dla Twórcy” i tu wpisać, który numer lub numery mamy wysłać na podany adres e-mailowy. Jeśli ma to być numer z tym artykułem trzeba zaznaczyć, że chodzi o ZE 12/2024.
UWAGA!!! E-mail z linkiem do materiałów (weTransfer) wysyłamy zazwyczaj w ciągu 24 godzin. Czasem zdarza się jednak, że trafia do spamu. Jeśli więc nie pojawi się w ciągu 48 godzin prosimy sprawdzić w folderze spam, a ewentualny problem zgłosić na adres: kontakt@piotr-gorecki.pl.