Język C Wykład 9: Mikrokontrolery cz.2 Łukasz Gaweł Chemia C pokój 307 lukasz.gawel@pg.edu.pl
Pierwszy program- powtórka Częstotliwość zegara procesora μc (należy sprawdzić z kartą techniczną μc) Dodaje plik nagłówkowy zawierający deklaracje rejestrów IO. Zapewnia komunikację μc z urządzeniami Definiuje porty użyte do komunikacji z urządzeniami zewnętrznymi Ustawia port PB0 oraz PB1 jako port wyjściowy Ustawia stan wysoki na wyjściu sterującym PB0 (dioda się nie świeci) Wykorzystano edytor Programmers Notepad
Modyfikacja- timery(zegary) Timer- wewnętrzny układ liczący impulsy, który niezależnie od działających urządzeń odmierza czas, najczęściej spotykane są timery 16 i 8 bitowe Brak z góry zdefiniowanego zegara procesora Wybór źródła taktowania Timer0, oraz włączenie przerwania od przepełnienia (dla 8-bitowego timera wynosi ono 256 ms) Efekt przepełnienia- zapalenie/zgaszenie diody Rezultat? Uzyskanie zmiany świecenia diód z częstotliwością 2 Hz
Fusebity Bity konfiguracyjne mikrokontrolera, określają niektóre cechy mikroprocesora takie jak źródło sygnału taktującego mikroprocesor (zegara) Domyślnie np. Atmega8 jako źródło sygnału taktującego wybiera wewnętrzy oscylator drgań RC pracujący przy częstotliwości 1 MHz (możliwość zmiany do 8 MHz)
Wyświetlanie wyników na LCD
Wyświetlacz LCD- niezbędne komendy Zdefiniowanie portów mikrokontrolera na wyjściu w celu wyświetlenia tekstu na wyświetlaczu (niezbędne zapoznanie się z rozmieszczeniem portów wyświetlacza LCD)
Wyświetlacz LCD- niezbędne komendy
Wyświetlacz LCD- pierwszy napis Napis wyświetlany na wyświetlaczu- niezbyt przyjemny sposób wyświetlania informacji na LCD Można uprościć wykorzystując funkcję: Ten sam napis w uproszczonej wersji kodu
Nie ma prostszych i bardziej przyjemnych w obsłudze możliwości programowania mikrokontrolerów na bazie języka C?
Oczywiście, że tak! Inne platformy sprzętowe Raspberry Pi- w pełni funkcjonalny, programowalny komputer z systemem operacyjnym Arduino- zestaw uruchomieniowy z prostym uc
Porównanie Arduino z Raspberry Pi
Język Arduino vs. Język C- zasadnicze różnice Język Arduino jest uproszczoną wersją języka C- jeżeli nauczyłeś się już języka C, język Arduino szybko przyswoisz Język C Arduino
Inne różnice między klasycznym programowaniem w C, a Arduino.. Wygodna platforma prototypowa, nie ma potrzeby łączenia się poprzez zewnętrzny programator, Eliminuje konieczność ustawiania wbudowanych urządzeń Ułatwia budowę programu Przyspiesza testowania i prototypowanie Dostarcza użytecznych bibliotek funkcji Kod podobny do C++ Niższa wydajność niż w przypadku C Może marnować pamięć operacyjną
Środowisko Arduino IDE Wybór typu płytki oraz portu: Dołączanie bibliotek
Arduino Uno- płytka testowa
Arduino Uno- płytka testowa 1.Złącze USB - wykorzystywane do zasilania, programowania oraz komunikacji z komputerem 2.Złącze zasilania (optymalnie 7V - 12V) 3.Stabilizator napięcia - napięcie wejściowe ze złącza nr 2 obniżane jest do 5V dzięki temu układowi 4.Przycisk resetu - resetuje płytkę Arduino 5.Mikrokontroler odpowiedzialny za komunikację z komputerem przez USB 6.Złącze programowania do mikrokontrolera z punktu 5. 7.Złącze sygnałowe* 8.Złącze sygnałowe* 9.Dioda LED sygnalizująca podłączenie napięcia do Arduino 10.Wyjście programatora dla mikrokontrolera z punktu 13. 11.Złącze sygnałowe* 12.Złącze zasilania* 13.Serce Arduino, główny mikrokontroler AVR ATmega328 14.Diody LED sygnalizujące transmisję do/z komputera 15.Dioda LED do dyspozycji użytkownika 16.Rezonator ceramiczny taktujący mikrokontroler (punkt 13) z częstotliwością 16MHz 17.Zworka, której przecięcie wyłącza automatyczne resetowanie Arduino. 18.Pola lutownicze z wyprowadzonymi sygnałami mikrokontrolera z punktu 5, używane ekstremalnie rzadko w bardzo specyficznych i niestandardowych sytuacjach.
Pierwszy program sterujący- czujnik temperatury i wilgotności z wyświetlaczem LCD- podłączenie
Pierwszy program sterujący- czujnik temperatury i wilgotności z wyświetlaczem LCD- podłączenie
Pierwszy program sterujący- czujnik temperatury i wilgotności z wyświetlaczem LCD- program
Pierwszy program sterujący- czujnik temperatury i wilgotności z wyświetlaczem LCD- program
Pierwszy program sterujący- czujnik temperatury i wilgotności z wyświetlaczem LCD- efekt Dane zczytywane bezpośrednio przez port szeregowy (port podłączenia Arduino z PC)
Pierwszy program sterujący- czujnik temperatury i wilgotności z wyświetlaczem LCD- efekt
Zrób to sam, czyli chętni na wykładzie #1 Mrugająca dioda 1 2 3 4 5 6 7 8 9 1 0 void setup() { pinmode(8, OUTPUT); //Konfiguracja pinu 8 jako wyjście } void loop() { digitalwrite(8, HIGH); //Włączenie diody delay(1000); //Odczekanie 1 sekundy digitalwrite(8, LOW); //Wyłączenie diody delay(1000); //Odczekanie jednej sekundy }
Zrób to sam, czyli chętni na wykładzie Arduino 1 void setup() { 2 pinmode(10, OUTPUT); //Dioda czerwona 3 pinmode(9, OUTPUT); //Dioda żółta 4 pinmode(8, OUTPUT); //Dioda zielona 5 6 pinmode(7, INPUT_PULLUP); //Przycisk 7 8 digitalwrite(10, LOW); //Wyłączenie diod 9 digitalwrite(9, LOW); 1 digitalwrite(8, LOW); 0 } 1 1 void loop() 1 { 2 digitalwrite(10, LOW); //Czerwona 1 digitalwrite(9, LOW); //Pomarańczowa 3 digitalwrite(8, HIGH); //Zielona 1 delay(1000); //Zatrzymujemy program przed 4 wejsciem do pętli na 1 sekunde 1 while (digitalread(7) == HIGH) {} //Jeśli 5 przycisk jest wciśnięty 1 digitalwrite(10, LOW); //Czerwona 6 digitalwrite(9, HIGH); //Pomarańczowa 1 digitalwrite(8, LOW); //Zielona 7 delay(1000); //Zatrzymujemy program przed 1 wejsciem do pętli na 1 sekunde 8 while (digitalread(7) == HIGH) {} //Jeśli 1 przycisk jest wciśnięty 9 digitalwrite(10, HIGH); //Czerwona 2 digitalwrite(9, LOW); //Pomarańczowa 0 digitalwrite(8, LOW); //Zielona 2 delay(1000); //Zatrzymujemy program przed 1 wejsciem do pętli na 1 sekunde 2 while (digitalread(7) == HIGH) {} //Jeśli 2 przycisk jest wciśnięty 2 digitalwrite(10, HIGH); //Czerwona 3 digitalwrite(9, HIGH); //Pomarańczowa 2 digitalwrite(8, LOW); //Zielona 4 delay(1000); //Zatrzymujemy program przed 2 wejsciem do pętli na 1 sekunde 5 while (digitalread(7) == HIGH) {} //Jeśli 2 przycisk jest wciśnięty 6 } 2 7 2 8 2 9 3 0 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 3 9 4 0 4 1 4 2 #2 Światła drogowe void setup() { pinmode(10, OUTPUT); //Dioda czerwona pinmode(9, OUTPUT); //Dioda żółta pinmode(8, OUTPUT); //Dioda zielona pinmode(7, INPUT_PULLUP); //Przycisk digitalwrite(10, LOW); //Wyłączenie diod digitalwrite(9, LOW); digitalwrite(8, LOW); } void loop() { digitalwrite(10, LOW); //Czerwona digitalwrite(9, LOW); //Pomarańczowa digitalwrite(8, HIGH); //Zielona delay(1000); //Zatrzymujemy program przed wejsciem do pętli na while (digitalread(7) == HIGH) {} //Jeśli przycisk jest wciśnięty
Przydatne książki oraz linki Francuz T., Język C dla mikrokontrolerów AVR. Od podstaw do zaawansowanych aplikacji, wyd. Helion Kardaś M. Mikrokontrolery AVR Język C Podstawy programowania wyd. II, wyd. obsługa Eclipse http://ktc.wieik.pk.edu.pl/kurs_avr/avr_programowanie.pdf - ogólnodostępny pdf opisujący funkcje AVRDude oraz modułów wykorzystywanych przy funkcji #include http://forum.atnel.pl forum firmy ATNEL, dostawcy m.in. USB- AspCable i MkAVRCalculator, liczne rozwiązania problemów, dostępne gotowe programy etc. https://www.forbot.pl/ - kolejne forum o tematyce robotyki Liczne kursy online, które pozwolą wam zacząć przygodę z μc: http://mikrokontrolery.blogspot.com http://mirekk36.blogspot.com/p/spis-tresci.html http://ep.com.pl http://arduino.cc