Herzlich Willkommen im einzigen (deutschsprachigem) Picaxe-Forum.

Der Ursprung dieses Forum reicht bis in das Jahr 2008 zurück


4-stellige 7-Segment mit der Picaxe

#1 von BoomBoomMagic , 02.03.2019 14:39

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.

1
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


*** Die Picaxe muß nicht alles können , es reicht wenn sie sagt wo's lang geht ***

 
BoomBoomMagic
Beiträge: 528
Registriert am: 24.01.2019

zuletzt bearbeitet 02.03.2019 | Top

RE: 4-stellige 7-Segment mit der Picaxe

#2 von harry02 , 07.03.2019 20:45

einfach genial, wie Du das ganze programmiert hast. Bin schon seit Tagen dabei, mich in den Code einzulesen und stoße dabei datürlich als Anfänger an meine Grenzen.
Frage so nebenbei:
Kann man diese Module auch kaskadieren, sodaß z. B. auch eine 8-stellige Anzeige möglich ist?
Gruß Harry

harry02  
harry02
Beiträge: 36
Registriert am: 16.02.2019


RE: 4-stellige 7-Segment mit der Picaxe

#3 von BoomBoomMagic , 07.03.2019 22:44

Hallo harry ,

dieser Chip: TM1637 ist leider nicht ausgelegt um kaskadiert zu werden .
Wenn Du 8 Stk 7-Segment Module nutzen möchtest , würde ich den Chip: MAX7219 empfehlen.
Dessen Programmierung ist im Grunde genauso einfach.


*** Die Picaxe muß nicht alles können , es reicht wenn sie sagt wo's lang geht ***

 
BoomBoomMagic
Beiträge: 528
Registriert am: 24.01.2019


RE: 4-stellige 7-Segment mit der Picaxe

#4 von BoomBoomMagic , 07.03.2019 23:05

Also eigentlich ist das Ganze doch recht einfach ...

Der TM1637 benutzt andere Werte für die Zahlen von 0 - 9


0 = 63
1 = 6
2 = 91
3 = 79
4 = 102
5 = 109
6 = 125
7 = 7
8 = 127
9 = 111

Die einfaschste Methode schnell an diese Werte zu kommen ist es , diese vorher ins EEPROm zu speichern.
Und zwar genau an der Stelle , für die sie äquivalent für die "normalen" Zahlen stehen.
Also packen wir den Wert : 63 für die Zahl 0 , an die Position 0 im EEPROM.
Den Wert : 6 für die Zahl 1 , an die Position 1 im EEPROM.
Den Wert : 91 für die Zahl 2 , an die Position 2 im EEPROM.
usw.
usw.

In der Hauptschleife wird ja lediglich von 1000 bis 9999 gezählt.
D3 ermittelt wieviel tausender es aktuell gibt ...
D2 ermittelt wieviel hunderter es aktuell gibt ...
D1 ermittelt wieviel zehner es aktuell gibt ....
D0 ermittelt wieviel einer es aktuell gibt ....

Wenn's los geht , also bei der Zahl : 1000 wären das dann
D3 = 1
D2 = 0
D1 = 0
D0 = 0

Die Prozedur SDISPLAY schickt als erstes ein Kommando zum TM1637 das nach jedem gesendetem Wert
die Anzeige ein Modul weiter springen soll.
Dann folgt das Kommando , das ganz links begonnen werden soll.

Jetzt holen wir mittels dem Befehl : READ
an Hand der ermittelten Zahl das äquivalent an Wert aus dem EEPROM.
Senden nacheinander D3 ... D2 ... D1 .... D0

Die Prozeduren : Start , Stop , ACK sind spezielle Befehle des Protokolls: I²C die jedes I²C Gerät benötigt.

Nachdem also der äquivalente Wert aus dem EEPROm geholt wurde , wird dieser durch die Prozedur : I2CWbyte
an den TM1637 geschickt , wobei hier das ganze bitweise erfolgt.
mal so gaaaaaanz salopp gesagt : im "Morsecode"

Im Grunde muß die Hauptschleife lediglich die 4 Variablen . D3 , D2 , D1 , D0 "füttern" und am Ende mittels SDISPLAY
zur Anzeige gebracht werden.


*** Die Picaxe muß nicht alles können , es reicht wenn sie sagt wo's lang geht ***

 
BoomBoomMagic
Beiträge: 528
Registriert am: 24.01.2019

zuletzt bearbeitet 07.03.2019 | Top

   

Bin ich Eingang oder Ausgang - Die Let Dirs Frage
7-Segment mal anders - Teil II

Picaxe Editor 5.5.5 Download
Update auf Picaxe Editor 5.5.6 Download
Picaxe Editor 6.x.x.x Download
Manual1.pdf        -      Grundwissen Download
Manual2.pdf        -      Befehle Download
Manual3.pdf        -      Beispiele Download


Press [Backspace] for back to Menu


Counter
Xobor Forum Software ©Xobor.de | Forum erstellen
Datenschutz