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