Zakres laboratorium:
  1. Wykorzystanie przerwań wewnętrznych – praca z dokumentacją mikrokontrolera
  2. Obsługa wyświetlacza 7 segmentowego – 1 segment
  3. Obsługa wyświetlacza 7 segmentowego – 4 segmenty
  4. Zegarek na wyświetlaczu 7 segmentowym
  5. Zadanie domowe
Zadania do wykonania:
  • Zadanie 1.1
  • Zadanie 1.2
  • Zadanie 2.1
  • Zadanie 3.1
  • Zadanie 4.1
  • Zadanie domowe

 

1. Wykorzystanie przerwań wewnętrznych – praca z dokumentacją mikrokontrolera

Zadanie 1.1

Skopiować do pliku „main.cpp” poniższy kod programu (plik „GLOBAL.h„), zapoznać się z zmiennymi i funkcjami jakie występują.

Przerwania – jest to mechanizm, który pozwala mikrokontrolerowi na przerwanie bieżąco wykonywanych zadań na skutek otrzymania jakiegoś zdarzenia, które wymaga pilnej obsługi. Źródłem przerwań mogą być:

  • wewnętrzne układy
    • liczniki – przepełnienie licznika, odliczenie ustalonej ilości impulsów
    • moduł komunikacji – zdarzenie informujące o zakończeniu transmisji
    • przetworniki – zdarzenie informujące o zakończeniu przetwarzania
    • itd.
  • zewnętrzne (sygnały podawany na wyprowadzenia mikrokontrolera)
    • wciśnięcie przycisku
    • enkodery – liczenie impulsów
    • układy zewnętrzne generujące przerwania (czujnik pomiaru temperatury – skończył pomiar i generuje przerwanie w celu poinformowania mikrokontrolera, że może już pobrać wynik pomiaru)
    • itd.

Przerwanie wewnętrzne

Należy wykorzystać przerwanie wewnętrzne pochodzące od Timer1 w celu wygenerowania sygnału prostokątnego na wyprowadzeniu mikrokontrolera PD6 o częstotliwości 1s (0,5sekundy stan niski, 0,5 sekundy stan wysoki).

Pierwsze kroki:

  • podłączyć diodę z linijki diodowej do wyprowadzenia PD6, skonfigurować wyprowadzenie do pracy jako wyjście, ustawić stan w jakim dioda jest wyłączona (funkcja „main”)

Zadanie 1.2

  • skonfigurować TIMER1 w funkcji „TimerInit()” tak aby wywoływał przerwanie dokładnie, co 0,5 sekundy (konfiguracja rejestrów mikrokontrolera – dokumentacja)
  • uzupełnić kod przerwania „ISR(TIMER1_COMPA_vect)”, którego działanie będzie polegać na mruganiu diodą LED podłączoną do portu PD6 (makro „tbi”)
  • jak działa program, co się dzieje w pętli głównej programu

 

 

 

2. Obsługa wyświetlacza 7 segmentowego – 1 segment

Budowa pojedynczego segmentu:

Schemat wewnętrzny wyświetlacza 7-segmentowego
Schemat wewnętrzny pojedynczego segmentu wyświetlacza 7-segmentowego.

Powyżej został przestawiony schemat wewnętrzny jednego segmentu wyświetlacza ze wspólną anodą. Nazwa wyświetlacza bierze się od 7 diod LED (A,B,C,D,E,F,G) dodatkowo wyświetlacz posiada 8 diodę, która odpowiada za znak kropki (DP). Diody są ustawione w segment przedstawiony na rysunku:

Oznaczenia diod LED w pojedynczym segmencie
Oznaczenia diod LED w pojedynczym segmencie

 

Takie ułożenie pozwala na wyświetlenie wszystkich liter i całego alfabetu za pomocą odpowiedniego wysterowania 7 diodami LED. Np. wyświetlenie cyfry „0” to włączenie diod LED oznaczonych A,B,C,D,E,F. Literę „A” można uzyskać przez włączenie A,B,C,E,F,G.

 

Schemat wyświetlacza i jego podłączenia na płytce edu został przedstawiony na rysunku poniżej. W górnej części schematu znajduje się tranzystory typu PNP, które pozwalają na wysterowanie/
uruchomienie odpowiedniej kolumny wyświetlacza – tak aby każdy z 4 segmentów mógł wyświetlić inną wartość.

Schemat podłączenia wyświetlacza na płytce EDU
Schemat podłączenia wyświetlacza na płytce EDU

Pierwsze kroki:

  • podłączyć wyświetlacz zgodnie z schematem:

    Podłączenie wyświetlacza 7-segmentowego do mikrokontrolera
    Podłączenie wyświetlacza 7-segmentowego do mikrokontrolera

Zadanie 2.1

  • skonfigurować wykorzystane porty mikrokontrolera jako wyjścia -zrobić to w funkcji „seg7Init()”
  • na wyprowadzenia W1,W2,W3,W4 podać stan niski – przed pętlą „while(1)” w funkcji „main” (jest to rozwiązanie chwilowe – pozwoli na testowanie jednego segmentu)
  • uzupełnić kod funkcji „seg7ShowCyfra()” tak aby wyświetlała liczby z zakresu 0-9 z wykorzystaniem tablicy „cyfra” (seg7ShowCyfra(0) – ma wyświetlić 0, seg7ShowCyfra(5) ma wyświetlić 5). Należy uzupełnić tablicę cyfra aby wartości odpowiadały za wyświetlanie prawidłowych cyfr.

 

3. Obsługa wyświetlacza 7 segmentowego – 4 segmenty

W celu obsługi wyświetlacza składającego się z 4 kolumn 7 segmentowych można wykorzystać multipleksowanie. Metoda ta pozwala ograniczyć ilość potrzebnych portów mikrokontrolera, ponieważ na każdy kolejny segment wystarczy 1 wyprowadzenie, czyli do obsługi naszego wyświetlacza mającego 4 kolumny z 7 segmentami wykorzystamy 11 wyprowadzeń (7+4). Sterują bez
multipleksowania potrzebowalibyśmy na każdy segment 7 wyprowadzeń, czyli musielibyśmy wykorzystać 28 wyprowadzeń (7*4). Można prosto ograniczyć ilość potrzebnych połączeń jednak kosztem trudniejszego sterowania. Multipleksowanie polega na szybkim przełączaniu kolejnych segmentów i wyświetlaniu odpowiedniej wartości. Robiąc to odpowiednio szybko ludzkie oko będzie oszukiwane i człowiek zobaczy na wyświetlaczu stałą wartość. Do zrozumienia jak taki efekt uzyskać na płytce EDU należy wrócić do rysunku „Schemat podłączenia wyświetlacza na płytce EDU”, gdzie w górnej części są tranzystory PNP, które pozwalają włączyć/wyłączyć każdą kolumnę niezależnie.

Algorytm multipleksowania:

  1. włączyć kolumnę Wx
  2. wyświetlić cyfrę dla kolumny Wx
  3. wyłączyć kolumnę Wx
  4. operacje powtórzyć dla wszystkich 4 kolumn

Robiąc to odpowiednio szybko otrzymamy stałą wartość składającą się z 4 znaków (4 kolumny)

Zadanie 3.1

  • usunąć kod realizujący zadanie: „na wyprowadzenia W1,W2,W3,W4 podać stan niski – przed pętlą „while(1)” w funkcji „main”
  • zmienić główną pętlę „while” na”
  • przygotować funkcję „seg7Show4Cyfry()”, która pozwala wyświetlić na wyświetlaczu liczbę z zakresu 0-9999
  • wykorzystać przerwanie do zwiększania wartości liczby jaką wyświetlamy (dopisać kod do funkcji „ISR(TIMER1_OVF_vect)”)

 

4. Zegarek na wyświetlaczu 7 segmentowym

Należy przygotować program, który będzie realizował funkcje zegarka – sekundy odmierzane z wykorzystaniem przerwania wewnętrznego. Czas wyświetlany na wyświetlaczu 7 segmentowym.

Zadanie 4.1

  • do odmierzania czasu należy wykorzystać przerwanie pochodzące od TIMER1 (skonfigurować przerwanie aby było wywoływane z okresem 1 sekundy)
  • w funkcji przerwania „ISR(TIMER1_OVF_vect)” należy odpowiednio operować na zmiennych „minuty” i „sekundy” w celu uzyskania prawidłowo odmierzania czasu
  • wykorzystać funkcję z poprzedniego zadania „seg7Show4Cyfry()” (wpisywać odpowiednią wartość do zmiennej „liczba7Seg”)  i zaprezentować aktualny czas na wyświetlaczu 7 segmentowym
5. Zadanie domowe
  1. schemat podłączenia wyświetlacza 7 segmentowego do mikrokontrolera

Zadania na ocenę 5,5:

  1. przygotować funkcję „seg7Show4Litery()” – do tablicy „znaki[4]” -wpisujemy dowolne cyfry, liczby i funkcja wyświetla zawartość na wyświetlaczu 7-segmentowym
  2. przepisać funkcję odpowiedzialną za multipleksowanie do przerwania – tak aby w pętli głównej programu operacje nie blokowały wyświetlacza

 

Zagadnienia na przyszłe zajęcia:
  • przetwornik ADC