Einen sogenannten Drehencoder oder Drehimpulsgeber mit einer Picaxe auszuwerten ist leider garnicht so einfach. :(
"Normale" Mikrocontroller haben meistens bereits schon fertige Routinen enthalten , während bei einer Picaxe man das leider selber machen muss.
Drehencoder gibt es in viele Variationen :
Sie arbeiten in der Regel alle nach dem selben Prinzip:
2 Pins ( meist A + B ) werden mit einem Pullup-Widerstand auf High gesetzt.
Während des Drehens verbindet der Drehencoder nun abwechselnd Pin A oder Pin B mit Pin C = Masse.
Ab und an wird sogar noch ein Kondensator von 100nF parallel zum Pullup gesetzt.
Da ja nun beim Drehen unheimlich schnelle Impulse entstehen , ist die Picaxe leider nicht in der Lage ohne Verluste den Encoder auswerten zu können und auch noch eine Anzeige darzustellen.
Es ist aber möglich nach dem Auswerten 2 Ausgänge passend zur Drehrichtung mit LED´s zu versehen , die einem die Richtung und Anzahl der Impulse darstellen.
Dazu hier der Schaltplan :
Der zugehörige Code ist am Anfang vielleicht nicht so ganz leicht zu verstehen , aber evtl. kommt der Ein oder Andere hinter das Prinzip :
Quellcode
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
setfreq m8
let dirs=%00000111
symbol Impulsgeber_rauf = pinc.3
symbol Impulsgeber_runter = pinc.4
symbol Impulse = b0
symbol Impulse_merken = b1
bit0 = Impulsgeber_rauf
bit1 = Impulsgeber_runter
impulse_merken = impulse
do
bit0 = Impulsgeber_rauf
bit1 = Impulsgeber_runter
' rauf zählen - rechts rum
if impulse = 2 and impulse_merken = 0 then
pulsout c.1,200
impulse_merken = 3
do
bit0 = Impulsgeber_rauf
bit1 = Impulsgeber_runter
loop until impulse = 3
endif
if impulse = 1 and impulse_merken = 3 then
pulsout c.1,200
impulse_merken = 0
do
bit0 = Impulsgeber_rauf
bit1 = Impulsgeber_runter
loop until impulse = 0
endif
'-----------------------------------
' runter zählen - links rum
if impulse = 1 and impulse_merken = 0 then
pulsout c.2,200
impulse_merken = 3
do
bit0 = Impulsgeber_rauf
bit1 = Impulsgeber_runter
loop until impulse = 3
endif
if impulse = 2 and impulse_merken = 3 then
pulsout c.2,200
impulse_merken = 0
do
bit0 = Impulsgeber_rauf
bit1 = Impulsgeber_runter
loop until impulse = 0
endif
loop