====== ARM07 - Maticový LED zobrazovač ======
^ Možný bodový zisk | 3+2+3 b |
^ Vzorový program | {{ :courses:b2m37mam:homeworks:arm07_led.matrix_example.zip | ARM07_LED.Matrix.zip}} |
^ Vzorový program - rozšíření | {{ :courses:b2m37mam:homeworks:arm07_led.matrix_example.zip | ARM07_LED.Matrix.zip}} |
===== Zadání a kritéria =====
* Navrhněte v jazyce C program ovládající maticový displej s 8x8 LEDkami
* Na displeji zobrazte jeden z obrázků níže, 'X' značí svítící LED, případně si vymyslete vlastní tvary
* Vykreslování na displej bude řídit časovač. Periodu obnovení zvolte takovou, aby se displej jevil statický tj. min 50 Hz na celý displej.
XXXXXXXX -----X-- XXXXX--- XX------
X------X ----XXX- XXX--X-- X--XX---
X------X XXXX---X XXX---X- XX-X----
X------X X----X-X X------X X--XX-X-
X------X X------X X------X X--X--X-
X------X X-XX---X -X----X- ---XX-X-
X------X X-XX---X --X--X-- ------X-
XXXXXXXX XXXXXXXX ---XX--- ------XX
Při volbě pinů zkontrolujte, zda-li jsou volné. Například k pinu PA5, který může být použit jako SCK pro SPI1, je již připojena LED1. Po připojení pinu ke vstupu ''DIN'' desky bude LEDkou limitováno napětí na přibližně 2 V (záleží na pull-up odporu), což je pod minimální úrovní logické jedničky a deska se zobrazovačem tak nebude reagovat.
===== Rozšíření A =====
* Základní program
* Krátkým stiskem USER tlačítka (B1) budete přepínat mezi obrázky (1 b)
* Dlouhým stiskem USER tlačítka aktivujte automatické přepínání mezi obrázky (1 b)
* Přepínání deaktivujete následovným stiskem tlačítka (dlouhý nebo krátký)
Pro snadnější detekci krátkých a dlouhých stisků můžete využít Input Capture módu některého z časovačů. Tlačítko USER sice není připojené k žádnému časovači, ale můžete ke vstupu některého časovače připojit propojkou.
===== Rozšíření B =====
* Rozšíření A
* Přepínání obrázku bude animované. Obrázek se začne posouvat a prázdné místo doplněno pixely z dalšího obrázku (jako v zobrazovače v MHD). (1 b)
* Přidejte ovládání pomocí UART (1 b)
* Umožněte vložit nový obrázek nebo přepsat stávající. (1 b)
* Navrhněte vlastní API pro příjem dat. Například:
* Následující obrázek ''n'' (znak 'n' následovaný klávesou enter/znakem nového řádku)
* Zapni animaci ''a''
* Nahraj obrázek ''uXXXXXXXXX------XX--...--XXXXXXXXX'' (znak 'u' následován 64 znaky s hodnotou pixelu).
===== Popis vzorového řešení =====
* Pinout: MATRIX --- Nucleo
* VCC --- 5 V
* GND --- GND
* DIN --- PA7/D11
* CS --- PB6/D10
* CLK --- PB3/D3
* Ovládání
* User Button (B1)
* Krátký stisk --- přepni na další obrázek
* Dlouhý stisk --- zapni/vypni automatické přepínání
* Uart (115200n8)
* ''h'' nápověda k ovládání
* ''a'' zapni/vypni animování změny obrázku
* ''n'' přepni na další obrázek
* ''uIMG'' nahraj obrázek, ''u'' následováno 64 znaky bitmapy obrázku ''IMG'', ''X'' nebo ''x'' značí rozsvícený pixel, jakýkoliv jiný znak značí zhasnutý pixel