Quantcast
Channel: Tutoriály – Bastlírna HWKITCHEN
Viewing all articles
Browse latest Browse all 133

TinyLab: Sedmisegmentový displej

$
0
0

V dnešním dílu seriálu článků o desce TinyLab se podíváme, jak se dá ovládat sedmisegmentový displej, který je na ní připojený. Na začátku si projdeme trochu teorii k sedmisegmentovým displejům a poté si ukážeme ovládání. Pokud chcete teorii přeskočit, jděte rovnou na část „Jak se to ovládá?“.


Sedmisegmentový displej

Sedmisegmentovka není nic jiného, než 7 ledek zatavených do jednoho pouzdra, které jsou poskládané do podoby znaku. Jednotlivým částem, které znak tvoří a které můžeme nezávisle rozsvěcovat, říkáme segmenty. Některé displeje mají navíc ještě jednu LED pro desetinnou tečku.

Sedmisegmentový displej s desetinnou tečkou (zdroj: https://en.wikipedia.org/wiki/File:Seven_segment_02_Pengo.jpg)

Sedmisegmentový displej s desetinnou tečkou (zdroj: https://en.wikipedia.org/wiki/File:Seven_segment_02_Pengo.jpg)

Vnitřní zapojení LED v displeji je většinou takové, že ledky sdílejí jednu z nožiček (pinů). Pokud je to ta, ke které připojujeme kladné napětí, jedná se o displeje se společnou anodou. Pokud spojíme ty, které připojujeme k zemi, získáme displej se společnou katodou. Zapojení se může lišit podle typu displeje i výrobce. Na obrázku níže vidíme jedno z možných zapojení LED v displeji. Jedná se o displej se společnou anodou.

Vnitřní zapojení sedmisegmentového displeje (zdroj: https://www.gme.cz/data/attachments/dsh.512-009.1.pdf)

Vnitřní zapojení sedmisegmentového displeje (zdroj: https://www.gme.cz/data/attachments/dsh.512-009.1.pdf)

Kdybychom chtěli na displeji z tohoto obrázku rozsvítit číslici nula, připojili bychom piny 3 a 8 (nebo alespoň jeden z nich) přes rezistor k 5V a piny 9, 7, 6, 4, 2, 1 k zemi.

Více číslic

Když chceme mít více, než jednu číslici, můžeme sáhnout po displeji, který v sobě kombinuje více takovýchto jednočíslicových displejů.

Sedmisegmentový displej se čtyřmi číslicemi (zdroj: https://cz.mouser.com/ProductDetail/Vishay/TDCG1050M?qs=sGAEpiMZZMvkC18yXH9iIqyJsypj8o8kg44rnx4xTqQ%3d)

Sedmisegmentový displej se čtyřmi číslicemi (zdroj: https://cz.mouser.com/ProductDetail/Vishay/TDCG1050M?qs=sGAEpiMZZMvkC18yXH9iIqyJsypj8o8kg44rnx4xTqQ%3d)

V rámci šetření pinů jsou v pouzdře opět některé piny spojené dohromady. V tomto případě spojujeme piny všech číslic, které ovládají jeden segment. Přináší to s sebou sice nutnost ovládat číslice postupně (vždy na jedné rozsvítíme požadovanou číslici, zhasneme, jdeme na další a když toto děláme dostatečně rychle, lidské oko si ničeho nevšimne), ale ušetří nám tento přístup spoustu pinů.

Vnitřní zapojení sedmisegmentového displeje se čtyřmi číslicemi (zdroj: https://cz.mouser.com/datasheet/2/427/tdcx10x0m-88849.pdf)

Vnitřní zapojení sedmisegmentového displeje se čtyřmi číslicemi (zdroj: https://cz.mouser.com/datasheet/2/427/tdcx10x0m-88849.pdf)

Na ovládání takového displeje tak potřebujeme 14 pinů, což může být pro některé aplikace pořád moc velké číslo.

Jde ušetřit ještě více pinů?

Ale jistě! Musíme ale přizvat na pomoc nějaký čip, ke kterému displej připojíme a on se nám postará o jeho řízení. Jemu pak posíláme pouze příkazy typu: „piny 1 až 13 připoj k 5V, pin 14 k zemi“, popřípadě u chytřejších čipů: „na druhé číslici zobraz jedničku“, „zhasni se“, atd. Jedním z čipů, který můžeme použít, je MAX7219, který najdeme i na desce TinyLab. K jeho ovládání nám stačí připojit tři vodiče (komunikuje přes sběrnici SPI, ale to není podstatné) a to už je pěkná úspora pinů oproti původním čtrnácti.

Jak se to ovládá?

Než začneme ovládat displej na TinyLabu, musíme zapnout potřebné přepínače. Jsou to ty u pinů 10, 11, 12. Také musíme přepnout trojici přepínačů pod sedmisegmentovým displejem do pozice „To Control 7-Segment“.

TinyLab: Poloha přepínačů pro ovládání sedmisegmentového displeje

Poloha přepínačů pro ovládání sedmisegmentového displeje

Pro Arduino existuje knihovna LedControl, kterou už jsme si do Arduino IDE přidali v tomto článku. Nejjednodušší bude si ukázat její použití na příkladu, ve kterém bude TinyLab počítat od 0 do 9999.

#include "LedControl.h"

// na kterých pinech máme připojený čip MAX7219
// poslední jednička značí, máme připojený jeden čip
// čipy MAX7219 totiž můžeme řetězit za sebe a ovládat tak více displejů
LedControl lc = LedControl(10, 12, 11, 1); 

void setup() {
  // po zapnutí napájení je MAX v úsporném režimu
  // musíme ho nejdříve probudit
  // nula značí adresu zařízení
  lc.shutdown(0, false);

  // nastavíme jas displeje (možné hodnoty jsou 0 až 15)
  lc.setIntensity(0,8);
  
  // pro jistotu smažeme vše, co by bylo na displeji zobrazené
  lc.clearDisplay(0);
}

// vrátí číslici na dané pozici číslované zprava
byte digitOnPosition(int num, byte pos) {
  for(byte i = 0; i < pos; i++) {
    num /= 10;
  }

  return num % 10;
}

void loop() {
  for(int i = 0; i < 9999; i++) { // které číslo zobrazit
    for(int j = 0; j < 4; j++) { // na jaké pozici (0 je nejvíce vlevo)
      byte digit = digitOnPosition(i, j);

      // na zařízení s adresou 0 na znaku 3-j nastav číslici digit
      // false značí, že se nemá zobrazit desetinná tečka u této číslice
      lc.setDigit(0, 3 - j, digit, false); 
    }
    delay(10);
  }
}

Knihovna také umí zobrazit znaky, ale jenom ty, které jdou dobře zobrazit na displeji.

  • 0 1 2 3 4 5 6 7 8 9
  • A a -> A
  • B b -> b
  • C c -> c
  • D d -> d
  • E e -> E
  • F f -> F
  • H h -> H
  • L l -> L
  • P p -> P
  • -
  • . , -> rozsvítí desetinnou tečku
  • _
  • mezera
#include "LedControl.h"

LedControl lc = LedControl(10, 12, 11, 1); 

char chars[] = {'A', 'B', 'C', 'D', 'E', 'F', 'H', 'L', 'P', '-', '.', '_', ' '};

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0,8);
  lc.clearDisplay(0);

}

void loop() {
  for(int i = 0; i <  13; i++) {
      lc.setChar(0, 0, chars[i], false);
      lc.setChar(0, 1, chars[i], false);
      lc.setChar(0, 2, chars[i], false);
      lc.setChar(0, 3, chars[i], false);
      
      delay(500);
  }  
}

Více informací k této knihovně najdete zde.


A to je pro dnešek vše. Máte nějaké dotazy? Zeptejte se v komentářích, nebo na našem fóru.


Viewing all articles
Browse latest Browse all 133

Trending Articles


Re: Prosím o určení autora - google nepomáhá


Nelze se přihlásit na Facebook přes PC


Prodám Flexi pass - 3 200


Markéta Reinischová: Chceme s Filipem Jankovičem dítě!


Od: Martina


Podzemlje - epizoda 62


Defender


Plynový kotel DAKON DS 22G - 2 500


Gymnastické řemínky na hrazdu zn. Reisport, vel. č. 2: 590


P: NooK Soundelirium THE 12.6


Qube SP26 ( XTA DP226 ) signal processor - 12 000


Narovnání,vylisování bankovek


Javorina Holubyho chata


Tinylab: Tlačítka


Levasan Maxx není gel na klouby, nýbrž hnus


RNS315 couvací kamera


Kde najdu GameInput Service ve win 10?


Redmi Note 11 Pro+ 5G (PISSARO)


MV3 Vermona, Klingenthal, NDR


Hradcany 30h fialova razena 11 1/2 11 3/4



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>