Zakres laboratorium:
- tworzenie projektu i praca w środowisku Eclipse
- obsługa portów mikrokontrolera – tryb pracy jako wyjścia
- obsługa portów mikrokontrolera – tryb pracy jako wejścia
- obsługa diody RGB – sygnał PWM
Wszystkie zadania/programy należy tworzyć w nowych funkcjach. Funkcje takie należy wywoływać w pętli while(1) w programie głównym.
1 2 3 4 5 6 7 8 9 10 11 12 |
//Tworzymy nowa funkcje dla kazdego rozwiazywanego problemu - nazwa funkcji tozsama z problemem void linijkaDiodowa() { //Tu tworzymy kod funkcji - rozwiazanie postawionego problemu } int main() { while (1) { linijkaDiodowa(); } } |
1.Tworzenie projektu i praca w środowisku Eclipse:
- założyć projekt (instrukcja do środowiska Eclipse):
- język programowania: C++
- mikrokontroler: ATmega32A
- częstotliwość taktowania: 8 000 000 Hz
- programator: USBasp
- dodać do projektu pliki z paczki
- skompilować projekt i wgrać do mikrokontrolera
- przypomnieć podstawowe informacje o sterowaniu pinami w mikrokontrolerze ATmega32A, typy zmiennych uint8_t, int8_t itd.
2.Obsługa portów mikrokontrolera – tryb pracy jako wyjścia
- podłączyć pin PC7 do skrajnej lewej diody na linijce diodowej (linijka powinna być skonfigurowana aby uruchomienie segmentu następowało po podaniu stanu niskiego)
- utworzyć program, którego działanie polega na włączaniu i wyłączaniu jednej diody z częstotliwością 1Hz – wykorzystać makra sbi(),cbi()
- podłączyć kolejne dwie diody (PC6, PC5) i przygotować program, który po uruchomieniu włączy wszystkie diody na czas 5 sekund a następnie pierwsza dioda zostanie wyłączona. W kolejnych krokach z częstotliwością 1Hz zostanie włączona dioda, która nie działa i zostanie wyłączona kolejna dioda – wykorzystać makro tbi() i pętlę for()
- podłączyć 8 diod na linijce diodowej do kolejnych portów. Przygotować program “biegający punkt” – jedna dioda na linijce diodowej (punkt) jest włączona i porusza się w lewo lub w prawo – w zależności gdzie świecący punkt był wcześniej
3.Obsługa portów mikrokontrolera – tryb pracy jako wejście
- podłączyć pin PD2 do przycisku SW1 (W1) na klawiaturze macierzowej, K1 podłączyć do GND. Skonfigurować pin PD2 do pracy jako wejście. Sprawdzić jaki stan pojawia się na pinie PD2 gdy przycisk SW1 jest przyciśnięty
- przygotować program, który włącza wszystkie diody na linijce diodowej, gdy przycisk jest przyciśnięty (przycisk puszczony, diody wyłączone) – wykorzystać makro bit_is_set() lub bit_is_clear() – przycisk monostabilny
- przygotować program, który włącza wszystkie diody na linijce diodowej, gdy przycisk zostanie raz naciśnięty. Kolejne przyciśnięcie spowoduje wyłączenie – przycisk bistabilny
- podłączyć pin PD3 do przycisku SW5 (W2). Przygotować następująca funkcję w programie: gdy przycisk SW5 jest przyciśnięty to działa tryb “biegający punkt” – puszczenie przycisku powoduje natychmiastowe wyłączenie tego trybu. dodatkowo przycisk SW1 działa jak w zadaniu “przycisk monostabilny”. Gdy zostaną przyciśnięte dwa przyciski to następuje wywołanie funkcji odpowiedzialnej na mruganie wszystkimi diodami z częstotliwością 1Hz
4.Obsługa diody RGB – sygnał PWM
Podstawowe informacje o diodzie RGB
Dioda RGB emituje 3 barwy światła: zielone, czerwone i niebieske. Są to 3 podstawowe kolory, których mieszanie pozwala osiągnąć wszystkie inne kolory – pełnej palety barw. Dioda RGB posiada 4 wyprowadzenia. Trzy wyprowadzenia odpowiadają za sterowanie poszczególnymi kolorami. 4 wyprowadzenie jest wspólną anodą lub katodą (zależy od typu diody). W rzeczywistości można uprościć diodę RGB do 3 diod o kolorze czerwonym,zielony i niebieskim, których jedno z wyprowadzeń zostało złączone – dokładnie widać to na poniższym schemacie:
Moduł RGB
Moduł z diod¡ą RGB został przygotowany w celu zapoznania kursantów z możliwościami wykorzystania zewnętrznej diody, oraz zastosowania sygnałów generowanych przez mikrokontroler (sygnał PWM) do wygenerowania
różnych kolorów za pomoc¡ diody RGB. Moduł posiada 4 przewody w różnych kolorach, które są odpowiedzialne za funkcje zgodnie z poniższym opisem:
- Czerwony – katoda diody o barwie czerwonej
- Pomarańczowy – anoda wszystkich diod – podłączyć do VCC
- Zielony – katoda diody o barwie zielonej
- Niebieski – katoda diody o barwie niebieskiej
Rezystory zostały podłączone szeregowy w celu ograniczenia prądu płynącego przez diody. Wartość każdego rezystora wynosi 330R. Szczegółowe parametry diody można znaleźć w karcie katalogowej
Diodę należy podłączyć do płytki EDU według poniższego schematu (PD4,PD5,PD7):
Porty w mikrokontrolerze nie zostały wybrane przypadkowo, na tych wyprowadzeniach można skorzystać z generowanego sprzętowo sygnału PWM, który ułatwi precyzyjne sterowanie barwą emitowanego światła przez moduł RGB.
Zadania
- obliczyć prąd jaki płynie w przewodach o kolorach RGB
- przygotować klasę RGB (paczka z klasą RGB) i dodać ją do projektu – dołączyć do pliku main.cpp za pomocą “include”
- zaimplementować funkcją statyczną: initLogic() – wywołanie jej powoduje skonfigurowanie odpowiednich pinów w celu sterowania diodą RGB
- zaimplementować funkcję statyczną setLogic(red,green,blue) – argumentami są wartości logiczne, podanie 1 powoduje zaświecenie danego koloru, podanie 0 powoduje wyłączenie. Następnie w celach testowych przygotować program, który reaguje na 2 przyciski (wcześniej podłączone). Przyciśnięty przycisk SW1 – uruchomiony kolor czerwony, przyciśnięty przycisk SW2 – uruchomiony kolor zielony, przyciśnięte dwa przyciski – uruchomiony kolor niebieski (inne kolory są wyłączone) – program powinien znajdować się w pliku main.cpp – klasa RGB obsługuje tylko diodę – nie może korzystać z przycisków
12345678910111213141516void RGB::initLogic() {//Ustawienie pinow jako wyjscia - odpowiedzialnych za sterowanie PD4,PD5,PD7//Ustawic piny w stanie wysokim}void RGB::setLogic(uint8_t red, uint8_t green, uint8_t blue) {//red = 1 - kolor czerowny diody LED uruchomiony//red = 0 - kolor czerowny diody led wylaczony//green = 1 - kolor zielony diody LED uruchomiony//green = 0 - kolor zielony diody led wylaczony//blue = 1 - kolor niebieski diody LED uruchomiony//blue = 0 - kolor niebieski diody led wylaczony} - sterowanie sygnalem PWM – należy wykorzystać sygnał PWM pochodzący z Timer1 i Timer2 (wyprowadzenia OC1A,OC1B i OC2). Timery należy skonfigurować do pracy w trybie Fast PWM – konfiguracji należy dokonać w funkcji initPWM(). Nastepnie przygotować funkcję setPWM(red, green, blue) – argumentami są wartości z zakresu 0-255 odpowiadaj¡ce poziomowi jasności danego koloru (0-kolor wyłączony, 255- maksymalna moc).
123456789101112131415161718192021222324static void RGB::initPWM() {//Ustawic Timer1 i Timer2 (wyprowadzenia OC1A,OC1B i OC2) do pracy w trybie PWM//Timer1 - TCCR1A - Fast PWM - set/clear OC1A/OC1B//Timer1 -TCCR1A/TCCR1B - FastPWM 8-bit//Timer1 - TCCR1B - clock select//Timer2 - TCCR2 - Fast PWM - set/clear OC2//Timer2 - TCCR2 - Fast PWM//Timer2 - TCCR2 - clock select}static void RGB::setPWM(uint8_t red,uint8_t green,uint8_t blue) {//Timer1 - OCR1A,OCR1B//Timer2 - OCR2} - przygotować program, który po przyciśnięciu przycisku czerwonego spowoduje płynne rozjaśnienie koloru czerwonego na diodzie RGB. Powtórne przyciśnięcie tego samego przycisku spowoduje płynne wyłączenie.
- przygotować program, który w kolejnych krokach (pętla nieskończona) będzie za pomocą diody RGB generował kolory: czerwony,zielony,niebieski, żółty, pomarańczowy, fioletowy i jakieś 2 dodatkowe (wybiera grupa).