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] <javascript:>> 
> 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] <javascript:>.
>> 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] <javascript:>> 
> 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] <javascript:>.
>> 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] <javascript:>> 
> 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] <javascript:>.
>> 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.

Reply via email to