ArduinoAlphanumeric

Annotated README.txt

2:32f0a9119576
2016-09-28 Paul Boddie Added 74HC157 pinout.
paul@0 1
From the HT16K33 datasheet [1] and EF4058 schematic [2].
paul@0 2
paul@0 3
Addressing
paul@1 4
==========
paul@0 5
paul@0 6
                            RAM addresses
paul@0 7
                            ROW0..7     ROW8..15
paul@0 8
COM0 -> digit 1, tube 1     00          01
paul@0 9
COM1 -> digit 2, tube 1     02          03
paul@0 10
COM2 -> digit 1, tube 2     04          05
paul@0 11
COM3 -> digit 2, tube 2     06          07
paul@0 12
paul@0 13
ROW0/A2  |-> connected to both tubes
paul@0 14
ROW1/A1  |
paul@0 15
ROW2/A0  |
paul@0 16
ROW3..14 |
paul@0 17
paul@0 18
Tube and Digit Layout
paul@1 19
=====================
paul@0 20
paul@0 21
By observing the behaviour, the tubes and digits have the following layout:
paul@0 22
paul@0 23
tubes
paul@0 24
2       1
paul@0 25
digits
paul@0 26
1   2   1   2
paul@0 27
paul@0 28
Communications
paul@1 29
==============
paul@0 30
paul@0 31
I2C commands:
paul@0 32
paul@0 33
       D15 D14 D13 D12 D11 D10  D9  D8
paul@0 34
setup    0   0   1   0   X   X   X   S  S=0 => standby; S=1 => operational
paul@0 35
ROW/INT  1   0   1   0   X   X   A   I  I=0 => ROW driver output;
paul@0 36
                                        I=1 => INT output
paul@0 37
                                               A=0 => active low
paul@0 38
                                               A=1 => active high
paul@0 39
display  1   0   0   0   X  B1  B0   D  D=0 => display off; D=1 => display on
paul@0 40
                                        B1..B0 = 0 => blinking off
paul@0 41
                                        B1..B0 = 2 - log2 (blinking frequency)
paul@0 42
                                                 (1 => 2Hz; 2 => 1Hz; 3 => 0.5Hz)
paul@0 43
address  0   0   0   0  A3  A2  A1  A0  A3..A0 => set row address pointer
paul@0 44
dimming  1   1   1   0  P3  P2  P1  P0  P3..P0 = 16 * pulse_width - 1
paul@0 45
                                                 (0 => 1/16; 15 => 1)
paul@0 46
paul@0 47
I2C data format:
paul@0 48
paul@0 49
        D7  D6  D5  D4  D3  D2  D1  D0
paul@0 50
ROW      7   6   5   4   3   2   1   0
paul@0 51
ROW     15  14  13  12  11  10   9   8
paul@0 52
paul@0 53
When converting values to the I2C format, the most significant byte is sent
paul@0 54
after the least significant byte. For example, the following hexadecimal
paul@0 55
representation is converted as follows:
paul@0 56
paul@0 57
   8000400020001000
paul@0 58
-> 80 00 40 00 20 00 10 00 (bytes in MSB, LSB order)
paul@0 59
-> 00 80 00 40 00 20 00 10 (bytes in LSB, MSB order)
paul@0 60
paul@0 61
LED Digit Layout
paul@1 62
================
paul@0 63
paul@0 64
The digits each have the following layout:
paul@0 65
paul@0 66
LED     ROWx    data value  remark
paul@0 67
paul@0 68
---     ROW0    1           upper horizontal
paul@0 69
paul@0 70
paul@0 71
paul@0 72
  |     ROW1    2           upper-right vertical
paul@0 73
paul@0 74
paul@0 75
paul@0 76
        ROW2    4           lower-right vertical
paul@0 77
paul@0 78
  |
paul@0 79
paul@0 80
        ROW3    8           lower horizontal
paul@0 81
paul@0 82
---
paul@0 83
paul@0 84
        ROW4    10          lower-left vertical
paul@0 85
paul@0 86
|
paul@0 87
paul@0 88
|       ROW5    20          upper-left vertical
paul@0 89
paul@0 90
paul@0 91
paul@0 92
        ROW6    40          left-middle horizontal
paul@0 93
-
paul@0 94
paul@0 95
paul@0 96
        ROW7    80          right-middle horizontal
paul@0 97
  -
paul@0 98
paul@0 99
paul@0 100
\       ROW8    100         top-left diagonal
paul@0 101
paul@0 102
paul@0 103
paul@0 104
 |      ROW9    200         upper-middle vertical
paul@0 105
paul@0 106
paul@0 107
paul@0 108
  /     ROW10   400         top-right diagonal
paul@0 109
paul@0 110
paul@0 111
paul@0 112
        ROW11   800         lower-right diagonal
paul@0 113
paul@0 114
  \
paul@0 115
paul@0 116
        ROW12   1000        lower-middle vertical
paul@0 117
paul@0 118
 |
paul@0 119
paul@0 120
        ROW13   2000        lower-left diagonal
paul@0 121
paul@0 122
/
paul@0 123
paul@0 124
        ROW14   4000        decimal point
paul@0 125
paul@0 126
   .
paul@0 127
paul@0 128
        ROW15   8000        (not connected)
paul@0 129
paul@0 130
paul@0 131
paul@1 132
See the shapes.h file for convenient definitions of the different elements.
paul@1 133
paul@1 134
Interfacing
paul@1 135
===========
paul@1 136
paul@1 137
It could be useful to interface the display with circuits and to have an
paul@1 138
Arduino sample inputs and update the display to reflect the state of those
paul@1 139
inputs. In order to represent 16 different signals with 4 hexadecimal digits,
paul@1 140
the following circuit could be employed.
paul@1 141
paul@1 142
Inputs  74HC157 74HC157 Arduino Display
paul@1 143
------  ------- ------- ------- -------
paul@1 144
                        A4/SDA  SDA
paul@1 145
                        A5/SCL  SCL
paul@1 146
                        5V      VCC
paul@1 147
        E#      E#      GND     GND
paul@1 148
        S       S       3
paul@1 149
D0      1I0
paul@1 150
D1      2I0
paul@1 151
D2      3I0
paul@1 152
D3      4I0
paul@1 153
D4              1I0
paul@1 154
D5              2I0
paul@1 155
D6              3I0
paul@1 156
D7              4I0
paul@1 157
D8      1I1
paul@1 158
D9      2I1
paul@1 159
D10     3I1
paul@1 160
D11     4I1
paul@1 161
D12             1I1
paul@1 162
D13             2I1
paul@1 163
D14             3I1
paul@1 164
D15             4I1
paul@1 165
        1Y              4
paul@1 166
        2Y              5
paul@1 167
        3Y              6
paul@1 168
        4Y              7
paul@1 169
                1Y      8
paul@1 170
                2Y      9
paul@1 171
                3Y      10
paul@1 172
                4Y      11
paul@1 173
paul@1 174
By switching between the two multiplexers, the data signals could be sampled
paul@1 175
by the Arduino and appropriate representation values written to the display
paul@1 176
module memory.
paul@1 177
paul@2 178
74HC157 Pinout
paul@2 179
--------------
paul@2 180
paul@2 181
S   1  \/  16 VCC
paul@2 182
1I0 2      15 E#
paul@2 183
1I1 3      14 4I0
paul@2 184
1Y  4      13 4I1
paul@2 185
2I0 5      12 4Y
paul@2 186
2I1 6      11 3I0
paul@2 187
2Y  7      10 3I1
paul@2 188
GND 8       9 3Y
paul@2 189
paul@0 190
References
paul@1 191
==========
paul@0 192
paul@0 193
[1] EF4058-OCTOPUS_Alphanumeric_V1.0_SCH.pdf
paul@0 194
[2] EF4058-ht16K33v110.pdf