grove - display 4 digity s řídícím obvodem...
TRANSCRIPT
![Page 1: Grove - display 4 digity s řídícím obvodem TM1637wrack.ped.muni.cz/hrbacek/ardMod/4digTM1637.pdf · obvod. To nám může dokonce otevřít některé další možnosti jeho využití](https://reader030.vdocuments.mx/reader030/viewer/2022040804/5e3fffb33ffb7a0a225ec6a2/html5/thumbnails/1.jpg)
Moduly pro Arduino – využívání s PICAXE Grove - display 4 digity s řídícím obvodem TM1637
H&S electronic systems 1 ©Jiří Hrbáček
Grove - display 4 digity s řídícím obvodem TM1637
Modul je řízen obvodem TM1637, který má za úkol celé ovládání displaye, jeho jas a zobrazované hodnoty pomocí dvou vodičové sběrnice CLK (clock – hodiny) a DIO (data IO – vstup/výstup dat) – zjednodušené I2C (nepracuje však se slave adresami).
Schéma zapojení modulu a jeho plošný spoj je na následujícím obrázku
´
Správný konstruktér systémů s mikrokontrolérem, obzvlášť potřebuje-li maximálně využít výkon použitého mikrokontroléru, musí znát přesný způsob ovládání a komunikace s modulem. To mu umožní efekltivní využití modulu bez toho, že by nesmyslně omezil výkon a rychlost reakce na vnější události ve svém systému obzvlášť, řídí-li zařízení pracující v reálném čase.
Ovládání modulu z mikrokontroléru
Vývod modulu DIO (Data I/O) je obousměrný a je opatřen pull-up rezistorem (rezistorem připojeným k VDD). Strana, která data přijímá je ve vyské impedanci (v režimu vstup). Strana, která data vysílá, přechází mezi režimem vstup (vysoká impedance) a výstupem v úrovni L.
Vstup CLK modulu je také opatřen na modulu pull-up rezistorem. Může být připojen a ovládán z mikrokontroléru stejně, jako vývod DIO, nebo jej můžeme připojit přímo k výstupu mikrokontroléru a ovládat nastavováním tohoto výstupu do H, nebo L.
TL1637 mikrokontrolér
CLK DIO modul
VDD
GND
![Page 2: Grove - display 4 digity s řídícím obvodem TM1637wrack.ped.muni.cz/hrbacek/ardMod/4digTM1637.pdf · obvod. To nám může dokonce otevřít některé další možnosti jeho využití](https://reader030.vdocuments.mx/reader030/viewer/2022040804/5e3fffb33ffb7a0a225ec6a2/html5/thumbnails/2.jpg)
Moduly pro Arduino – využívání s PICAXE Grove - display 4 digity s řídícím obvodem TM1637
H&S electronic systems 2 ©Jiří Hrbáček
Příklad ovládání pinu CLK a DIO z PICAXE 20M2 – B.0 je výstup CLK, B.1 je I/O DIO
pinsB= %00000000 ;DIO do 0, CLK do 0 high CLK ;CLK do 1 low CLK ;CLK do 0 dirsB= %11111101 ;DIO do 1 dirsB= %11111111 ;DIO do 0
Druhý způsob ovládání pinu CLK dirsB= %11111110 ;CLK do 1 dirsB= %11111111 ;CLK do 0
Může se však také využívat stejný způsob jako při vysílání dat do modulu přes výstup DIO, protože modul má i na vstupu CLK pull-up odpor.
Nemá-li mikrokontrolér piny IO portu schopné dynamicky přecházet mezi režimy vstup/výstup, musíme použít dva piny jako výstupy (CLK a DOut) a jeden pin jako vstup pro DIn (čtení dat). Je třeba však pin DIO modulu připojit například následujícím způsobem.
Poznámka: Nikdy nesmí dojít k situaci, aby procesor vysílal do modulu úroveň H a modul začal vysílat do mikrokontroléru úroveň L. Mohlo by dojít k poškození výstupu modulu, nebo procesoru.
Minimální délka hodinového pulzu je 1 µs. Maximální frekcence hodin se střídou 1/1 je tedy 500 kHz.
Pro správné pochopení činnosti modulu a práce s ním je třeba porozumět, jak pracuje jeho řídící obvod. To nám může dokonce otevřít některé další možnosti jeho využití. Katalogový list obvodu prozradí důležité informace.
Řídící obvod TM1637 je obvod od firmy Titan Microelectronic – LED drive Control Special Circuit umožňuje obsluhovat až 6 digitů 7 segmentového LED zobrazovače se společnou anodou a skenovat až 2 x 8 tlačítek klávesnice. Rozmístění pinů obvodu a jejich funkce.
![Page 3: Grove - display 4 digity s řídícím obvodem TM1637wrack.ped.muni.cz/hrbacek/ardMod/4digTM1637.pdf · obvod. To nám může dokonce otevřít některé další možnosti jeho využití](https://reader030.vdocuments.mx/reader030/viewer/2022040804/5e3fffb33ffb7a0a225ec6a2/html5/thumbnails/3.jpg)
Moduly pro Arduino – využívání s PICAXE Grove - display 4 digity s řídícím obvodem TM1637
H&S electronic systems 3 ©Jiří Hrbáček
Komunikace s modulem
Klidový stav sběrnice je CLK i DIO v H. Při Start sekvenci nejdříve přejde DIO do L a po té CLK do L (zahájení přenosu po sběrnici). Pro ukončení přenosu – Stop sekvence po sběrnici přejde signál CLK do H a až po něm i DIO do H.
Nejde o plný protokol I2C sběrnice. Nejsou využívány slave adresy. Start a Stop sekvence signálů je však stejná jako v I2C komunikaci.
Řízení zobrazovače
K vývodům (output p-Channel open drain) GRID1/6. GRID1 připojujeme anody segmentů 1. digitu (LSB), GRID2 anody segmentů 2. digitu, ...., k vývodu GRID6 pak anody segmetů 6. digitu (MSB). Katody všech segmentů jsou připojeny k vývodům (output n-Channel open drain) SEG1 až SEG8.
p-Channel/n-Channel output open drain obvodu
Jas displaye je řízen PWM modulací proudu do zobrazovačů s délou pulsu 1/16 až 14/16, nebo zhasnutí displaye.
Zobrazovaná data jsou ukládána do 6 osmibitových registrů SD RAM. Na adrese C0h je uložen stav digitu1 (GRID1), na adrese C1h – stav digitu2 (GRID2). na adrese C2h – stav digitu3 (GRID3), na adrese C3 – stav digitu 4 (GRID4). Na adresách C4h a C5h jsou digity 5 a 6, které v našem modulu nejsou využity. Jednotlivé bity odpovídají segmentům takto. Bit0 – SEG1/a, bit1 – SEG2/b, bit2 – SEG3/c, bit3 – SEG4/d, bit4 – SEG5/e, bit5 – SEG6/f, bit6 – SEG7/g a bit7 – SEG8/dp.
Ovládání modulu při zobrazování
Data uložená do SDRAM jsou zobrazena na display. Obsah SDRAM 0 je zobrazen na digitu 1 – digit s nejvyšší váhou. Obsah SDRAM 1 je zobrazen na digitu 2, digit vlevo od dvojtečky. Bit7 této buňky
![Page 4: Grove - display 4 digity s řídícím obvodem TM1637wrack.ped.muni.cz/hrbacek/ardMod/4digTM1637.pdf · obvod. To nám může dokonce otevřít některé další možnosti jeho využití](https://reader030.vdocuments.mx/reader030/viewer/2022040804/5e3fffb33ffb7a0a225ec6a2/html5/thumbnails/4.jpg)
Moduly pro Arduino – využívání s PICAXE Grove - display 4 digity s řídícím obvodem TM1637
H&S electronic systems 4 ©Jiří Hrbáček
SDRAM ovládá svit této dvojtečky. Obsah SDRAM2 a 3 je zobrazován na digitech 3 a 4 (vpravo od dvojtečky)
Potřebujeme-li zobrazit číslice na modulu, potřebujeme znát, jak je propojena SDRAM se segmenty digitů. Jejich zapojení je následující:
Tvar zobrazených znaků si můžeme vytvořit sami. Bit, ve kterém je 1 svítí, kde je 0 nesvítí. Například číslice 0 bude %00111111, 1 bude %00000110, ..., 9 bude %01101111. Lze nezávisle rozsvěcovat libovolné segmety jednotlivých digitů. Nejvyšší bit ovládá svit tečky. Na modulu je diplay s dvojtečkou uprostřed. Tato dvojtečka je ovládána jako tečka 2. digitu. Tečky 1. 3. a 4. digitu nejsou použity.
Před zahájením zápisu znaků do modulu zvolíme režim zápisu dat do DDRAM - můžeme měnit stav více digitů na jeden zápis adresy, nebo budeme měnit pouze stav jednoho digitu, jehož adresa jej uvede.
Data command setting – režim zápisu dat do SDRAM
;............................................................ ; příkazy pro nastavení režimu zápisu do SDRAM symbol wrAutoinc =%01000000 symbol wrOneAddr =%01000100 ;............................................................
Zápis s autoinkrementací adresy DDRAM při zápisu dat (zápis více digitů najednou jednoho po druhém), zápis pouze na jednu adresu DDRAM (změna stavu pouze jednoho digitu)
Po tomto příkazu již používáme příkaz pro zápis dat do SDRAM v závislosti na nastavení režimu činnosti. Vždy se vyšle nejdříve adresa DDRAM, kam se má zapisovat/od které se má zapisovat a pak již následují zapisovaná data.
Zápis do SD RAM s autoinkrementací adresy (do posobě jdoucích adres SDRAM (digitů))
digit 1
digit 4
![Page 5: Grove - display 4 digity s řídícím obvodem TM1637wrack.ped.muni.cz/hrbacek/ardMod/4digTM1637.pdf · obvod. To nám může dokonce otevřít některé další možnosti jeho využití](https://reader030.vdocuments.mx/reader030/viewer/2022040804/5e3fffb33ffb7a0a225ec6a2/html5/thumbnails/5.jpg)
Moduly pro Arduino – využívání s PICAXE Grove - display 4 digity s řídícím obvodem TM1637
H&S electronic systems 5 ©Jiří Hrbáček
Musíme dát pozor na to, aby se nazapsalo více bytů, než je rozsah SDRAM. Pokud vyšleme adresu SDRAM0, pak po ní mohou následovat až čtyři byty dat (přepíše se celý obsah zobrazovaných 4 digitů).
Zápis do SDRAM na pevnou adresu (do konkrétního digitu)
Zapsaná data do těchto registrů jsou zobrazena. Zápis dat do SDRAM lze provést s autoinkrementací, nebo pouze na konkrétní adresu.
;............................................................ ; adresy SDRAMx, 0-digit1, 1-didit2, 2-didit3 a 3-digit4 symbol SDRAM0 =%11000000 symbol SDRAM1 =%11000001 symbol SDRAM2 =%11000010 symbol SDRAM3 =%11000011 ;............................................................
Zapnutí/vypnutí displaye nebo nastavení jeho jasu
Modul je po zapnutí nastaven tak, že má zapnuté zobrazování s jasem 4/16. Jas můžeme kdykoliv změnit pomocí příkazu Display Control.
Display Control
;............................................................ ; display on control 1000 1xxx (xxx-000, ... , 111) ; display off 1000 0xxx symbol dspOff=%10000000 ;vypnutí displaye symbol dspOn1=%10001000 ;jas 1/16 symbol dspOn2=%10001001 ;jas 2/16 symbol dspOn4=%10001010 ;jas 4/16 symbol dspOn10=%10001011 ;jas 10/16 symbol dspOn11=%10001100 ;jas 11/16 symbol dspOn12=%10001101 ;jas 12/16 symbol dspOn13=%10001110 ;jas 13/16 symbol dspOn14=%10001111 ;jas 14/16
;*********************************************************************************** ; Nastav jas zobrazovace ;................................................................................... ; V jasDsp musi byt pred volanim podprogramu spravny prikaz ; dspOff ; dspOn1 1/16 ; dspOn2 2/16 ; dspOn4 4/16 ; dspOn10 10/16 ; dspOn11 11/16 ; dspOn12 12/16 ; dspOn13 13/16 ; dspOn14 14/16 ;................................................................................... writeJas: ;START sekvence dirsB=%11111111 ;DIO do 0 low CLK ;CLK do 0 ;....................................... byteD= dspOn4 call sndByte ;................................ high CLK ;STOP sekvence dirsB=%11111101 ;DIO do 1 return ;***********************************************************************************
![Page 6: Grove - display 4 digity s řídícím obvodem TM1637wrack.ped.muni.cz/hrbacek/ardMod/4digTM1637.pdf · obvod. To nám může dokonce otevřít některé další možnosti jeho využití](https://reader030.vdocuments.mx/reader030/viewer/2022040804/5e3fffb33ffb7a0a225ec6a2/html5/thumbnails/6.jpg)
Moduly pro Arduino – využívání s PICAXE Grove - display 4 digity s řídícím obvodem TM1637
H&S electronic systems 6 ©Jiří Hrbáček
Důležité parametry pro činnost modulu
VDD = 5V, VINH =0.7 VDD až VDD, VINL=0 – 0.3 VDD, FCLKmax = 500 kHz, Clock pulse width min. = 400 ns
Výchozí stav řídících signálů bezprostředně před jejich vysláním do modulu je CLK i DIO v 0. Data (příkazy) se do modulu posílají od LSB (nejméně významného bitu – bit 0) po MSB (nejvíce významný bit – bit 7). Procesor vystaví na DIO hodnotu příslušného bitu a poté vyšle CLK puls. Ke změně stavu dat na DIO dochází tedy vždy, když je CLK v 0. Po vyslání sedmého bitu dat do modulu je třeba DIO přepnout do režimu čtení dat z modulu (do H). Poté nastavíme CLK do H, přečteme stav DIO (stav ACK). Následně nastavíme DIO do L a CLK také do L. Pokud je přečtený stav DIO = 0, pak víme, že ACK modul vyslal. Pokud bychom však přečetli DIO = 1, pak by to znamenalo, že modul nepotvrdil přijetí dat.
;************************************************************ ; Podprogramy ; CLK je na vystup B.0, DIO je na B.1 a prepiname jej jako vstup ; (vystup v H), nebo vystup v L ;************************************************************ ; Vysle byte dat z registru byteD do modulu ;........................................................... sndByte: low ldErr maskBit = %00000001 sndB0: regTMP=byteD AND maskBit ;vyslani bitu dat if regTMP=0 then goto sndB1 ;.................................................. dirsB= %11111101 ;DIO do 0 high CLK ;CLK do 1 low CLK ;CLK do 0 goto sndB2 sndB1: dirsB= %11111111 ;DIO do 1 high CLK ;CLK do 1 low CLK ;CLK do 0 ;.................................................. sndB2: maskBit=maskBit+maskBit ;rotace o bit vlevo if maskBit=0 then goto sndB3 ;bylo již vysláno všech 8 bitů dat goto sndB0 ;přejdi na vyslání dalšího bitu dat sndB3: ;Test ACK dirsB= %11111101 ;DIO do 1 high CLK ;CLK do 1 if DIO = 0 then goto sndB4 ;test ACK high ldErr ;neprislo ACK sndB4: dirsB= %11111111 ;DIO do 0
low CLK ;CLK do 0 return ;************************************************************
Podívejme se, jak uvedený podprogram ovládá modul.
Start/Stop sekvence
![Page 7: Grove - display 4 digity s řídícím obvodem TM1637wrack.ped.muni.cz/hrbacek/ardMod/4digTM1637.pdf · obvod. To nám může dokonce otevřít některé další možnosti jeho využití](https://reader030.vdocuments.mx/reader030/viewer/2022040804/5e3fffb33ffb7a0a225ec6a2/html5/thumbnails/7.jpg)
Moduly pro Arduino – využívání s PICAXE Grove - display 4 digity s řídícím obvodem TM1637
H&S electronic systems 7 ©Jiří Hrbáček
Vysílání dat
ACK bit
Možné rozšíření využití modulu
Doporučené zapojení obvodu TM1637
Připojení tlačítek k modulu
Můžeme k modulu připojit tlačítka a třeba i další 2 digity, nebo třeba až 16 LED. Vím, není to zrovna „elegantní“ řešení, ale může být někdy velmi užitečné a funkční. Podívejme se na příklad, jak lze připojit tlačitka k modulu (pohled na modul ze spodní strany, kde nejsou zobrzovače).
![Page 8: Grove - display 4 digity s řídícím obvodem TM1637wrack.ped.muni.cz/hrbacek/ardMod/4digTM1637.pdf · obvod. To nám může dokonce otevřít některé další možnosti jeho využití](https://reader030.vdocuments.mx/reader030/viewer/2022040804/5e3fffb33ffb7a0a225ec6a2/html5/thumbnails/8.jpg)
Moduly pro Arduino – využívání s PICAXE Grove - display 4 digity s řídícím obvodem TM1637
H&S electronic systems 8 ©Jiří Hrbáček
Bylo by možné podobným způsobem modul rozšířit až na 6 digitů a 16 tlačítek.
Možnost užitečného rozšíření funkce modulu
Jak již bylo ukázáno, řídící obvod modulu umožňuje modul rozšířit až na 6 digitů a 16 tlačítek. Podíváme-li se na modul ze spodní strany, rozmístění vývodů signálů, kterými můžeme modul rozšířit je na následujícím obrázku.
Když tyto signály vyvedeme na konektor, bude snadné modul elegantním způsoben rozšiřovat jak o zobrazovací prvky (až 16 led, nebo 2 sedmisegmentovky) tak i o tlačítka (až 16). POZOR! Řídící obvod neumožňuje ošetřit stisk více, než jednoho tlačítka současně.
PINOUT konektoru
Scan stavu klávesnice
K vývodu (vstupu dat při skenu stavu klávesnice) K1 je připojeno 8 tlačítek a ke K2 je připojeno druhých 8 tlačítek. Druhá strana tlačítek je připojena k vývodům SEG1/8.
Stisknutí tlačítka se projeví v datech následujícím způsobem (1110_1111 stav pro 0xF7).
Čtení stavu klávesnice
Command – Data command - Read key scan data
Obvod nepodporuje stisk více tlačítek současně!
gr5 gr6 seg5 seg4 seg8 seg3 seg7 K1 K2 seg1 seg6 seg2
konektor
![Page 9: Grove - display 4 digity s řídícím obvodem TM1637wrack.ped.muni.cz/hrbacek/ardMod/4digTM1637.pdf · obvod. To nám může dokonce otevřít některé další možnosti jeho využití](https://reader030.vdocuments.mx/reader030/viewer/2022040804/5e3fffb33ffb7a0a225ec6a2/html5/thumbnails/9.jpg)
Moduly pro Arduino – využívání s PICAXE Grove - display 4 digity s řídícím obvodem TM1637
H&S electronic systems 9 ©Jiří Hrbáček
SEG1 SEG2 SEG3 SEG4 SEG5 SEG6 SEG7 SEG8 K1 0000 1000 0000 1001 0000 1010 0000 1011 0000 1100 0000 1101 0000 1110 0000 1111
K2 0001 0000 0001 0001 0001 0010 0001 0011 0001 0100 0001 0101 0001 0110 0001 0111
V tabulce jsou přečtená data negovaná. Negovaná hodnota předaná na příkaz čtení stavu klávesnice znamená následující: číslo řádku - K2 K1 číslo sloupce - S2 S1 S0 kde je tlačítko stisknuté (000K2 K1 S2 S1 S0 )
Čtení stavu klávesnice
;*********************************************************************************** ; Precti stav klaves ;................................................................................... rdStavKlav: ;START sekvence dirsB=%11111111 ;DIO do 0 low CLK ;CLK do 0 ;....................................... byteD = %01000110 call sndByte call rdByte ;....................................... high CLK ;STOP sekvence dirsB=%11111101 ;DIO do 1 return ;************************************************************ ; Precte byte dat (stav klavesnice) z modulu registru do byteD ;........................................................... rdByte: stKl = %00000000 dirsB=%11111101 ;CLK do 0, DIO trvale jako vstup low CLK ;.......................................... high CLK ;CLK do 1 if DIO=0 then goto rdb1 stKl=stKl OR %00000001 ;precteni bitu 0 - S0 rdb1: low CLK ;CLK do 0 ;.......................................... if DIO=0 then goto rdb2 stKl=stKl OR %00000010 ;precteni bitu 1 - S1 rdb2: high CLK ;CLK do 1 low CLK ;CLK do 0 ;.......................................... if DIO=0 then goto rdb3 stKl=stKl OR %00000100 ;precteni bitu 2 - S2 rdb3: high CLK ;CLK do 1 low CLK ;CLK do 0 ;.......................................... if DIO=0 then goto rdb4 stKl=stKl OR %00001000 ;precteni bitu 3 - K1 rdb4: high CLK ;CLK do 1 low CLK ;CLK do 0 ;.......................................... if DIO=0 then goto rdb5 stKl=stKl OR %00010000 ;precteni bitu 4 - K2 rdb5: high CLK ;CLK do 1 stKl=stKl OR %11100000 ;bit 5/7 do H stKl=NOT stKl ;v Byte D je cislo tlacitka ; 01000 -tl 1,..,01111 tl 8, 10000 tl 9,.., 10111 tl 16 low CLK ;CLK do 0 ;...................................... high CLK ;CLK do 1 bit 5 = 1 low CLK ;CLK do 0 ;.......................................... high CLK ;CLK do 1 bit 6 = 1 low CLK ;CLK do 0 ;.......................................... high CLK ;CLK do 1 bit 7 = 1 low CLK ;CLK do 0 ;.......................................... high CLK ;CLK do 1 bit ACK = 0 dirsB=%11111111 ;DIO do 0 low CLK ;CLK do 0 ;.......................................... return ;..........................................