Oh, the error you are seeing is that 'int' does not have a len.  What you
may try is to convert it to a string and then get the len:

Ex:
  int_len =  len(str(0)

or
Ex: For values greater than 0.
  int_len = int(math.log10(int_val)) + 1

But I am not sure why you are getting the length of 0.

I don't have a cape, so I can not help you there.

Cheers,

Jon


On Tue, May 5, 2020 at 5:13 PM jonnymo <[email protected]> wrote:

> 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 <[email protected]> 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 <[email protected]> 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 <[email protected]> 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 [email protected].
>>>>>> 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 <[email protected]> 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 [email protected].
>>>>>> 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 [email protected].
>>>> 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 <[email protected]> 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 <[email protected]> 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 [email protected].
>>>>>> 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 <[email protected]> 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 [email protected].
>>>>>> 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 [email protected].
>>>> 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 <[email protected]> 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 <[email protected]> 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 [email protected].
>>>>>> 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 <[email protected]> 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 [email protected].
>>>>>> 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 [email protected].
>>>> 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 [email protected].
>> 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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/beagleboard/CAG99bkq7uWDWdJyHBj%3DNH1x1dX_vCJb2aGYPGqDfVRgzODBc-g%40mail.gmail.com.

Reply via email to