Hello, Okay.
So, I am using smbus2 in python3 for the communication of the i2c interface on the ServoCape (PCA9685). So: from smbus2 import SMBus from ServoLib import Pca9685 from time import sleep i2c2 = SMBus("/dev/i2c-2") x = Pca9685(i2c2, 0b111111) So, everything under this first section of my python source should work as described: x.__init__ x.read_reg x.write_reg x.read_regs x.write_regs x.get_pwm x.set_pwm Is this correct? Seth On Tuesday, May 5, 2020 at 4:09:33 PM UTC-5, jonnymo wrote: > > If you provide a link to the source of this that would help. > > But, basically in your own Python code you would first import the class > > Ex: > * from source_file import Pca9685* > > The you could create an instance of this like: > > * my_servo_control = Pca9685(bus_num, addr_val)* > > You could need to know the value of bus_num and addr_val to set these. > > Then you could call the methods as such: > *my_servo_control.read_reg(reg_val)* > > Again, you would need to know what the value of reg_val is to set the > 'reg' parameter for the 'read_reg' method. > > You still need to know where it is getting the '*write_i2c_block_data*' > and *'read_i2c_block_data*' methods from though. > Perhaps 'import smbus' is missing? > > https://learn.sparkfun.com/tutorials/python-programming-tutorial-getting-started-with-the-raspberry-pi/experiment-4-i2c-temperature-sensor > > > A course in Python wouldn't hurt. > > > Cheers, > > Jon > > > On Tue, May 5, 2020 at 1:29 PM Mala Dies <fun...@gmail.com <javascript:>> > wrote: > >> Hello, >> >> I have a, to me, piece of complicated text in Python3 format. >> >> Anyway... >> >> I have been unable to make the conversion of the wrapper to another >> Python3 file. >> >> So, here is the source in case you are interested: >> >> from time import sleep >> >> # relevant registers >> MODE1 = 0x00 >> MODE2 = 0x01 >> LED = 0x06 >> ALL_LED = 0xFA >> PRE_SCALE = 0xFE >> >> class Pca9685: >> def __init__( self, bus, addr ): >> self.addr = 0b10000000 | addr >> self.bus = bus >> self.write_reg( MODE1, 1 << 5 ) # initialize MODE1 register >> sleep( 500e-6 ) # wait 500us to allow oscillator to power up >> >> def read_reg( self, reg ) >> return self.read_regs( reg, 1 )[0] >> >> def write_reg( self, reg, value ): >> return self.write_regs( reg, [ value ] ) >> >> def read_regs( self, reg, count ): >> assert reg in range( 0, 256 ) >> assert count in range( 1, 257-reg ) >> return self.bus.read_i2c_block_data( self.addr, reg, count ) >> >> def write_regs( self, reg, values ): >> assert reg in range( 0, 256 ) >> return self.bus.write_i2c_block_data( self.addr, reg, values ) >> >> def get_pwm( self, output ): >> assert output in range( 0, 16 ) >> reg = LED + 4 * output >> >> [ on_l, on_h, off_l, off_h ] = self.read_regs( reg, 4 ) >> on = on_l | on_h << 8 >> off = off_l | off_h << 8 >> >> phase = on >> duty = ( off - on ) & 0xfff >> if off & 0x1000: >> duty = 0 >> elif on & 0x1000: >> duty = 4096 >> >> return ( duty, phase ) >> >> def set_pwm( self, output, duty, phase=0 ): >> assert duty in range( 0, 4097 ) >> assert phase in range( 0, 4096 ) >> >> if output == 'all': >> reg = ALL_LED >> else: >> assert output in range( 0, 16 ) >> reg = LED + 4 * output >> >> on = phase >> off = ( duty + phase ) & 0xfff >> if duty == 0: >> off |= 0x1000 >> elif duty == 4096: >> on |= 0x1000 >> >> on_l = on & 0xff >> on_h = on >> 8 >> off_l = off & 0xff >> off_h = off >> 8 >> self.write_regs( reg, [ on_l, on_h, off_l, off_h ] ) >> >> Now... >> >> How would I actually use this source to promote a servo movement with the >> ServoCape? >> >> I have tried particular source from different tutorials, the python.org >> site, and examples of classes online. >> >> None really cover the BBB and expansion Capes like this source is listed. >> Anyway... >> >> What steps if any would you take to make a servo move w/ this Cape and >> source? >> >> >> - Would I need a Adafruit_BBIO library for GPIO/PWM or a similar >> library? >> >> Seth >> >> -- >> For more options, visit http://beagleboard.org/discuss >> --- >> You received this message because you are subscribed to the Google Groups >> "BeagleBoard" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to beagl...@googlegroups.com <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/beagleboard/5e42131b-733f-413d-91e9-eb204e204f84%40googlegroups.com >> >> <https://groups.google.com/d/msgid/beagleboard/5e42131b-733f-413d-91e9-eb204e204f84%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > On Tuesday, May 5, 2020 at 4:09:33 PM UTC-5, jonnymo wrote: > > If you provide a link to the source of this that would help. > > But, basically in your own Python code you would first import the class > > Ex: > * from source_file import Pca9685* > > The you could create an instance of this like: > > * my_servo_control = Pca9685(bus_num, addr_val)* > > You could need to know the value of bus_num and addr_val to set these. > > Then you could call the methods as such: > *my_servo_control.read_reg(reg_val)* > > Again, you would need to know what the value of reg_val is to set the > 'reg' parameter for the 'read_reg' method. > > You still need to know where it is getting the '*write_i2c_block_data*' > and *'read_i2c_block_data*' methods from though. > Perhaps 'import smbus' is missing? > > https://learn.sparkfun.com/tutorials/python-programming-tutorial-getting-started-with-the-raspberry-pi/experiment-4-i2c-temperature-sensor > > > A course in Python wouldn't hurt. > > > Cheers, > > Jon > > > On Tue, May 5, 2020 at 1:29 PM Mala Dies <fun...@gmail.com <javascript:>> > wrote: > >> Hello, >> >> I have a, to me, piece of complicated text in Python3 format. >> >> Anyway... >> >> I have been unable to make the conversion of the wrapper to another >> Python3 file. >> >> So, here is the source in case you are interested: >> >> from time import sleep >> >> # relevant registers >> MODE1 = 0x00 >> MODE2 = 0x01 >> LED = 0x06 >> ALL_LED = 0xFA >> PRE_SCALE = 0xFE >> >> class Pca9685: >> def __init__( self, bus, addr ): >> self.addr = 0b10000000 | addr >> self.bus = bus >> self.write_reg( MODE1, 1 << 5 ) # initialize MODE1 register >> sleep( 500e-6 ) # wait 500us to allow oscillator to power up >> >> def read_reg( self, reg ) >> return self.read_regs( reg, 1 )[0] >> >> def write_reg( self, reg, value ): >> return self.write_regs( reg, [ value ] ) >> >> def read_regs( self, reg, count ): >> assert reg in range( 0, 256 ) >> assert count in range( 1, 257-reg ) >> return self.bus.read_i2c_block_data( self.addr, reg, count ) >> >> def write_regs( self, reg, values ): >> assert reg in range( 0, 256 ) >> return self.bus.write_i2c_block_data( self.addr, reg, values ) >> >> def get_pwm( self, output ): >> assert output in range( 0, 16 ) >> reg = LED + 4 * output >> >> [ on_l, on_h, off_l, off_h ] = self.read_regs( reg, 4 ) >> on = on_l | on_h << 8 >> off = off_l | off_h << 8 >> >> phase = on >> duty = ( off - on ) & 0xfff >> if off & 0x1000: >> duty = 0 >> elif on & 0x1000: >> duty = 4096 >> >> return ( duty, phase ) >> >> def set_pwm( self, output, duty, phase=0 ): >> assert duty in range( 0, 4097 ) >> assert phase in range( 0, 4096 ) >> >> if output == 'all': >> reg = ALL_LED >> else: >> assert output in range( 0, 16 ) >> reg = LED + 4 * output >> >> on = phase >> off = ( duty + phase ) & 0xfff >> if duty == 0: >> off |= 0x1000 >> elif duty == 4096: >> on |= 0x1000 >> >> on_l = on & 0xff >> on_h = on >> 8 >> off_l = off & 0xff >> off_h = off >> 8 >> self.write_regs( reg, [ on_l, on_h, off_l, off_h ] ) >> >> Now... >> >> How would I actually use this source to promote a servo movement with the >> ServoCape? >> >> I have tried particular source from different tutorials, the python.org >> site, and examples of classes online. >> >> None really cover the BBB and expansion Capes like this source is listed. >> Anyway... >> >> What steps if any would you take to make a servo move w/ this Cape and >> source? >> >> >> - Would I need a Adafruit_BBIO library for GPIO/PWM or a similar >> library? >> >> Seth >> >> -- >> For more options, visit http://beagleboard.org/discuss >> --- >> You received this message because you are subscribed to the Google Groups >> "BeagleBoard" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to beagl...@googlegroups.com <javascript:>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/beagleboard/5e42131b-733f-413d-91e9-eb204e204f84%40googlegroups.com >> >> <https://groups.google.com/d/msgid/beagleboard/5e42131b-733f-413d-91e9-eb204e204f84%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- For more options, visit http://beagleboard.org/discuss --- You received this message because you are subscribed to the Google Groups "BeagleBoard" group. To unsubscribe from this group and stop receiving emails from it, send an email to beagleboard+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/beagleboard/0a7798ae-13f3-453b-9963-78290a9c005f%40googlegroups.com.