Ich habe ja schon die ein oder andere Möglichkeit hier aufgezeigt , wie man eine 7 Segmentanzeige mit der Picaxe benutzen kann.
Heute stelle ich mal das Modul : TM1637 vor , mit dem es unheimlich einfach ist , eine 4-stellige 7-Segmentanzeige anzusteuern.
Diese Module gibt es in verschiedenen Anzeigefarben ( weiss , blau , gelb , grün , rot ) und bei Ebay von 1€ (aus China) bis 5€ aus Deutschland.
Benötigt werden lediglich 4 Anschlüsse : 5V+ , GND , Clock , Data
Die Module arbeiten auf I²C Basis.
Da aber die Picaxe das nicht wirklich kann , ist das auch nicht weiter schlimm , das werden wir dann einfach software seitig erledigen.
Die Einsatzmöglichkeiten sind vielfältig
- Uhrenmodul
- Temperaturenanzeige
- Spannungsanzeige
ect.
Ich habe mal einen Beispielcode geschreiben , der lediglich eine Zähler von 1000 bis 9999 hoch zählt.
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#picaxe 08m2
;( 0 1 2 3 4 5 6 7 8 9 A b C d E F Strich leer)
DATA 0,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,$77,$7c,$39,$5e,$79,$71, $40, $00)
symbol dio = c.1
symbol clk = c.2
symbol D3 = b2 ' Variable für Ziffer 1 / 1.Segment
symbol D2 = b3 ' Variable für Ziffer 2 / 2.Segment
symbol D1 = b4 ' Variable für Ziffer 3 / 3.Segment
symbol D0 = b5 ' Variable für Ziffer 4 / 4.Segment
symbol Zaehler = w10
symbol Zaehler2 = w11
symbol Dummy = w12
gosub brightness
do
'Beispiel :
' Zähler zählt von 1000 bis 9999 hoch ....
for w10 = 1000 to 9999
w11=w10
' Tauender ( 1. Stelle)
d3=w11/1000
dummy=d3*1000
w11=w11-dummy
'------------
' Hunderter ( 2. Stelle)
d2=w11/100
dummy=d2*100
w11=w11-dummy
'------------
' Zehner ( 3. Stelle)
d1=w11/10
dummy=d1*10
'------------
' Einer ( 4. Stelle)
d0=w11-dummy
gosub SDISPLAY
pause 1
next w10
loop
end
;===========================================================================
SDISPLAY:
;aktivieren des autom. weiterspringen zum nächsten Segment
call i2CStart
b0 = $40
call i2CWrByte
call i2CStop
;springe zum ersten (ganz links ) Segement
call i2CStart
b0 = $C0
call i2CWrByte
;erste Wert
read D3,b0
call i2CWrByte
;zweite Wert
read D2,b0
call i2CWrByte
;dritte Wert
read D1,b0
call i2CWrByte
;vierte Wert
read D0,b0
call i2CWrByte
call i2CStop
return
i2CStart:
high clk
high dio
low dio
low clk
return
i2CStop:
low clk
low dio
high clk
high dio
return
;
i2CWrByte: ;outpinC.1 = dio
outpinc.1 = bit0:pulsout clk, 1
outpinc.1 = bit1:pulsout clk, 1
outpinc.1 = bit2:pulsout clk, 1
outpinc.1 = bit3:pulsout clk, 1
outpinc.1 = bit4:pulsout clk, 1
outpinc.1 = bit5:pulsout clk, 1
outpinc.1 = bit6:pulsout clk, 1
outpinc.1 = bit7:pulsout clk, 1
pulsout clk, 1
return
;Setze die Helligkeit ($88 = AN, $88 bis $8F = Helligkeitsstufen)
brightness:
call i2cstart
b0 = 138
call i2CWrByte
call i2CStop
return
Hierzu gibt es natürlich auch ein Video .....
Man muß sich eigentlich nicht sooo genau damit beschäftigen wie das Teil jetzt im Einzelnen genau funktioniert.
Wichtig ist , man benötigt für eine 4-stellige Zahl / Wert eben 4 einzelne Variablen .
Löst die 4-Stellige Zahl in ihrer Wertigkeit auf und weist sie den passenden Variablen zu.
Die Prozeduren sind so "eingestellt" das immer 4 Werte ( D3 , D2 , D1 , D0 ) erwartet werden und von links nach rechts gesendet wird.
Jetzt haben diese einzelnen Segmente ja noch unten rechts Punkte.
Das ist von Vorteil , wenn man z.B. eine Spannung anzeigen lassen will ( z.B.: 3,59)
Möchte man diesen Punkt aktivieren , addiert man zu den jeweilgen Wert ( D3 , D2 , D1 , D0 ) den Wert : 128
(Im Prinzip wird hiermit das 7.Bit auf 1 gesetzt )
Würde jetzt in diesem Beispiel so aussehen das man in der Prozedur :SDISPLAY folgende Zeilen ergänzt :
;zweite Wert
read D2,b0
D2 = D2 +128
call i2CWrByte