Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2018:matrix-led

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
2018:matrix-led [2019/01/13 15:45]
Lukáš Hartmann
2018:matrix-led [2019/01/14 18:32] (aktuální)
Lukáš Hartmann
Řádek 1: Řádek 1:
 +====== MATICOVÝ LED DISPLEJ ======
 +
 +
 ====== Zadání ====== ====== Zadání ======
  
Řádek 16: Řádek 19:
  
 ==== Zapojení ==== ==== Zapojení ====
-{{ :​2018:​maticovy-displej:​pohyblivy_led_displej.jpg?​400 |}}+Uvedené zapojení není kompletní z důvodu přehlednosti. Celkem je zapojeno osm displejů (uvedené jsou pouze tři). 
 +{{ :​2018:​maticovy-displej:​pohyblivy_led_displej.jpg?​600 |}} 
 + 
 + 
 +====== Software ====== 
 + 
 +Vývojové prostředí jsem zvolil Atollic TrueSTUDIO, které je založeno na vývojové platformě Eclipse. Základní části programu s nastavením periférii byla vytvořena v programu STM32Cube-MX. Bylo nastaveno rozhraní SPI, UART a Timer2 
 + 
 +Pro ovládíní obvodu MAX7219 byla vytvořena funkce: 
 +<​code>​ 
 +void Write_MAX7219(uint8_t before, uint8_t address, uint8_t data, uint8_t after) 
 +
 + uint8_t message [2]; 
 + uint8_t noop[2] = {0x00,​0x00};​ 
 + message[0] = address; 
 + message[1] = data; 
 + HAL_GPIO_WritePin(GPIOA,​GPIO_PIN_4,​GPIO_PIN_RESET);​ 
 + if (before != 0) 
 +
 + for (uint8_t i = 0; i < before; i++) 
 +
 + HAL_SPI_Transmit(&​hspi1,​noop,​2,​HAL_MAX_DELAY);​ 
 +
 +
 + HAL_SPI_Transmit(&​hspi1,​message,​2,​HAL_MAX_DELAY);​ 
 + if (after != 0) 
 +
 + for(uint8_t i = 0; i < after; i++) 
 +
 + HAL_SPI_Transmit(&​hspi1,​noop,​2,​HAL_MAX_DELAY);​ 
 +
 +
 + HAL_GPIO_WritePin(GPIOA,​GPIO_PIN_4,​GPIO_PIN_SET);​ 
 +
 +</​code>​ 
 + 
 +Data pro řízení obvodu jsou 16 bitová. Nejdříve je odeslána adresa příkazu a následně data pro zvolený příkaz. Pokud jsou obvody kaskádově zapojeny, je nutné každému obvodu zaslat nějaký příkaz. Např. pokud budou zapojeny tři obvody a chceme ovládat druhý v pořadí, musí se prvnímu a třetímu odeslat adresa příkazu "​No-op"​ (žádná operace). Přikaz bude odeslán v tomto formátu: "​No-op,​ požadovaný příkaz, No-op"​.  
 +V hlavičce funkce jsou definovány vstupní proměnné before, adress, data, after. Before resp. after znamená kolik obvodů je zapojeno před resp. za ovládaným obvodem. 
 + 
 +Vstupní data jsou přenášena po rozhraní UART1 s DMA nastaven na kruhový buffer délky 64 znaků. Znaky k zobrazení jsou omezené jen na tisknutelné znaky v ascii tabulce (ASCII kódy 32 až 126). Přijatý znak je dekódován pro zobrazení na displeji. Každý znak na displeji zabírá pět pozic. Jednotlivé LED diody, které mají svítit resp. být shasnuty jsou definovány v paměti procesoru. Např. pro znak "​A"​ je definice následující:​ 
 +<​code>​ 
 +const uint8_t znakA[5] = {0xF8,​0x24,​0x22,​0x24,​0xF8};​ 
 +</​code>​ 
 + 
 +Dekódované znaky jsou uloženy v jednorozměrném poli "​zprava"​. Toto pole je následně s každým přerušením od Timer2 postupně odesíláno na displej. Aby obsluha přerušení byla co nejkratší nostaví se pouze pomocná proměnná, která je následně v nekonečné smyčce testována. Znaky které jsou právě zobrazené na displeji jsou uloženy v poli buffer délky 64 (8 LED matic po 8 sloupcích). Nová data jsou zapsána na pozici nula a stará data jsou posunuta o jednu pozici vzad. Jakmile je dosaženo konce pole je zpráva zase zobrazována od začátku. O fyzický zápis se stará funkce "​display_data()",​ kde vstupním parametrem je zmíněné pole buffer. 
 + 
 +Kromě dat k zobrazení jsou definovány čtyři řídící příkazy (stop, run, jas, clear). Příkaz musí začínat znakem tilda (~), jinak jsou přijaté data prány jako zpráva k zobrazení. Jak již název jednotlivých příkazu napovídá jejich funkce je následující:​ 
 +  * stop - zastaví pohyb znaků na displeji 
 +  * run - opětovně povolí pohyb znaků 
 +  * jas xx - změna jasu displeje, kde xx je jas displeje v rozsahu 0 - 15 
 +  * clear - vymazání dat na displeji 
  
  
 +====== Video ======
  
 +{{youtube>​JCH5AMuKoAY?​medium}}
  
 +====== Zdrojové soubory ======
  
 +{{ :​2018:​maticovy-displej:​maticovy_displej.rar |}}
  
 +====== Zdroje ======
  
 +  * https://​howtomechatronics.com/​tutorials/​arduino/​8x8-led-matrix-max7219-tutorial-scrolling-text-android-control-via-bluetooth/​
 +  * http://​embedded-lab.com/​blog/​portable-bluetooth-enabled-scrolling-led-matrix-display-part-1/​
  
  
2018/matrix-led.1547390717.txt.gz · Poslední úprava: 2019/01/13 15:45 autor: Lukáš Hartmann