Heute habe ich mal den Spaß gemacht und einen Servo mittel Drehencoder laufen lassen.
Zusätzlich wird wie bekannt das Ganze auf einem alphanumerischen Display (16x2) angezeigt und
über PinC.4+5 die Drehrichtung als Impuls detektiert.
Wen's interessiert , hier der einfache Code dazu :
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
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
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 40
$framesize = 40
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3
Config Lcd = 16 * 2
cls
cursor off
Config Servos = 1 , Servo1 = Portb.1 , Reload = 10
Config Portc.1 = Input
Config Portc.2 = Input
config portb = output
Config Portc.4 = output
Config Portc.5 = output
dim Merken as byte
Dim Result As Byte
merken=30
Portc.1 = 1
Portc.2 = 1
locate 1 , 1
lcd "aktueller Wert :"
locate 2 , 1
lcd Merken ; " "
Enable Interrupts
Do
Result = Encoder(pinc.1 , Pinc.2 , Links , Rechts , 0)
Loop
End
Links:
pulseout portc , 5 , 1000
decr merken
if merken<30 then
merken=30
endif
Servo(1) =merken
locate 2 , 1
lcd Merken ; " "
Return
Rechts:
pulseout portc , 4 , 1000
incr merken
if merken>150 then
merken=150
endif
Servo(1) =merken
locate 2 , 1
lcd Merken ; " "
Return
Und wozu jetzt das Ganze bitte schön ...?
öhm .... weil er's kann ?!