prostych wyświetlaczy

Podobne dokumenty
Uczeń/Uczennica po zestawieniu połączeń zgłasza nauczycielowi gotowość do sprawdzenia układu i wszystkich połączeń.

Uniwersalny zestaw uruchomieniowy ZL4PIC

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

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

Programowanie mikrokontrolerów. 8 listopada 2007

ZL27ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F103

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Stanowisko laboratoryjne dla mikrokontrolera ATXmega32A4 firmy Atmel

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

ZL2AVR. Zestaw uruchomieniowy z mikrokontrolerem ATmega8

ZL16AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega8/48/88/168

ZL28ARM. Zestaw uruchomieniowy dla mikrokontrolerów AT91SAM7XC

ZL30ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F103

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Programowanie Mikrokontrolerów

ZL4PIC uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC (v.1.0) Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

ZL15AVR. Zestaw uruchomieniowy dla mikrokontrolerów ATmega32

1.2. Architektura rdzenia ARM Cortex-M3...16

Zestaw uruchomieniowy z mikrokontrolerem LPC1114 i wbudowanym programatorem ISP

ZL8AVR. Płyta bazowa dla modułów dipavr

ZL4PIC. Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów PIC

MARM. Laboratorium 1 system zegarów, porty wejścia/wyjścia. M. Suchenek

LITEcomp. Zestaw uruchomieniowy z mikrokontrolerem ST7FLITE19

ZL5PIC. Zestaw uruchomieniowy dla mikrokontrolerów PIC16F887

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

Badanie układów średniej skali integracji - ćwiczenie Cel ćwiczenia. 2. Wykaz przyrządów i elementów: 3. Przedmiot badań

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Płytka uruchomieniowa AVR oparta o układ ATMega16/ATMega32. Instrukcja Obsługi. SKN Chip Kacper Cyrocki Page 1

Systemy Wbudowane. Arduino - rozszerzanie. Podłączanie wyświetlacza LCD. Podłączanie wyświetlacza LCD. Podłączanie wyświetlacza LCD

Wstęp Architektura... 13

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

Uniwersalny zestaw uruchomieniowy dla mikrokontrolerów AVR

ZL9AVR. Płyta bazowa dla modułów ZL7AVR (ATmega128) i ZL1ETH (RTL8019)

ZL29ARM. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

ZL11AVR. Zestaw uruchomieniowy z mikrokontrolerem ATtiny2313

dokument DOK wersja 1.0

ZL3ST7. Zestaw uruchomieniowy dla mikrokontrolerów

STM32Butterfly2. Zestaw uruchomieniowy dla mikrokontrolerów STM32F107

uruchomieniowego i biblioteki API dla mikrokontrolerów STM32

Technika Mikroprocesorowa

Instytut Teleinformatyki

AVREVB1. Zestaw uruchomieniowy dla mikrokontrolerów AVR. Zestawy uruchomieniowe

ZL2ARM easyarm zestaw uruchomieniowy dla mikrokontrolerów LPC2104/5/6 (rdzeń ARM7TDMI-S)

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

E-TRONIX Sterownik Uniwersalny SU 1.2

Programator układów HCS

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

LITEcompLPC1114. Zestaw ewaluacyjny z mikrokontrolerem LPC1114 (Cortex-M0) Sponsorzy:

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

Opis procedur asemblera AVR

TECHNIKA MIKROPROCESOROWA

Programowanie w językach asemblera i C

ZL25ARM. Płyta bazowa dla modułów diparm z mikrokontrolerami STR912. [rdzeń ARM966E-S]

2.1 Przesył danych między procesorem a tabelą zmiennych

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

Szkolenia specjalistyczne

TECHNIKA MIKROPROCESOROWA II

Kod produktu: MP01105

Wyświetlacze graficzne : 162x64 z kontrolerem S1D x60 z kontrolerem S1D15710

obsługi przerwań NVIC_PriorityGroup0 NVIC_PriorityGroup1 NVIC_PriorityGroup2 NVIC_PriorityGroup3

ZL2ARM easyarm zestaw uruchomieniowy dla mikrokontrolerów LPC2104/5/6 (rdzeń ARM7TDMI-S)

WYDZIAŁ ELEKTRYCZNY KATEDRA TELEKOMUNIKACJI I APARATURY ELEKTRONICZNEJ. Instrukcja do zajęć laboratoryjnych. Numer ćwiczenia: 4

Uniwersalny sterownik silnika krokowego z portem szeregowym RS232 z procesorem AT90S2313 na płycie E200. Zestaw do samodzielnego montażu.

2. Architektura mikrokontrolerów PIC16F8x... 13

Klawiatura matrycowa

Gdzie przyjęto, że: IR7...IR4 to starsze bity przesyłanej danej lub rozkazu, IR3...IR0 to młodsze bity przesyłanej danej lub rozkazu.

MiniModbus 4DO. Moduł rozszerzający 4 wyjścia cyfrowe. Wyprodukowano dla. Instrukcja użytkownika

RS485 MODBUS Module 6RO

Sprawozdanie z projektu MARM. Część druga Specyfikacja końcowa. Prowadzący: dr. Mariusz Suchenek. Autor: Dawid Kołcz. Data: r.

Tab. 1. Zestawienie najważniejszych parametrów wybranych mikrokontrolerów z rodziny LPC2100, które można zastosować w zestawie ZL3ARM.

RS485 MODBUS Module 6RO

RS485 MODBUS Module 6RO

KA-NUCLEO-UniExp. Wielofunkcyjny ekspander dla NUCLEO i Arduino z Bluetooth, MEMS 3DoF, LED-RGB i czujnikiem temperatury

Expandery wejść MCP23S17 oraz MCP23017

PRUS. projekt dokumentacja końcowa

ZL6PLD zestaw uruchomieniowy dla układów FPGA z rodziny Spartan 3 firmy Xilinx

Ćwiczenie 5 Zegar czasu rzeczywistego na mikrokontrolerze AT90S8515

Porty GPIO w mikrokontrolerach STM32F3

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

Laboratorium Systemów wbudowanych Wyższa Szkoła Zarządzania i Bankowości, Informatyka studia inżynierskie

Kod produktu: MP01611-ZK

MCAR Robot mobilny z procesorem AVR Atmega32

2.1 Porównanie procesorów

ISBN Copyright by Wydawnictwo BTC Legionowo 2008

Instrukcja Obsługi. Modułu wyjścia analogowego 4-20mA PRODUCENT WAG ELEKTRONICZNYCH

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

UKŁADY CYFROWE. Układ kombinacyjny

ZL11ARM. Uniwersalna płytka bazowa dla modułów diparm

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Porty wejścia/wyjścia w układach mikroprocesorowych i w mikrokontrolerach

Programowalne Układy Cyfrowe Laboratorium

SML3 październik 2008

Laboratorium 2 Sterowanie urządzeniami z wykorzystaniem systemu plików Intel Galileo

Instytut Teleinformatyki

MiniModbus 4DI. Moduł rozszerzający 4 wejścia cyfrowe. Wyprodukowano dla

Ćwiczenie 7 Matryca RGB

Komunikacja w mikrokontrolerach Laboratorium

Zestaw Startowy EvB. Więcej informacji na stronie:

Transkrypt:

Temat 2: Konfiguracja uniwersalnych portów wejścia/wyjścia (GPIO), obsługa prostych wyświetlaczy Celem ćwiczenia jest prezentacja sposobu konfiguracji i sterowania uniwersalnych portów GPIO μc z serii STM32 oraz utworzenie bibliotek obsługi wyświetlaczy: alfanumerycznego LCD oraz siedmiosegmentowego LED. 1. Budowa portu ogólnego przeznaczenia, funkcje alternatywne Układy STM32F1xx udostępniają maksymalnie 8 portów GPIO (General Purpose Inputs/Outputs) o długości 16-u bitów każdy (do 128 pinów dostępnych w μc produkowanych w obudowach z 144-oma wyprowadzeniami). Struktura bitu (pinu) portu jest zilustrowana na Rys.1. Rys.1 Budowa bitu portu GPIO [5] W celu uaktywnienia wybranego portu, przede wszystkim należy włączyć jego sygnał taktujący za pomocą funkcji RCC_APB2PeriphClockCmd(), w której argumentach podajemy identyfikator GPIOA. GPIOB,.., GPIOG. Konfiguracji portów GPIO można dokonać z użyciem funkcji GPIO_Init(), która wymaga podania identyfikatora portu (GPIOA. GPIOB,.., GPIOG) i referencji do struktury typu GPIO_InitTypeDef zawierającej następujące pola: GPIO_Pin (GPIO_Pin_0,.., GPIO_Pin_15) GPIOMode (tryb pracy opisany poniżej), GPIO_Speed(GPIO_Speed_2MHz, GPIO_Speed_10MHz, GPIO_Speed_50MHz). Tryb pacy każdego bitu portu może być ustalony programowo na: wejściowy cyfrowy o wysokiej impedancji (GPIO_Mode_IN_FLOATING), wejściowy cyfrowy z rezystorem podciągającym do stanu wysokiego (GPIO_Mode_IPU), wejściowy cyfrowy z rezystorem podciągającym do stanu niskiego (GPIO_Mode_IPD), wejściowy analogowy (GPIO_Mode_AIN), wyjściowy typu otwarty dren (GPIO_Mode_Out_OD),

wyjściowy przeciwsobny (GPIO_Mode_Out_PP), funkcji alternatywnej typu otwarty dren (GPIO_Mode_AF_OD), funkcji alternatywnej typu przeciwsobnego (GPIO_Mode_AF_PP). Oprócz typowego wykorzystywania portów, jego piny mogą spełniać funkcje alternatywne opisane w specyfikacji danego układu mikrokontrolera. Fragment zestawienia funkcji wyprowadzeń dla STM32F103RBT6 jest umieszczony poniżej (ze specyfikacji podawanej przez producenta). Rys.2. Fragment zestawienie funkcji pinów μc [6]. Przykładowo, bit na pozycji 6 portu GPIOA (PA6) może pełnić funkcje wejścia kanału numer 6 przetwornika A/C, linię MISO interfejsu SPI lub wyjście kanału 1 licznika 3. Dodatkowo, możliwe jest przemapowanie jego funkcji za pomocą GPIO_PinRemapConfig()na wejście sygnału sterującego pracą licznika 3 (Break IN). Warto również zwrócić uwagę na to, że wybrane piny układu są kompatybilne z sygnałem TTL na poziomie 5V (oznaczone na Rys.2 jako FT, 5 V tolerant). Funkcje obsługi interfejsu GPIO są zgromadzone w module stm32f10x_gpio.c, gdzie umieszczono również krótkie opisy ułatwiające ich wykorzystywanie we własnym programie. Kontekstowy dostęp do opisu danej funkcji jest możliwy po wskazaniu kursorem nazwy funkcji w kodzie źródłowym i wciśnięciu przycisku Ctrl lub po wybraniu przycisku F3 (Open Declaration). Nagłówki podstawowych funkcji realizujące operacje na portach GPIO zostały zgromadzone poniżej: uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin_y) odczyt bitu GPIO_Pin_y (y=1..15) portu GPIOx (x=a..e), uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx) odczyt słowa 16-to bitowego portu GPIOx (x=a..e),

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) odczyt aktualnego stanu bitu GPIO_Pin_y (y=1..15) portu GPIOx (x=a..e), uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx) odczyt aktualnego stanu wyjść portu GPIOx (x=a..e), voidgpio_setbits(gpio_typedef* GPIOx, uint16_t GPIO_Pin) ustawienie bitu GPIO_Pin_y (y=1..15) portu GPIOx (x=a..e), voidgpio_resetbits(gpio_typedef* GPIOx, uint16_t GPIO_Pin) wyzerowaniebitu GPIO_Pin_y (y=1..15) portu GPIOx (x=a..e), voidgpio_writebit(gpio_typedef* GPIOx, uint16_t GPIO_Pin, BitActionBitVal) zapis danych do bitu GPIO_Pin_y (y=1..15) portu GPIOx (x=a..e), voidgpio_write(gpio_typedef* GPIOx, uint16_t PortVal) zapis danych do portu GPIOx (x=a..e). 2. Obsługa wyświetlacza alfanumerycznego LCD1602 ze sterownikiem HD44780 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Vss Vdd Vo RS R/W E D0 D1 D2 D3 D4 D5 D6 D7 LED+ LED- Rys.3 Wyprowadzenia modułu LCD Na Rys.3 zostały przedstawione wyprowadzenia modułu LCD1602 : Vss, Vdd ujemny i dodatni terminal zasilania, Vo regulacja napięcia polaryzującego (kontrast), RS wybór trybu transmisji (komenda dla L lub znak do wyświetlenia dla H), R/W kierunek transmisji (zapis dla L lub odczyt dla H), E sygnał sterujący (enable) odczytem/zapisem (aktywacja stanem H), D0..D7 bity danych (D0=LSB, D7=MSB), LED+, LED- anoda i katoda diody podświetlającej. Wyprowadzenia niezbędne do uruchomienia LCD w zestawie uruchomieniowym są dostępne na złączu CHAR_LCD płyty ZL30ARM. Przed wyświetlaniem znaków należy wykonać inicjalizację modułu LCD, w trakcie której określane są jego parametry pracy. Podczas laboratorium będzie wykorzystywany czterobitowy tryb komunikacji (bity D4..D7) bez kontroli bitu zajętości (R/W na stałe

połączone z GND, niedostępna operacja czytania ze sterownika LCD). W trybie tym wymagana jest minimalna liczba linii do komunikacji pomiędzy μc i LCD. Schemat połączeń został umieszczony na Rys.4. b5 b4 b0 b1 b2 b3 Rys.4 Połączenia wymagane do sterowania LCD w trybie czterobitowym Inicjalizacja LCD do pracy w opisanym trybie polega na przesłaniu do modułu ustalonego zestawu rozkazów zgodnie z Rys.5. Podane kody rozkazów obowiązują przy założeniu, że linia D3 połączona jest z bitem LSB portu, a pozostałe z odpowiednimi kolejnymi bitami (b0..b3). Przy czym, zapisanie ciągu cztero-bitowego do sterownika wymaga ustalenia stanu L na linii RS oraz podania stanu wysokiego na linię E na około 100μs (bity b4, b5). Po włączeniu zasilania odczekać >15ms Inicjalizacja 0x3 Czekaj >5ms Inicjalizacja 0x3 Czekaj >0,1ms Inicjalizacja 0x3 Interfejs 4 bity Tryb 2 wiersze, matryca 5x7 0x2 0x2 0x8 Inkrementacja poz., bez przes. okna 0x6 Wyłącz LCD 0x8 Włącz LCD bez kursora 0xC Wyczyść LCD 0x1 Rys.5 Komendy inicjalizujące moduł LCD do pracy w trybie czterobitowym Po dokonaniu inicjalizacji można już wyświetlać znaki alfanumeryczne poprzez przesłanie ich kodów ASCII do kontrolera LCD (rozpoczynając od starszej czwórki bitów). Szerszy opis sterowania modułem LCD wraz z tabelą obsługiwanych komend można znaleźć np. w [4]. Zadanie 1 Napisać program sterujący diodami LED0,..,LED7 z portu GPIOA w opisany poniżej sposób: a) krążąca jedynka, b) krążące zero, c) wahadło.

Następnie rozbudować program o możliwość zmniejszania (przycisk S0) i zwiększania (przycisk S1) prędkości zmian efektu wizualnego. Połączenia na płycie ZL30ARM: Anody LED D0..D7 Przyciski SW0, SW1 GPIO PA0..PA7 GPIO PA8, PA9 Przydatne fragmenty kodu źródłowego: void GPIO_Configuration(void) GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* Configure LED outputs */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 GPIO_Pin_1 GPIO_Pin_2 GPIO_Pin_3 GPIO_Pin_4 GPIO_Pin_5 GPIO_Pin_6 GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Configure switch inputs */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); Zadanie 2 Zbudować bibliotekę zawierającą funkcje inicjalizacji voidlcd_ini(void)oraz wyświetlania voidlcd_txt(char znaki[])do 32-óch znaków alfanumerycznych dla dwuwierszowego wyświetlacza LCD1602z zestawu uruchomieniowego. Przyjąć założenie, że ciąg jest zakończony znakiem '\n' oznaczającym koniec linii. Połączenia na płycie ZL30ARM: CHAR_LCD D4..D7 CHAR_LCD RS CHAR_LCD EN CHAR_LCD R/W GPIO PB8..PB11 GPIO PB12 GPIO PB13 GND Przydatne fragmenty kodu źródłowego: #include "stm32f10x.h" uint16_t wy; void Delay_lcd( IO uint32_t ncount) uint8_t i; for(; ncount!= 0;nCount--) i=ncount;

void wyslij_4(uint8_t rozkaz) GPIO_ResetBits(GPIOB, GPIO_Pin_12); wy=gpio_readoutputdata(gpiob); wy&=0xf0ff; wy =((rozkaz<<8)&f00); GPIO_Write(GPIOB,wy); GPIO_SetBits(GPIOB, GPIO_Pin_13); Delay_lcd(5000); GPIO_ResetBits(GPIOB, GPIO_Pin_13); Delay_lcd(5000); //odczyt aktualnego stanu portu GPIOB //wyzerowanie bitów danych LCD //ustalenie bitów danych //ustawienie linii Enable //ok.1ms Zadanie 3 Zbudować bibliotekę zawierającą funkcję void led7(uint16_t liczba)realizującą multipleksowe wyświetlanie cyfr liczby całkowitej liczba z zakresu 0..9999 na wyświetlaczach siedmiosegmentowych LED zestawu uruchomieniowego. Przyjąć czas wyświetlania cyfry około 4ms. Następnie, wywołując sekwencyjnie zbudowaną funkcję wyświetlać aktualną wartość zmiennej inkrementowanej w pętli w podanym zakresie. Połączenia na płycie ZL30ARM: Anody wyświetlaczy DS0..DS3 Segmenty wyświetlaczy a..g GPIO PA8,PA9,PA10,PB15 GPIO PB8..PB14 Przydatne fragmenty kodu źródłowego: Literatura #include "stm32f10x.h" void Delay_led( IO uint32_t ncount) uint8_t i; for(; ncount!= 0;nCount--) i=ncount; uint8_t segmenty[]=0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 2, 0x78, 0, 0x10; uint16_t wy, reszta; void led7(uint16_t liczba) : wy=gpio_readoutputdata(gpiob); wy&=0x80ff; GPIO_Write(GPIOB,(segmenty[reszta/1000]<<8) wy); Delay_led(20000); reszta%=1000; : [1] http://platforma.polsl.pl/rau3/ [2] Marek Galewski, "STM32 - Aplikacje i ćwiczenia w języku C", ISBN 978-83-60233-82-5, Wydawnictwo BTC, Legionowo 2011.

[3] Krzysztof Paprocki, "Mikrokontrolery STM32 w praktyce", ISBN 978-83-60233-52-8, Wydawnictwo BTC, Legionowo 2009, 2011 wyd. I poprawione. [4] http://en.wikipedia.org/wiki/hitachi_hd44780_lcd_controller [5] Reference Manual-RM0008 [6] www.st.com