Skip to content

Commit db114ac

Browse files
committed
Add code to Encoder.QEP from PyBBIO.RotaryEncoder
Add code to use as a basis for our QEP module from: graycatlabs/PyBBIO/bbio/libraries/RotaryEncoder/rotary_encoder.py
1 parent 341ceb7 commit db114ac

File tree

1 file changed

+164
-16
lines changed

1 file changed

+164
-16
lines changed

Adafruit_BBIO/Encoder.py

Lines changed: 164 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@
44
# Adafruit_BBIO.Encoder.QEP Class
55
# ===========================================================================
66

7+
# refers to graycatlabs/PyBBIO/bbio/libraries/RotaryEncoder/rotary_encoder.py
8+
# /sys/devices/platform/ocp/48302000.epwmss/48302180.eqep/position
9+
# /sys/devices/platform/ocp/48304000.epwmss/48304180.eqep/position
10+
# /sys/devices/platform/ocp/48300000.epwmss/48300180.eqep/position
11+
12+
import os
13+
14+
15+
716
class QEP :
817

918
def __init__(self, channel=1, debug=False):
@@ -16,19 +25,158 @@ def errMsg(self):
1625

1726
# example method from Adafruit_I2C
1827
# TODO: delete this
19-
def write8(self, reg, value):
20-
"Writes an 8-bit value to the specified register/address"
21-
try:
22-
self.bus.write_byte_data(self.address, reg, value)
23-
if self.debug:
24-
print("Rotary: Wrote 0x%02X to register 0x%02X" % (value, reg))
25-
except IOError as err:
26-
return self.errMsg()
27-
28-
29-
if __name__ == '__main__':
30-
try:
31-
qep = Adafruit_BBIO.Encoder.QEP()
32-
print("Default QEP channel is accessible")
33-
except:
34-
print("Error accessing default Rotary bus")
28+
# def write8(self, reg, value):
29+
# "Writes an 8-bit value to the specified register/address"
30+
# try:
31+
# self.bus.write_byte_data(self.address, reg, value)
32+
# if self.debug:
33+
# print("Rotary: Wrote 0x%02X to register 0x%02X" % (value, reg))
34+
# except IOError as err:
35+
# return self.errMsg()
36+
#
37+
#
38+
#if __name__ == '__main__':
39+
# try:
40+
# qep = Adafruit_BBIO.Encoder.QEP()
41+
# print("Default QEP channel is accessible")
42+
# except:
43+
# print("Error accessing default Rotary bus")
44+
45+
46+
47+
class RotaryEncoder(object):
48+
OCP_PATH = "/sys/TEST/TODO/"
49+
_eqep_dirs = [
50+
'%s/48300000.epwmss/48300180.eqep' % OCP_PATH,
51+
'%s/48302000.epwmss/48302180.eqep' % OCP_PATH,
52+
'%s/48304000.epwmss/48304180.eqep' % OCP_PATH
53+
]
54+
EQEP0 = 0
55+
EQEP1 = 1
56+
EQEP2 = 2
57+
EQEP2b = 3
58+
59+
def __init__(self, eqep_num):
60+
'''
61+
RotaryEncoder(eqep_num)
62+
Creates an instance of the class RotaryEncoder.
63+
eqep_num determines which eQEP pins are set up.
64+
eqep_num can be: EQEP0, EQEP1, EQEP2 or EQEP2b based on which pins \
65+
the rotary encoder is connected to.
66+
'''
67+
assert 0 <= eqep_num <= 3 , "eqep_num must be between 0 and 3"
68+
if eqep_num == 3:
69+
overlay = "PyBBIO-eqep2b"
70+
eqep_num = 2
71+
else:
72+
overlay = 'PyBBIO-eqep%i' % eqep_num
73+
74+
pwmss_overlay = "PyBBIO-epwmss%i" % eqep_num
75+
#cape_manager.load(pwmss_overlay, auto_unload=False)
76+
delay(10)
77+
#cape_manager.load(overlay, auto_unload=False)
78+
delay(250) # Give driver time to load
79+
self.base_dir = self._eqep_dirs[eqep_num]
80+
self.enable()
81+
addToCleanup(self.disable)
82+
83+
def enable(self):
84+
'''
85+
enable()
86+
Turns the eQEP hardware ON
87+
'''
88+
enable_file = "%s/enabled" % self.base_dir
89+
#return sysfs.kernelFileIO(enable_file, '1')
90+
91+
def disable(self):
92+
'''
93+
disable()
94+
Turns the eQEP hardware OFF
95+
'''
96+
enable_file = "%s/enabled" % self.base_dir
97+
#return sysfs.kernelFileIO(enable_file, '0')
98+
99+
def setAbsolute(self):
100+
'''
101+
setAbsolute()
102+
Set mode as Absolute
103+
The position starts at zero and is incremented or
104+
decremented by the encoder's movement
105+
'''
106+
mode_file = "%s/mode" % self.base_dir
107+
#return sysfs.kernelFileIO(mode_file, '0')
108+
109+
def setRelative(self):
110+
'''
111+
setRelative()
112+
Set mode as Relative
113+
The position is reset when the unit timer overflows.
114+
'''
115+
mode_file = "%s/mode" % self.base_dir
116+
#return sysfs.kernelFileIO(mode_file, '1')
117+
118+
def getMode(self):
119+
'''
120+
getMode()
121+
Returns the mode the eQEP hardware is in.
122+
'''
123+
mode_file = "%s/mode" % self.base_dir
124+
#return sysfs.kernelFileIO(mode_file)
125+
126+
def getPosition(self):
127+
'''
128+
getPosition()
129+
Get the current position of the encoder.
130+
In absolute mode, this attribute represents the current position
131+
of the encoder.
132+
In relative mode, this attribute represents the position of the
133+
encoder at the last unit timer overflow.
134+
'''
135+
position_file = "%s/position" % self.base_dir
136+
#return sysfs.kernelFileIO(position_file)
137+
138+
def setFrequency(self,freq):
139+
'''
140+
setFrequency(freq)
141+
Set the frequency in Hz at which the driver reports new positions.
142+
'''
143+
period_file = "%s/period" % self.base_dir
144+
#return sysfs.kernelFileIO(period_file, str(1000000000/freq))
145+
146+
def setPosition(self,val):
147+
'''
148+
setPosition(value)
149+
Give a new value to the current position
150+
'''
151+
position_file = "%s/position" % self.base_dir
152+
#return sysfs.kernelFileIO(position_file, str(val))
153+
154+
def zero(self):
155+
'''
156+
zero()s
157+
Set the current position to 0
158+
'''
159+
return self.setPosition(0)
160+
161+
162+
#"""
163+
# encoder_test.py
164+
# Rekha Seethamraju
165+
# An example to demonstrate the use of the eQEP library
166+
# for PyBBIO.
167+
# This example program is in the public domain.
168+
#"""
169+
#from bbio import *
170+
#from bbio.libraries.RotaryEncoder import RotaryEncoder
171+
#
172+
#encoder = RotaryEncoder(RotaryEncoder.EQEP2b)
173+
#
174+
#def setup():
175+
# encoder.setAbsolute()
176+
# encoder.zero()
177+
#
178+
#def loop():
179+
# print "encoder position : "+encoder.getPosition()
180+
# delay(1000)
181+
#
182+
#run(setup, loop)

0 commit comments

Comments
 (0)