TECHNIKA MIKROPROCESOROWA II

Podobne dokumenty
TECHNIKA MIKROPROCESOROWA II

TECHNIKA MIKROPROCESOROWA II

TECHNIKA MIKROPROCESOROWA II

TECHNIKA MIKROPROCESOROWA II

TECHNIKA MIKROPROCESOROWA II

TECHNIKA MIKROPROCESOROWA II

Programowanie w językach asemblera i C

SYSTEMY CZASU RZECZYWISTEGO (SCR)

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

Podstawy techniki mikroprocesorowej

Instytut Teleinformatyki

Electronic Infosystems

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Szkolenia specjalistyczne

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

MODBUS RTU wersja M1.14 protokół komunikacyjny wyświetlaczy LDN

LabVIEW PLATFORMA EDUKACYJNA Lekcja 5 LabVIEW i Arduino konfiguracja środowiska i pierwszy program

Ćwiczenie 2. Siedmiosegmentowy wyświetlacz LED

LOW ENERGY TIMER, BURTC

LABORATORIUM PRZEMYSŁOWYCH SYSTEMÓW STEROWANIA

Instytut Teleinformatyki

GND(VSS) i VCC - masa i zasilanie. V0 - regulacja kontrastu

Parametryzacja przetworników analogowocyfrowych

WOJSKOWA AKADEMIA TECHNICZNA im. Jarosława Dąbrowskiego LABORATORIUM UKŁADÓW PROGRAMOWALNYCH I SPECJALIZOWANYCH

Instrukcja do ćwiczeń

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja. do ćwiczeń laboratoryjnych z przedmiotu: SYSTEMY CYFROWE 1.

Wydział Mechaniczny. Instrukcja do zajęć laboratoryjnych. Numer ćwiczenia: 4. Laboratorium z przedmiotu: Technika cyfrowa i mikroprocesorowa

PRUS. projekt dokumentacja końcowa

Język C. Wykład 9: Mikrokontrolery cz.2. Łukasz Gaweł Chemia C pokój 307

Instrukcja dla: Icomsat v1.0 SIM900 GSM/GPRS shield for Arduino oraz dla GPRS Shield produkcji Seeedstudio.

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager

BLUETOOTH INSTRUKCJA PODŁĄCZENIA I KONFIGURACJI.

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH. PROCESORY OSADZONE kod kursu: ETD 7211 SEMESTR ZIMOWY 2017

ad a) Konfiguracja licznika T1 Niech nasz program składa się z dwóch fragmentów kodu: inicjacja licznika T1 pętla główna

Politechnika Śląska w Gliwicach

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

Instrukcja obsługi. PROGRAMATOR dualavr. redflu Tarnów

Instrukcja użytkownika ARSoft-WZ1

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Instytut Teleinformatyki

Przewodnik Google Cloud Print

Programowanie Mikrokontrolerów

Programowanie kontrolera RH robota S-420S Opracował: Karol Szostek

Przewodnik Google Cloud Print

PROBLEMY TECHNICZNE. Co zrobić, gdy natrafię na problemy związane z użytkowaniem programu DYSONANS

DOKUMENTACJA PROJEKTU

Topologia sieci. Cele nauczania.

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Laboratorium mikrokontrolerów

2. Architektura mikrokontrolerów PIC16F8x... 13

MultiTool instrukcja użytkownika 2010 SFAR

LICZNIKI LABORATORIUM. Elektronika AKADEMIA GÓRNICZO-HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE. Wydział Informatyki, Elektroniki i Telekomunikacji

INSTRUKCJA PANEL STERUJĄCY MT-5

Wydział Elektryczny. Katedra Telekomunikacji i Aparatury Elektronicznej. Konstrukcje i Technologie w Aparaturze Elektronicznej.

Instytut Teleinformatyki

Alfanumeryczny wyświetlacz LCD

Zestaw Startowy EvB. Więcej informacji na stronie:

Elektroniczny Termostat pojemnościowych ogrzewaczy wody

TECHNIKA MIKROPROCESOROWA II

Rysunek 1: Okno z lista

Laboratorium mikrokontrolerów

Kod produktu: MP01611

Site Installer v2.4.xx

HP OfficeJet 250 Mobile All-in-One series. Instrukcja instalacji Bluetooth

LabVIEW PLATFORMA EDUKACYJNA Lekcja 6 LabVIEW i Arduino programy wykorzystujące wyświetlacz LCD, czujnik temperatury, PWM i diodę LED

d&d Labo Dekoder Ledv.4 Przeznaczenie, działanie: Montaż:

1 Moduł Inteligentnego Głośnika

Instrukcja obsługi Rejestrator jazdy HD 50213

Notepad++ / PuTTY. Interaktywne środowisko programowania w języku ForthLogic. Wersja dokumentu P.1. Wersja dokumentu NP1.

Stacja pogodowa WS 9130IT Nr art.:

Instrukcja programu użytkownika OmegaUW.Exe. Program obsługuje następujące drukarki fiskalne: ELZAB OMEGA II generacji ELZAB OMEGA F, MERA, MERA F.

1 Moduł Inteligentnego Głośnika 3

Laboratorium mikrokontrolerów

dokument DOK wersja 1.0

Instrukcja ręcznej konfiguracji połączenia z Internetem przez. modem ED77 w systemie Windows XP

Instrukcja obsługi programatora AVR Prog USB v2

ISBN Copyright by Wydawnictwo BTC Legionowo 2008

Kod produktu: MP01105

INSTRUKCJA INSTALACJI WEB SERWER STW. DOKUMENTACJA TECHNICZNA INSTRUKCJA OBSŁUGI wersja instrukcji 1.0

Współpraca mikrokontrolera z wyświetlaczami: ciekłokrystalicznym i siedmiosegmentowym

Instrukcja użytkowania

wpisujemy prawidłowe ustawienia dla naszej sieci lokalnej ustawienia

Kod produktu: MP-BTM222-5V

Programowalne Układy Cyfrowe Laboratorium

BEZPRZEWODOWA KARTA SIECIOWA WL-8313 / WL-8314

Ćwiczenie 7 Matryca RGB

Programowanie. Elektronika dla Wszystkich 25. Rozwiązania zadań z ostatniego odcinka Tematem pierwszego zadania było wygenerowanie

Konfiguracja pakietu CrossStudio for MSP

OPTIMA PC v Program konfiguracyjny dla cyfrowych paneli domofonowy serii OPTIMA ELFON. Instrukcja obsługi. Rev 1

Xesar. Pierwsze kroki

Programowanie mikrokontrolerów - laboratorium

3. Sieć PLAN. 3.1 Adresowanie płyt głównych regulatora pco

Programator procesorów rodziny AVR AVR-T910


Instytut Teleinformatyki

Tworzenie nowego projektu w asemblerze dla mikroprocesora z rodziny 8051

Instrukcja obsługi i użytkowania Panel sterujący KPZ 52(E) 7

Rafał Staszewski Maciej Trzebiński, Dominik Derendarz

Transkrypt:

Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie Wydział IEiT Katedra Elektroniki TECHNIKA MIKROPROCESOROWA II LAB 2 Human-Machine Interface, czyli obsługa wyświetlacza slcd Sebastian Koryciak http://www.fpga.agh.edu.pl/tm2 08.10.2015

1 WSTĘP 1.1 CEL Niniejsze ćwiczenie ma na celu zapoznanie użytkowników ze sposobem obsługi wyświetlacza multipleksowanego. Za przykład posłuży wyświetlacz zamontowany na płytce ewaluacyjnej FRDM- KL46Z. 1.2 WYMAGANIA Sprzętowe: komputer klasy PC spełniający wymagania sprzętowe aplikacji KEIL v5, zestaw FRDM-KL46Z Programowe: system operacyjny Windows XP lub wyższy, środowisko Keil / uvision 5 Doświadczenie: podstawowa umiejętność obsługi komputera klasy PC, podstawowa znajomość systemów operacyjnych rodziny Windows, podstawowa znajomość zagadnień z Techniki Mikroprocesorowej 1, podstawowa znajomość zagadnień z Techniki Cyfrowej, wykonane ćwiczenie LAB 1

2 SEGMENT LCD CONTROLLER Mikrokontrolery z rodziny KL46 zostały wyposażone w wbudowany kontroler wyświetlaczy multipleksowanych numerycznych, alfanumerycznych ale także i niestandardowych. Obraz mogą tworzyć zarówno kropki (piksele), jak i symbole (specjalne obrazki lub część wyświetlacza 7 segmentowego). 2.1 ZADANIE Na podstawie dokumentu KL46 Reference Manual proszę dowiedzieć się jakie są podstawowe parametry kontrolera slcd, a na ich podstawie określić jaki największy wyświetlacz może być przez ten mikrokontroler obsługiwany. Na płytce FRDM-KL46Z mamy do dyspozycji wyświetlacz Lumex LCD-S401M16KR. Na podstawie jego dokumentacji możemy dowiedzieć się, że do jego sterowania wykorzystywane się następujące piny: Natomiast poszczególne elementy wyświetlacza to: Wyświetlacze tego typu podzielone są na dwie płaszczyzny (planes): przednią (frontplane) i tylną (backplane). W tym przypadku mamy do czynienia z 4 pinami służącymi za sygnały wspólne, oraz 8

sterującymi poszczególne segmenty (7 + kropka). Sterowanie będzie polegało na multipleksowaniu ze sobą poszczególnych płaszczyzn z odpowiednią częstotliwością. Przykładowo sygnał COM0 kontroluje zaznaczone powyżej segmenty. Oznacza to, że jeżeli COM0 będzie ustawione, możemy aktywować 8 segmentów w zależności od wartości stanów na 8 pinach sterujących tymi segmentami. Ponieważ mamy 4 fazy (4 piny COM), a każdy steruje 8 segmentami, mamy w sumie 32 segmenty, których wartości możemy ustawić. Należy również zwrócić uwagę na fakt, iż tego rodzaju wyświetlacz nie posiada zasilania. W związku z tym należy 4 fazy COM rozdzielić równomiernie, tak aby wszystkie segmenty były tak samo jasne. Natomiast patrząc na wyświetlacz z perspektywy poszczególnych segmentów mamy sytuację przedstawioną na następnej grafice. a a BP3 f b f b BP2 g g e c e c BP1 d FP0 FP1 d BP0

Podpięcie poszczególnych tylnych ścian (BP) do rejestrów przebiegów (zgodnie z pinami z FRDM- KL46Z) powinno wyglądać następująco: WF40 0 0 0 1 0 0 0 1 WF52 0 0 1 0 0 0 1 0 WF19 0 1 0 0 0 1 0 0 WF18 1 0 0 0 1 0 0 0 Biorą pod uwagę powyższe warunki, poszczególne segmenty będą aktywne w następujących przebiegach: WF8B[0] d e g f d e g f WF8B[1] dp c b a dp c b a Ściany BP są sterowane automatycznie, co ustawiamy w trakcie inicjalizacji. Pozostaje nam jedynie odpowiednie wysterowanie rejestrów WF8B. Przykładowo aby wyświetlić cyfrę 4 należy ustawić: WF8B[0] - - g f - - g f WF8B[1] - c b - - c b - 2.2 ZADANIE Proszę otworzyć dokument FRDM-KL46Z_Schematics i na jego podstawie stworzyć tabelę podłączenia portów mikrokontrolera KL46 do wyświetlacza. Tabelka powinna mieć następującą formę: LCD-S401 Pin Pin connection KL46 LCD Pin Pin Name 1 COM 0 LCD_P40 PTD0 2.3 ZADANIE Obsługę wyświetlacza należy rozpocząć od jego inicjalizacji. Proszę stworzyć nowy projekt zgodnie z opisem zamieszczonym w instrukcji LAB 1, a następnie w pliku main.c (pamiętając o pliku nagłówkowym i głównej funkcji main) stworzyć funkcję inicjalizującą wyświetlacz (np. slcd_init). Do zawartości funkcji proszę wkleić zamieszczony poniżej kod, postępując zgodnie z następującymi zasadami: 1. W przypadku pojawienia się znaków?????? proszę zgodnie z komentarzem zastąpić je odpowiednimi wartościami / rejestrami 2. W przypadku komentarza o treści!!!!!! proszę odnaleźć w dokumentacji mikrokontrolera przeznaczenie danego rejestru (czy też maski w pliku nagłówkowym) i zastąpić znaki odpowiednim komentarzem 1. 2. 3. 4. 5. 6. // konfiguracja zegara dla portów wykorzystywanych przy obsłudze wyświetlacza // i modułu slcd SIM->SCGC5 =?????? // wstępne wyłączenie i reset kontrolera LCD->GCR = LCD_GCR_PADSAFE_MASK; //!!!!!! LCD->GCR &= ~LCD_GCR_LCDEN_MASK; // Clear LCDEN w trakcie konfiguracji

7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. // konfiguracja multiplekserów do operacji portów jako kontroler LCD PORT??????->PCR[??????] = PORT_PCR_MUX(0u); // konfiguracja rejestrów LCD LCD->GCR = //!!!!!! LCD_GCR_RVTRIM(0x00) LCD_GCR_CPSEL_MASK LCD_GCR_LADJ(0x03) LCD_GCR_VSUPPLY_MASK LCD_GCR_ALTDIV(0x00) LCD_GCR_SOURCE_MASK LCD_GCR_LCLK(0x01) LCD_GCR_DUTY(0x03); // konfiguracja migania wyświetlacza LCD->AR = LCD_AR_BRATE(0x03); //!!!!!! // konfiguracja rejestru FDCR LCD->FDCR = 0x00000000; //!!!!!! // aktywowanie 12 pinów do kontroli wyświetlaczem (dwa rejestry po 32 bity) LCD->PEN[0] = LCD_PEN_PEN(1u<<7 ) // LCD_P7 LCD_PEN_PEN(??????); LCD->PEN[1] = LCD_PEN_PEN(??????); // skonfigurowanie 4 pinów płaszczyzny tylnej (dwa rejestry po 32 bity) LCD->BPEN[0] = LCD_BPEN_BPEN(??????) LCD_BPEN_BPEN(??????); LCD->BPEN[1] = LCD_BPEN_BPEN(??????) LCD_BPEN_BPEN(??????); // konfiguracja rejestrów przebiegów (Waveform register) 4 aktywne, reszta nie // konfiguracja polega na równomiernym rozłożeniu faz, w tym przypadku 4, na 8 bitach // (44.3.7 w KL46 Reference Manual) LCD->WF[0] = LCD_WF_WF0(0x00) LCD_WF_WF1(0x00) LCD_WF_WF2(0x00) LCD_WF_WF3(0x00); LCD->WF[1] = LCD_WF_WF4(0x00) LCD_WF_WF5(0x00) LCD_WF_WF6(0x00) LCD_WF_WF7(0x00); LCD->WF[2] =

59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. LCD_WF_WF8(0x00) LCD_WF_WF9(0x00) LCD_WF_WF10(0x00) LCD_WF_WF11(0x00); LCD->WF[3] = LCD_WF_WF12(0x00) LCD_WF_WF13(0x00) LCD_WF_WF14(0x00) LCD_WF_WF15(0x00); LCD->WF[4] = LCD_WF_WF16(0x00) LCD_WF_WF17(0x00) LCD_WF_WF18(??????) // COM3 (10001000) LCD_WF_WF19(??????); // COM2 (01000100) LCD->WF[5] = LCD_WF_WF20(0x00) LCD_WF_WF21(0x00) LCD_WF_WF22(0x00) LCD_WF_WF23(0x00); LCD->WF[6] = LCD_WF_WF24(0x00) LCD_WF_WF25(0x00) LCD_WF_WF26(0x00) LCD_WF_WF27(0x00); LCD->WF[7] = LCD_WF_WF28(0x00) LCD_WF_WF29(0x00) LCD_WF_WF30(0x00) LCD_WF_WF31(0x00); LCD->WF[8] = LCD_WF_WF32(0x00) LCD_WF_WF33(0x00) LCD_WF_WF34(0x00) LCD_WF_WF35(0x00); LCD->WF[9] = LCD_WF_WF36(0x00) LCD_WF_WF37(0x00) LCD_WF_WF38(0x00) LCD_WF_WF39(0x00); LCD->WF[10] = LCD_WF_WF40(??????) // COM0 (00010001) LCD_WF_WF41(0x00) LCD_WF_WF42(0x00) LCD_WF_WF43(0x00); LCD->WF[11] = LCD_WF_WF44(0x00) LCD_WF_WF45(0x00) LCD_WF_WF46(0x00) LCD_WF_WF47(0x00); LCD->WF[12] = LCD_WF_WF48(0x00) LCD_WF_WF49(0x00)

111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. LCD_WF_WF50(0x00) LCD_WF_WF51(0x00); LCD->WF[13] = LCD_WF_WF52(??????) // COM1 (00100010) LCD_WF_WF53(0x00) LCD_WF_WF54(0x00) LCD_WF_WF55(0x00); LCD->WF[14] = LCD_WF_WF56(0x00) LCD_WF_WF57(0x00) LCD_WF_WF58(0x00) LCD_WF_WF59(0x00); LCD->WF[15] = LCD_WF_WF60(0x00) LCD_WF_WF61(0x00) LCD_WF_WF62(0x00) LCD_WF_WF63(0x00); // koniec konfiguracji, więc clear PADSAFE i włączenie wyświetlacza LCD->GCR &= ~LCD_GCR_PADSAFE_MASK; //!!!!!! LCD->GCR = LCD_GCR_LCDEN_MASK; // włączenie wyświetlacza 2.4 ZADANIE Następnym krokiem jest stworzenie odpowiednich makr, które ułatwią nam dalsze pisanie funkcji. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. // zdefiniowanie ilości pinów na poszczególnych płaszczyznach #define LCD_N_FRONT 8 #define LCD_N_BACK 4 // Makra dla segmentów, każdy znak sterowany jest przez dwa piny // Pin 1 -> (Digit*2-1), Pin 2 -> Digit*2 // Pin 1 Pin 2 // COM0 D Dec // COM1 E C // COM2 G B // COM3 F A #define LCD_S_D 0x11 // segment D #define LCD_S_E 0x22 // segment E #define LCD_S_G 0x44 // segment G #define LCD_S_F 0x88 // segment F #define LCD_S_DEC 0x11 #define LCD_S_C 0x22 #define LCD_S_B 0x44 #define LCD_S_A 0x88 #define LCD_C 0x00 // clear // Makra dla każdego pinu #define LCD_FRONT0 37u #define LCD_FRONT1?????? #define LCD_FRONT2?????? #define LCD_FRONT3?????? #define LCD_FRONT4?????? #define LCD_FRONT5??????

27. 28. 29. 30. 31. 32. 33. 34. 35. #define LCD_FRONT6?????? #define LCD_FRONT7?????? #define LCD_BACK0 40u #define LCD_BACK1?????? #define LCD_BACK2?????? #define LCD_BACK3?????? // Zmienne tworzące dwie tablice const static uint8_t LCD_Front_Pin[??????] = {??????; const static uint8_t LCD_Back_Pin[??????] = {??????; 2.5 ZADANIE Wreszcie możemy napisać funkcję wykorzystującą wszystkie powyżej zainicjalizowane ustawienia oraz zdefiniowane makra. Proszę skopiować i uzupełnić poniższą funkcję. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. void slcd_set(uint8_t value,uint8_t digit){ // value wyświetlana wartość, // digit pozycja na której ma być wyświetlona wartość if(value==0x00){ // aby wyświetlić 0 zapalamy segmenty LCD->WF8B[LCD_Front_Pin[((2*digit)-2)]] = // D, E, F oraz A, B, C (LCD_S_D LCD_S_E LCD_S_F); // (patrz tabelki w zadaniu 2.1) LCD->WF8B[LCD_Front_Pin[((2*digit)-1)]] = (LCD_S_A LCD_S_B LCD_S_C); else if(value==0x01){ LCD->WF8B[LCD_Front_Pin[((2*digit)-2)]] = (LCD_C); LCD->WF8B[LCD_Front_Pin[((2*digit)-1)]] = (LCD_S_B LCD_S_C); else if(value==0x02){ else if(value==0x03){ else if(value==0x04){ else if(value==0x05){ else if(value==0x06){ else if(value==0x07){

37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. else if(value==0x08){ else if(value==0x09){ else if(value==0x0a){ else if(value==0x0b){ else if(value==0x0c){ else if(value==0x0d){ else if(value==0x0e){ else if(value==0x0f){ 2.6 ZADANIE Proszę w głównej pętli wykorzystać stworzone funkcje i wyświetlić godzinę rozpoczęcia zajęć laboratoryjnych. 2.7 ZADANIE DOMOWE Proszę wykonać następujące czynności: 1. Proszę zrobić porządek w programie tworząc osobny plik z funkcjami dotyczącymi obsługi wyświetlacza, oraz odpowiedni plik nagłówkowy, którego załączenie do pliku main pozwoli na wykorzystanie tych funkcji i makr.

2. Proszę do funkcji slcd_set() dorobić obsługę błędów, czyli wpisanie większej wartości do wyświetlenia niż jest to możliwe, bądź też żądanie wyświetlenia wartości na innej pozycji niż jest to możliwe. 3. Proszę napisać funkcję do obsługi kropek na wyświetlaczu. 4. Proszę napisać funkcję pozwalającą na wyświetlenie zadanej wartości w wybranym przez nas formacie (dec, bin, hex, oct)