TM1637 w module z wyświetlaczem LED 7seg, 4 cyfry

4.6/5 - (12 votes)

TM1637 w module wyświetlacza 7 segmentowegoTM1637 jest rodzajem interfejsu skanowania obwodu klawiatury, ze zintegrowanym, specjalizowanym sterownikiem wyświetlacza, zbudowanego na diodach LED.
Układ scalony złożony jest z kilku zintegrowanych interfejsów cyfrowych: MCU, zatrzasków, sterownika napięcia dla LED, obwodu skanującego klawiaturę. Producent pisze:

Ten produkt jest doskonałej i niezawodnej jakości. Dedykowany do kuchenek elektrycznych i mikrofalowych, oraz jako mały kontroler wyświetlacza (Display Driver).

 

 

TM1637 opis wyprowadzeńCechy

⇒ Opracowany w oparciu o proces CMOS
⇒ Tryb wyświetlania – 6 wyświetlaczy 8 segmentowych, ze wspólną anodą
⇒ Klawiatura skanowanie dwóch ośmiobitowych linii, zwiększona odporność na zakłócanie, układ rozpoznawania klawiszy
⇒ Układ regulacji jasności – cykl 8 stopniowy
⇒ Interfejs szeregowy dwuprzewodowy (CLK, DIO)
⇒ Wbudowany oscylator RC (450KHz + 5%)
⇒ Wbudowany układ power-on reset
⇒ Wbudowany automatyczny układ wygaszania
⇒ Obudowa: DIP20 / SOP20

Opis funkcjonalny wyprowadzeń

DIO Serial data input/output, pin 17, szeregowe wejście/wyjście danych, dane wejściowe zapisywane są na wysokim poziomie SCLK, każdy odebrany bajt podczas transmisji, generuje sygnał ACK przy dziewiątym takcie zegarowym.
CLK Clock input, pin 18, dane są przepisywane na narastającym zboczu sygnału zegarowego
K1 ~ K2 Key-scan data input, pin 19-20, dane wprowadzane na piny będą odczytywane (zatrzaskiwane) na koniec okresu wyświetlacza
SG1 ~ SG8 output (segment), pin 2-9, wyjście segmentów (również używane do skanowania klawiatury) typu N, wyjście otwarty dren
GRID6 ~ GRID1 Output(grid), pin 10-15, wyjście do sterowania anody wyświetlacza, typu P, wyjście otwarty dren
VDD Logic power, pin 16, 5V ± 10%
GND Logic ground, pin 1, podłączony systematycznie

Odczyt danych skanowania klawiatury.

Matryce klawiatury 8 × 2bit, przedstawia poniższy schemat:
TM1637 key scan matix
Po naciśnięciu przycisku, klawisze są odczytywane w sposób następujący:
TM1637 key sequence
Uwaga: nie wciśnięty żaden przycisk wywoła odczyt klucza danych: 1111_1111.
W odróżnieniu od innych układów tej rodziny TM1637 posiada mechanizm sterowany zboczem ujemnym, ze względu na możliwą pracę przy silnych zakłóceniach.

Wyświetlacz i tryb wyświetlania, rejestr adresów.

Dane przesłane z zewnętrznego urządzenia za pośrednictwem interfejsu szeregowego przechowywane są w rejestrze. Rejestr wyświetlaczy TM1637 posiada adresy w zakresie 00H-05H, i pomieści 6 bajtów, które odpowiedzialne są za wyświetlanie zawartości segmentów (wyprowadzenia SEG) poszczególnych wyświetlaczy. Zapis powinien odbywać się zgodnie z adresem wyświetlania od niskiego do wysokiego.

Opis interfejsu.

Przesyłanie danych interfejsem dwuprzewodowym z µC powinno nastąpić gdy na linii zegarowej (pin  CLK) występuje stan niski. Podczas gdy linia CLK ustawiona jest w stan wysoki na pinie DIO nie może nastąpić zmiana stanu logicznego. Jeśli transmisja danych przebiegła poprawnie układ generuje sygnał ACK (po zboczu opadającym 8 taktu zegara) na pinie DIO (stan niski) dla potwierdzenia transmisji. Wysłanie sygnału na lini DIO nastąpi to po zakończeniu dziewiątego taktu zegara.

Instrukcja procesu transmisji danych (the key data read timing).

TM1637 key read sequence
Po wygenerowaniu sygnału ACK (Low) układ automatycznie przechodzi w stan down.
Command: read button commands; S0, S1, S2, K1, K2 constituting the key information encoding, S0, S1, S2 coding for the SG, K1, K2 to K1 and K2 key codes, first reading low, after reading high.

Tryb zapisu danych do SRAM z automatyczną inkrementacją adresu (mode 1).
TM1638 write sequence auto increment mode

Command1: Set data
Command2: Set Address
Data1 ~ N: Transfer Display Data
Command3: Control Display

Tryb zapisu danych do SRAM dla określonego adresu wyświetlacza (fixed address mode).
TM1639 write sequence fixed address

Command1: Set data
Command2: Set Address
Data1 ~ N: Transfer Display Data
Command3: Control Display

Instrukcje, i ich rodzaje

TM1640 Instruction descriptionOdebrana instrukcja służy do ustawienia trybu wyświetlacza, i statusu sterownika LED. Instrukcja ta musi być przesłana jako pierwszy bajt na pinie DIO, po zboczu opadającym na linii CLK.  Po zdekodowaniu  najstarszych bitów B7 i B6 otrzymamy rozkazy dla kontrolera. Także jak widać w tabeli w zależności od ich zawartości dalsze dane będą różnie interpretowane. Jeśli polecenie STOP zostanie wysłane w trakcie przesyłania instrukcji lub podczas przekazywania danych, komunikacja szeregowa zostanie ponownie zainicjowana. Skutkuje to nieprawidłową instrukcją, lub błędnie przesyłanymi danymi (instrukcja lub bajt danych, odebrane przed transmisją STOP, pozostają aktywne).

TM1637 data instruction setPowyżej data instruction set, między innymi służy do określenia czy dane mają być zapisywane czy odczytywane. Dozwolone wartości B1 i B0 to 01 lub 11. Poniżej address instruction setting. Polecenie to służy do ustawienia adresu rejestru wyświetlacza. Jeśli adres jest ustawiany na 0C6H lub wyższej, dane są ignorowane, dopóki podany adres jest aktywny. Po włączeniu zasilania, adres domyślnie ustawiony jest na 00H.TM1637 address instruction setInstrukcje typu display control – do regulacji intensywności świecenia oraz wyłączenia całego wyświetlacza. Bez tego rozkazu niemożliwe jest wyświetlanie jakichkolwiek danych na polach odczytowych. Zakres regulacji przedstawia tabela niżej.TM1637 display control

Porównanie układów

Rodzina tych układów jest bardzo ciekawą propozycją prezentacji danych na wielosegmentowych wyświetlaczach LED i zadawania nastaw wieloma przyciskami jednocześnie. Te nie małe możliwości dostępne są dla µC z wykorzystaniem jedynie dwóch lub trzech linii sygnałowych, co jest znakomitym wynikiem i nie lada gratką  🙂 przy konstruowaniu swojego urządzenia. A wszystko zawdzięczamy firmie Titan Micro Electronics. Szczegółowe informacje o tej rodzinie kontrolerów i innych produktach można przeglądać na witrynie producenta. Czasem są problemy z jej dostępnością. 😯

Małe porównanie:

oznaczenie układutryb wyświetlaczamatryca klawiaturyregulacja jasnościinterfejs szeregowywbudowany układ power-on resetobudowa układuproces technologicznywbudowany oscylator RC
TM16307 seg x 5
lub
8seg x 4
7 x 1 bit8 stopniowaCLK
STB
DIO
takDIP18CMOS450KHz + 5%5V±10%
TM16357 seg x 47 x 1 bit8 stopniowaCLK
DIO
takDIP16
SOP16
CMOS450KHz + 5%5V±10%
TM16368 seg x 42 x 8 bit8 stopniowaCLK
DIO
takDIP18CMOS450KHz + 5%5V±10%
TM16378 seg x 62 x 8 bit8 stopniowaCLK
DIO
takDIP20
SOP20
CMOS450KHz + 5%5V±10%
TM163810 seg x 88 x 3 bit8 stopniowaCLK
STB
DIO
takSOP28CMOS450KHz + 5%5V±10%
TM16398 seg x 84 x 2 bit8 stopniowaCLK
STB
DIO
takDIP24CMOS450KHz + 5%5V±10%
TM16167 seg x 4-8 stopniowaCLK
STB
DIN
takSOP16
DIP16
CMOS450KHz + 5%5V±10%
TM16185 seg x 7
lub
8 seg x4
5 x 1 bit8 stopniowaCLK
STB
DIO
takDIP18
SOP18
CMOS450KHz + 5%3V ~ 5V
TM16208 seg x 6-8 stopniowaCLK
STB
DIN
takSOP20CMOS450KHz + 5%5V±10%
TM1620B6 seg x 7
lub
9 seg x 4
6 x 1 bit8 stopniowaCLK
STB
DIO
takSOP20CMOS450KHz + 5%5V±10%
TM162310 seg x 7
lub
14 seg x 4
10 x 3 bit8 stopniowaCLK
STB
DIN
DOUT
takSOP32CMOStak3 ~ 6V
TM162411 seg x 7
lub
14 seg x 4
-8 stopniowaCLK
STB
DIN
DOUT
takSOP24CMOS450KHz + 5%5V±10%
TM1626A11 seg x 7
lub
14 seg x 4
10 x 1 bit8 stopniowaCLK
STB
DIO
takSOP32CMOS450KHz + 5%5V±10%
TM1626B11 seg x 7
lub
14 seg x 4
10 x 3 bit8 stopniowaCLK
STB
DIO
takQFP44CMOS450KHz + 5%5V±10%
TM162710 seg x 7
lub
13 seg x 4
10 x 2 bit8 stopniowaCLK
STB
DIO
(KEYINT)
takSOP28CMOS450KHz + 5%5V±10%
TM16408 seg x 16-8 stopniowaSCLK
DIN
takSOP28CMOStak5V±10%
TM164111 seg x 7
lub
14 seg x 4
10 x 3 bit8 stopniowaCLK
STB
DIO
takSOP32CMOS450KHz + 5%5V±10%
TM16508 seg x4
lub
7 x 4
7 x 4 bit8 stopniowaCLK
DIO
takDIP16
SOP16
CMOStak2.8V-5.5V
TM166710 seg x 7
lub
13 seg x 4
10 x 2 bit8 stopniowaCLK
STB
DIO
takSOP28CMOS450KHz + 5%3 - 5V
TM162916 seg x 88 x 4 bit8 stopniowaCLK
STB
DIN
DOUT
takQFP44CMOStak5V±10%

Poszczególne typy kontrolerów mają analogiczną funkcjonalność, z różną ilością sterowanych wyświetlaczy i liczbą segmentów, oraz odmienną ilością obsługiwanych przycisków. Zasadnicza różnica między nimi polega na odmiennym sterowaniu, wybrane obsługiwane są magistralą dwu, 3 i więcej  przewodową. Nieliczne mają rozszerzoną funkcjonalność o np. szybki PWM i wyjście przerwania klawiatury, oraz większy zakres zasilania.

Przykład ciekawego zastosowania jednego z układów. Grafika pochodzi z witryny sklepu internetowego.

battery displayNa temat kodu w Bascom AVR

Teraz przedstawię jak sobie poradzić z wybranym modelem kontrolera (TM1637), który zastosowano w module z wyświetlaczem SM410364EF (czerwony intensywny) w środowisku Bascom AVR. W jednej z notek zamieszczono kod w języku C więc był znacznym ułatwieniem, dla oprogramowania transmisji. Niestety wszystkie noty katalogowe są w rodzimym języku producenta – dodatkowo występuje tam pismo „obrazkowe”, co jest bardzo uciążliwe i czasochłonne w rozgryzaniu. Dlatego też, zdecydowałem się na tak obszerną formę opisu tego układu scalonego.
Mój moduł podczas pracy wygląda następująco:

test modułu z TM1637 4 - Digit Display CATALEX

test modułu z TM1637 4 – Digit Display
CATALEX

Aplikacja zawiera wszystkie niezbędne elementy w postaci kondensatorów i oporników wyszczególnionych w notce katalogowej. Więc układ pracuje bezproblemowo. Moją uwagę zwrócił przydźwięk przy załączonych (pracujących) wyświetlaczach, który ujawnił się w module wzmacniacza małej mocy – był on wetknięty w tą samą płytkę stykową podczas rozgryzania modułu wyświetlacza. W zależności od jasności świecenia przydźwięk słyszany w głośniczkach zmieniał modulację …

Ale do rzeczy 😉 kod podzieliłem na dwa pliki by lepiej mi się do niego  zaglądało podczas testów. Nie jest on jakoś szczególnie zoptymalizowany, raczej stanowi działający brudnopis, i na chwilę obecną nie testowałem jeszcze obsługi przycisków. Dodatkowo na myśli mam jeszcze jeden szwindel … pewno go zdradzę … kiedyś ;-p jak przetestuję. Bo kład nie jest zgodny w komunikacji z magistralą TWI, ale …. 😆

i dodatek, w postaci pliku INC.

Oba pliki do kompilacji należy umieścić w tym samym katalogu. Część podprogramów pozostawioną w pliku głównym można zmienić na procedury i łącznie z deklaracjami przegonić do pliku dodatkowego 😉

Wyświetlacz pracuje idealnie, nie widać żadnego mrugania „przemiatania” czy zmiany intensywności świecenia wybranych segmentów przy przełączaniu wyświetlanej treści. Z łatwością wyświetla się „byle co” w postaci dowolnych znaków, i równie łatwo steruje się intensywnością świecenia. Kontroler bez problemu realizuje szybkie animacje i zmiany jasności świecenia segmentów.
Podglądnięta komunikacja podczas zapisu danych wygląda następująco: przebiegi podczas pracy układu TM1637

Wynik działania kodu testowego można obserwować na filmie:


Zastosowany wyświetlacz LED jest na tyle egzotyczny, że do chwili obecnej nie udało mi się odnaleźć do niego (dokładnie tego typu) dokumentacji …

Dziękuję Wojtkowi za udostępnienie modułu do rozgryzannia!

A.D. 2015-06-16 Tak się składa, że potestowałem odczyt przycisków, wszystko działa nieźle 🙂 odczyt trzeba oprogramoać tak jak odczyt pojedynczego przycisku podłączonego do pina μC. Krótko mówiąc w chwili naduszenia guzika musi nastąpić odczyt. Dlatego trzeba by dokonywać sekwencyjnego odczytu rejestru co np 50ms. Poniżej przykładowa funkcja do odczytu rejestru z wartościami matrycy klawiatury.

Trzeba pamiętać o jej prawidłowej deklaracji.

Spróbowałem też komunikacji standardowymi poleceniami do obsługi magistrali TWI. Niestety bez spodziewanego rezultatu. Wyświetlacz albo nie działał, albo przy cyklicznym wysyłaniu identycznych wartości wyświetlała się dynamicznie zmieniająca się „mozaika”, zamiast przesłanych cyfr. Jakoś nie chce mi się uruchamiać na „siłę” tej komunikacji … zakładam że być może było by to możliwe. Dla dociekliwych kawałek kodu z użytymi poleceniami.

 

A.D. 2015-06-20  Film przedstawiający pobór prądu przez moduł z wyświetlaczem w trakcie pracy.

Pod koniec prezentacji aktywne są wszystkie segmenty wyświetlacza, najpierw nastawniona jest maksymalna jasność a następnie minimalna. Zasilacz nie był w stanie zmierzyć prądu pobieranego przy minimalnej jasności. Więc można wnioskować, że zapotrzebowanie na energie było mniejsze niż 1mA.

Pliki udostępnionego kodu do pobrania TM1637_AVR.bas_.zip (293 pobrania )

Notki katalogowe


nota katalogowa kontrolera  TM1637.pdf (3500 pobrań )
nota katalogowa kontrolera TM1637_v12.pdf (5421 pobrań )

Otagowano , , , , , , , .Dodaj do zakładek Link.

7 odpowiedzi na „TM1637 w module z wyświetlaczem LED 7seg, 4 cyfry

  1. Paul Duivestein komentarz:

    Dzięki za kod.
    Pomogło mi to, w końcu wyświetlacz TM1639 działał poprawnie.
    Mam nadzieję, że to zrozumiesz (użyłem google translate)
    :-))
    Pozdrawiam !!

    • kaktus komentarz:

      It’s quite good for reading ;-p Everything is bright and understandable Show your project off, please.
      Trochę poprawiłem 😉

  2. DjDaniel11 komentarz:

    Hej. Mam dość dziwny błąd podczas kompilacji Twojego kodu. Niby polecenia call zawierają tylko jeden parametr, a jednak wywala błąd. Nawet rozbicie (pierw lookup, a potem call) nic nie daje. Dalej ten sam błąd.

    Error : Incorrect number of parameters. The numer of parameters must be [ 1] , in File : TM1637_core.inc

    • DjDaniel11 komentarz:

      Nie sprawdzałem w praktyce, ale dopiero rozbicie funkcji, wykorzystując zmienną lokalną tmp umożliwiło skompilowanie programu.
      Tmp = Lookup(poz1 , Cyfry )
      Call Tm1637_wrbyte(tmp)

    • kaktus komentarz:

      Najczęstsze problemy tego typu są spowodowane różnymi wersjami oprogramowania IDE, a co z tego wynika, inną wersją kompilatora. Przyczynić się do takiego rezultatu również mogą błędy w kodzie źródłowym związane z edytowaniem lub/i przepisywaniem.
      Witryna jest tak skonstruowana że kody udostępnione można dogodnie kopiować i w niektórych wypadkach pobrać gotowe DZIAŁAJĄCE pliki źródłowe.
      Na tą chwilę nic innego mi nie przychodzi do głowy.

  3. Artur komentarz:

    Te wyświetlacze nadają się tylko do stacjonarnych zastosowań. Wedle producenta pobór prądu to ćwierć ampera. W praktyce dochodzi do pół ampera. Niektórzy podają, że pobiera im nawet 800mA! Tymczasem dowolny wyświetlacz LED z własnym sterownikiem nie przekroczy 50mA przy maksymalnej jasności. A jeśli zastosować dynamiczne wyświetlanie tak jak w tym module to 20mA.
    Ode mnie szacun za Bascoma, rozgryzanie wyświetlacza przy tym to pikuś 🙂

    • kaktus komentarz:

      Na mojej prezentacji wideo w tle jest zasilacz i wskazanie w czasie rzeczywistym poboru mocy. Nie wiem czy widziałeś …
      dzięki za ciekawy wpis.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

osiemnaście + 8 =

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.