[][src]Crate tmledkey_hal_drv

This crate provides interface to work with Titanmec LED drives for 7 segment displays. Titanmec produce different types of MCUs that are using common 2 pin or 3 pin serial like interfaces. The most popular models for DIY projects are TM1637 and TM1638. Besides display driver capabilities this MCUs are also provide key-scan functionality.

This driver utilize embedded_hal functionality, thus it could work on different kind of hardware via HAL.

This is low level API

Read data sheet first if you want to understand how to work with MCU. API provided here only wraps data transfer protocols. You still have to send and receive raw data as bytes. In order to understand meaning of this bytes you should have some knowledges.

Need code examples?

Just explore repository examples folder.

I just have no capacity to maintain actual code samples in every place.

Features

Some functionality of this library are splitted into features. I hope that it may help to reduce resulted firmware size.

  • cldkio - functions to work with 2 wire interfaces
  • clkdiostb - functions to work with 3 wire interfaces
  • keys - key scan support
  • fx - tiny effects api (depends on "galloc")
  • galloc - functionality that require to have global allocator in your application

You should look into Cargo.toml in source code to get better understanding how does this features combined together.

Handling delays

I've found out that handling delays is a very tricky for some hardware. Plus HAL implementation gives DelayXX and Timer traits thus it is not obvious what kind of trait should be preferred.

In order to simplify delay approach I decided that you have to implement delay logic on your side and wrap it in lambda. It is up to you what kind of delay approach you will use. Just keep in mind that delays have to be precise.

Some functions accepts delay value as input parameter. It is kinda weird, but it would allow you to reduce bus communication delays if your circuit configuration allows you to. In other cases you can use pre defined delay values.

Modules

utils

Helpful functions to work with MCUs raw data.

Enums

TmError

Describes possible error mostly related to low level interaction with MCU. At least it should give you an insight about what goes wrong.

Constants

BUS_DELAY_US

Universal delay for TM serial protocol. This value should fit all configurations, but you should prefer to use values that fits exact MCU chip version.

CHAR_0
CHAR_1
CHAR_2
CHAR_3
CHAR_4
CHAR_5
CHAR_6
CHAR_7
CHAR_8
CHAR_9
CHAR_A
CHAR_BRACKET_LEFT
CHAR_BRACKET_RIGHT
CHAR_C
CHAR_CYR_B
CHAR_CYR_E
CHAR_DEGREE
CHAR_E
CHAR_F
CHAR_G
CHAR_H
CHAR_I
CHAR_J
CHAR_L
CHAR_MINUS
CHAR_N
CHAR_O
CHAR_P
CHAR_R
CHAR_S
CHAR_U
CHAR_UNDERSCORE
CHAR_a
CHAR_b
CHAR_c
CHAR_d
CHAR_e
CHAR_h
CHAR_i
CHAR_l
CHAR_n
CHAR_o
CHAR_q
CHAR_r
CHAR_t
CHAR_u
CHAR_y
COM_ADDRESS

Address instruction set

COM_DATA

Data control instruction set

COM_DATA_ADDRESS_ADD

Address adding mode (write to display)

COM_DATA_ADDRESS_FIXED

Data fix address mode (write to display)

COM_DATA_READ

Read key scan data

COM_DISPLAY

Display control instruction set

COM_DISPLAY_OFF
COM_DISPLAY_ON

Display ON max brightness. Can be combined with masked bytes to adjust brightness level

DIGITS

List of digit characters where values correlates with array index 0-9.

DISPLAY_BRIGHTNESS_MASK

Display brightness mask

SEG_1

Segment A - top

SEG_2

Segment B - top right

SEG_3

Segment C - bottom right

SEG_4

Segment D - bottom

SEG_5

Segment E - bottom left

SEG_6

Segment F - top left

SEG_7

Segment G - middle

SEG_8

Segment DP (eight) - dot or colon

SEG_9

Used with 3 wire interface for second byte

SEG_10

Used with 3 wire interface for second byte

SEG_11

Used with 3 wire interface for second byte

SEG_12

Used with 3 wire interface for second byte

TM1637_RESPONSE_SIZE

Number of bytes that can be read from from TM1637 response.

TM1637_MAX_SEGMENTS

Maximum number of display segments supported by this MCU.

TM1637_BUS_DELAY_US

Proven working delay for TM1637, it can be lower depending of your pull-up resistor characteristics.

TM1638_RESPONSE_SIZE

Number of bytes that can be read from from TM1638 response.

TM1638_MAX_SEGMENTS

Maximum number of display segments supported by this MCU.

TM1638_BUS_DELAY_US

Proven working delay for TM1638

Functions

tm_send_bytes_2wire

Send one or several bytes to MCU via 2 wire interface (DIO,CLK).

tm_send_bytes_3wire

Send bytes using 3 wire interface (DIO,CLK,STB).