My reference to reg_val was just a reference and an example. I have no idea what you need for the value which is something you need to research.
I have no idea where you got the original code from, but you should start there. Jon On Tue, May 5, 2020 at 5:08 PM Mala Dies <fun...@gmail.com> wrote: > from smbus2 import SMBus > from ServoLib import Pca9685 > from time import sleep > > i2c2 = SMBus("/dev/i2c-2") > x = Pca9685(i2c2, 0b111111) > > x.read_reg(2) > x.write_reg(2, 1) > x.read_regs(2, 5) > x.write_regs(2, len(int(0)) > > angle = int(input("What would your favorite angle be now? ") > if angle <= 180 or angle >=0: > angle = x.get_pwm(1) > f = angle + x.set_pwm(0, 2000, 0) > print("Your angle is " + angle) > > Jon, > > Seth here. Yep. Here is some source. I am not sure if you have the Cape or > not but I was wrangling w/ getting the basics to work first, e.g: > > read_reg > write_reg > read_regs > write_regs > get_pwm > set_pwm > > and so on... > > I got the first couple of functions from the class being called to not > give any errors. Then, https://pastebin.com/bXWhdrzA, this link is the > error I received. > > I then made some changes as you can tell in the source for write_regs w/ > len(int). > > Seth > > P.S. I know this is partial source and not worth showing off but I wanted > to see if you can configure what exactly it is that I am doing incorrectly. > > When you typed reg_val before in this post, were you referring to > hexadecimal register values? > > > > > > On Tuesday, May 5, 2020 at 5:22:17 PM UTC-5, jonnymo wrote: >> >> When you call the methods in the Pca9685 you need to pass the appropriate >> parameters. >> >> Ex: >> read_reg( self, reg ) >> >> You need to pass a reg value to this. >> >> * reg_val = some_reg_val* >> >> * read_result = x.read_reg(reg_val) * >> >> * print(read_result)* >> >> >> I can't see the rest of your code so I am not sure if it will work or not. >> >> Search the web for Python3 tutorials. >> >> Jon >> >> On Tue, May 5, 2020 at 3:01 PM Mala Dies <fun...@gmail.com> wrote: >> >>> 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> 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. >>>>> 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> 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. >>>>> 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 beagl...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/beagleboard/0a7798ae-13f3-453b-9963-78290a9c005f%40googlegroups.com >>> <https://groups.google.com/d/msgid/beagleboard/0a7798ae-13f3-453b-9963-78290a9c005f%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> > On Tuesday, May 5, 2020 at 5:22:17 PM UTC-5, jonnymo wrote: >> >> When you call the methods in the Pca9685 you need to pass the appropriate >> parameters. >> >> Ex: >> read_reg( self, reg ) >> >> You need to pass a reg value to this. >> >> * reg_val = some_reg_val* >> >> * read_result = x.read_reg(reg_val) * >> >> * print(read_result)* >> >> >> I can't see the rest of your code so I am not sure if it will work or not. >> >> Search the web for Python3 tutorials. >> >> Jon >> >> On Tue, May 5, 2020 at 3:01 PM Mala Dies <fun...@gmail.com> wrote: >> >>> 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> 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. >>>>> 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> 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. >>>>> 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 beagl...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/beagleboard/0a7798ae-13f3-453b-9963-78290a9c005f%40googlegroups.com >>> <https://groups.google.com/d/msgid/beagleboard/0a7798ae-13f3-453b-9963-78290a9c005f%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> > On Tuesday, May 5, 2020 at 5:22:17 PM UTC-5, jonnymo wrote: >> >> When you call the methods in the Pca9685 you need to pass the appropriate >> parameters. >> >> Ex: >> read_reg( self, reg ) >> >> You need to pass a reg value to this. >> >> * reg_val = some_reg_val* >> >> * read_result = x.read_reg(reg_val) * >> >> * print(read_result)* >> >> >> I can't see the rest of your code so I am not sure if it will work or not. >> >> Search the web for Python3 tutorials. >> >> Jon >> >> On Tue, May 5, 2020 at 3:01 PM Mala Dies <fun...@gmail.com> wrote: >> >>> 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> 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. >>>>> 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> 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. >>>>> 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 beagl...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/beagleboard/0a7798ae-13f3-453b-9963-78290a9c005f%40googlegroups.com >>> <https://groups.google.com/d/msgid/beagleboard/0a7798ae-13f3-453b-9963-78290a9c005f%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/415f46f3-ff25-4da9-b12d-904b7bceb3e3%40googlegroups.com > <https://groups.google.com/d/msgid/beagleboard/415f46f3-ff25-4da9-b12d-904b7bceb3e3%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/CAG99bkpRLfUG3z2vWAg-rYegh1Op_YZ3%2B0qqjogC4MNvhS5Gcw%40mail.gmail.com.