Brak produktów
Mruganie diodami, opisane w poprzednim odcinku kursu jest fajne, aczkolwiek mało komunikatywne. Dlatego zanim przejdziemy do omawiania poszczególnych peryferiów mikrokontrolerów XMEGA, najpierw nauczymy się obsługiwać popularny wyświetlacz tekstowy LCD 16x2 ze sterownikiem HD44780. Niniejszy artykuł ma zapoznać czytelnika z podstawą obsługi tego wyświetlacza, lecz nie będziemy tworzyć jego biblioteki funkcji od zera – wykorzystamy gotowca, którego udostępnił Radosław Kwiecień na swojej stronie radzio.dxp.pl. Jego bibliotekę przystosowałem do współpracy z mikrokontrolerami XMEGA, aby móc wykorzystać wyświetlacz w następnych odcinkach kursu. Przy okazji zobaczymy, jak dodaje się gotowe biblioteki do projektu w Atmel Studio.
Po utworzeniu nowego projektu (jak to zrobić opisałem w 2 części kursu) musimy dodać bibliotekę obsługi wyświetlacza, którą można pobrać ze strony eXtronic.pl. Następnie, w drzewku projektu, widocznym po prawej stronie okna Atmel Studio, wskazujemy najwyższą pozycję i klikamy ją prawym przyciskiem myszy. Z wyskakującego menu wybieramy Add, a następnie Existing Item.
Pliki do pobrania:
Wskazujemy pliki hd44780.c oraz hd44780.h, które wcześniej ściągnęliśmy z serwera.
Następnie, zgodnie z regułami języka C, powinniśmy dodać plik nagłówkowy biblioteki przy pomocy dyrektywy #include.
#include <avr/io.h> #include <util/delay.h> #include "hd44780.h"
Przedstawię teraz skrótowo funkcje odpowiedzialne za obsługę wyświetlacza:
Warto jeszcze zwrócić uwagę na plik hd44780.h, ponieważ w nim musimy zdefiniować, które piny wyświetlacza są podłączone do których pinów procesora.
#define LCD_PORT PORTC #define LCD_RS_bm PIN2_bm #define LCD_E_bm PIN3_bm #define LCD_D4_bm PIN4_bm #define LCD_D5_bm PIN5_bm #define LCD_D6_bm PIN6_bm #define LCD_D7_bm PIN7_bm
Mając tak zdefiniowany plik nagłówkowy, możemy przystąpić do budowania układu na płytce stykowej według schematu
Należy zwrócić szczególną uwagę, że niektóre starsze wyświetlacze są przeznaczone do pracy przy napięciu zasilania 5V, a mikrokontrolery XMEGA są przystosowane do napięcia 3,3V. Pamiętaj, że na pinach procesora nie mogą pojawić się napięcia wyższe od napięcia zasilającego. W tym układzie komunikacja między procesorem a wyświetlaczem jest jednokierunkowa. Chcąc odczytać dane z wyświetlacza, np. flagę zajętości, należałoby wyposażyć układ w jakiś translator napięć, chociażby dzielniki napięcia z rezystorów, gdyż bezpośrednie połączenie mogłoby uszkodzić piny procesora.
Możemy teraz przejść do pisania programu. Po włączeniu zasilania, niech na wyświetlaczu pojawi się komunikat powitalny, a potem program ma zliczać ile razy wcisnęliśmy przycisk FLIP na płytce X3-DIL64. Kod programu jest na tyle prosty, że po przeczytaniu tego artykułu, jego zrozumienie nie powinno stwarzać problemu.
#define F_CPU 2000000UL #include <avr/io.h> #include <util/delay.h> #include "hd44780.h" int main(void) { // konfiguracja przycisku FLIP PORTE.DIRCLR = PIN5_bm; // pin E5 jako wejście PORTE.PIN5CTRL = PORT_OPC_PULLUP_gc; // podciągnięcie do zasilania // Inicjalizacja wyświetlacza LcdInit(); // inicjalizacja sterownika LCD Lcd(" Kurs XMEGA"); // wyświetlenie napisu Lcd2; // przejście do drugiej linii Lcd("Leon Instruments"); // wyświetlenie napisu // zmienna służąca jako licznik uint8_t licznik = 0; while(1) { if(!(PORTE.IN & PIN5_bm)) { // jeżeli przycisk FLIP jest wciśnięty licznik++; // zwiększ licznik o 1 LcdClear(); // wyczyść wyświetlacz Lcd("Licznik:"); // wyświetlenie napisu Lcd2; // przejście do drugiej linii LcdDec(licznik); // wyświetlenie zmiennej liczbowej _delay_ms(100); // czekanie 100ms } } }
A to filmik przedstawiający działanie naszego programu:
Pliki do pobrania: