Python 覆盆子Pi-零除法错误:浮点除以零-adafruit pca9685

Python 覆盆子Pi-零除法错误:浮点除以零-adafruit pca9685,python,raspberry-pi,i2c,adafruit,Python,Raspberry Pi,I2c,Adafruit,我在和我的覆盆子斗争。终端打印出一个浮点数除以零,但我没有在代码中除以任何东西。 我已经重置了整个Pi,并重新安装了所有东西。重置后的第一次运行成功,但之后每次运行都会显示以下错误 如果你能帮我,那就太棒了! 谢谢 回溯(最近一次呼叫最后一次): 文件“robot2.py”,第43行,在 套件.伺服[servo1].角度=长度1 文件“/usr/local/lib/python3.6/site packages/adafruit_servokit.py”,第150行,在u_getitem中__

我在和我的覆盆子斗争。终端打印出一个浮点数除以零,但我没有在代码中除以任何东西。 我已经重置了整个Pi,并重新安装了所有东西。重置后的第一次运行成功,但之后每次运行都会显示以下错误

如果你能帮我,那就太棒了! 谢谢

回溯(最近一次呼叫最后一次):
文件“robot2.py”,第43行,在
套件.伺服[servo1].角度=长度1
文件“/usr/local/lib/python3.6/site packages/adafruit_servokit.py”,第150行,在u_getitem中__
伺服=adafruit_电机。伺服。伺服(self.kit._pca.channels[伺服\u通道])
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第103行,在__
超级()
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第45行,in\uu init__
自行设置脉冲宽度范围(最小脉冲、最大脉冲)
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第49行,在设置脉冲宽度范围内
自最小占空比=int((最小脉冲*自脉宽调制输出频率)/1000000*0xffff)
文件“/usr/local/lib/python3.6/site packages/adafruit_pca9685.py”,第71行,频率
返回自身频率
文件“/usr/local/lib/python3.6/site packages/adafruit_pca9685.py”,第145行,频率
返回self.reference\u clock\u speed/4096/self.prescale\u reg
ZeroDivisionError:浮点除以零
回溯(最近一次呼叫最后一次):
文件“robot2.py”,第43行,在
套件.伺服[servo1].角度=长度1
文件“/usr/local/lib/python3.6/site packages/adafruit_servokit.py”,第150行,在u_getitem中__
伺服=adafruit_电机。伺服。伺服(self.kit._pca.channels[伺服\u通道])
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第103行,在__
超级()
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第45行,in\uu init__
自行设置脉冲宽度范围(最小脉冲、最大脉冲)
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第49行,在设置脉冲宽度范围内
自最小占空比=int((最小脉冲*自脉宽调制输出频率)/1000000*0xffff)
文件“/usr/local/lib/python3.6/site packages/adafruit_pca9685.py”,第71行,频率
返回自身频率
文件“/usr/local/lib/python3.6/site packages/adafruit_pca9685.py”,第145行,频率
返回self.reference\u clock\u speed/4096/self.prescale\u reg
ZeroDivisionError:浮点除以零
回溯(最近一次呼叫最后一次):
文件“robot2.py”,第43行,在
套件.伺服[servo1].角度=长度1
文件“/usr/local/lib/python3.6/site packages/adafruit_servokit.py”,第150行,在u_getitem中__
伺服=adafruit_电机。伺服。伺服(self.kit._pca.channels[伺服\u通道])
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第103行,在__
超级()
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第45行,in\uu init__
自行设置脉冲宽度范围(最小脉冲、最大脉冲)
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第49行,在设置脉冲宽度范围内
自最小占空比=int((最小脉冲*自脉宽调制输出频率)/1000000*0xffff)
文件“/usr/local/lib/python3.6/site packages/adafruit_pca9685.py”,第71行,频率
返回自身频率
文件“/usr/local/lib/python3.6/site packages/adafruit_pca9685.py”,第145行,频率
返回self.reference\u clock\u speed/4096/self.prescale\u reg
ZeroDivisionError:浮点除以零
回溯(最近一次呼叫最后一次):
文件“robot2.py”,第43行,在
套件.伺服[servo1].角度=长度1
文件“/usr/local/lib/python3.6/site packages/adafruit_servokit.py”,第150行,在u_getitem中__
伺服=adafruit_电机。伺服。伺服(self.kit._pca.channels[伺服\u通道])
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第103行,在__
超级()
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第45行,in\uu init__
自行设置脉冲宽度范围(最小脉冲、最大脉冲)
文件“/usr/local/lib/python3.6/site packages/adafruit\u motor/servo.py”,第49行,在设置脉冲宽度范围内
自最小占空比=int((最小脉冲*自脉宽调制输出频率)/1000000*0xffff)
文件“/usr/local/lib/python3.6/site packages/adafruit_pca9685.py”,第71行,频率
返回自身频率
文件“/usr/local/lib/python3.6/site packages/adafruit_pca9685.py”,第145行,频率
返回self.reference\u clock\u speed/4096/self.prescale\u reg
ZeroDivisionError:浮点除以零

正如其他人所指出的,错误来自库代码,未被
捕获。请尝试将其转换为一个错误。您只能通过检查另一个库的实现来判断,但是
self.prescale_reg
中的违规值实际上是通过i2c总线从控制器设备读取的值

有一个类似的案例提到了这一点,它被诊断为使用GPIO运行的两个程序之间的冲突


我会仔细检查与控制器设备的物理i2c连接,确保当您使用
i2cdetect
扫描i2c总线时,它会做出响应(中的示例)并确保您的代码中没有对i2c的GPIO引脚的任何其他冲突使用。

可能
adafruit\u pca9685.py
中的
self.prescale\u reg
必须为零。那是你自己写的文件吗?
self.\u min\u duty=int((min\u pulse*self.\u pwm\u out.frequency)/1000000*0xffff
看起来可疑。
1000000*0xffff
可能溢出了你的变量大小,返回0。@Chris谢谢你的回答!我正在使用当前的Adafruit库。这绝对可疑
Traceback (most recent call last):
  File "robot2.py", line 43, in <module>
    kit.servo[servo1].angle = length1
  File "/usr/local/lib/python3.6/site-packages/adafruit_servokit.py", line 150, in __getitem__
    servo = adafruit_motor.servo.Servo(self.kit._pca.channels[servo_channel])
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 103, in __init__
    super().__init__(pwm_out, min_pulse=min_pulse, max_pulse=max_pulse)
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 45, in __init__
    self.set_pulse_width_range(min_pulse, max_pulse)
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 49, in set_pulse_width_range
    self._min_duty = int((min_pulse * self._pwm_out.frequency) / 1000000 * 0xffff)
  File "/usr/local/lib/python3.6/site-packages/adafruit_pca9685.py", line 71, in frequency
    return self._pca.frequency
  File "/usr/local/lib/python3.6/site-packages/adafruit_pca9685.py", line 145, in frequency
    return self.reference_clock_speed / 4096 / self.prescale_reg
ZeroDivisionError: float division by zero

Traceback (most recent call last):
  File "robot2.py", line 43, in <module>
    kit.servo[servo1].angle = length1
  File "/usr/local/lib/python3.6/site-packages/adafruit_servokit.py", line 150, in __getitem__
    servo = adafruit_motor.servo.Servo(self.kit._pca.channels[servo_channel])
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 103, in __init__
    super().__init__(pwm_out, min_pulse=min_pulse, max_pulse=max_pulse)
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 45, in __init__
    self.set_pulse_width_range(min_pulse, max_pulse)
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 49, in set_pulse_width_range
    self._min_duty = int((min_pulse * self._pwm_out.frequency) / 1000000 * 0xffff)
  File "/usr/local/lib/python3.6/site-packages/adafruit_pca9685.py", line 71, in frequency
    return self._pca.frequency
  File "/usr/local/lib/python3.6/site-packages/adafruit_pca9685.py", line 145, in frequency
    return self.reference_clock_speed / 4096 / self.prescale_reg
ZeroDivisionError: float division by zero

Traceback (most recent call last):
  File "robot2.py", line 43, in <module>
    kit.servo[servo1].angle = length1
  File "/usr/local/lib/python3.6/site-packages/adafruit_servokit.py", line 150, in __getitem__
    servo = adafruit_motor.servo.Servo(self.kit._pca.channels[servo_channel])
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 103, in __init__
    super().__init__(pwm_out, min_pulse=min_pulse, max_pulse=max_pulse)
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 45, in __init__
    self.set_pulse_width_range(min_pulse, max_pulse)
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 49, in set_pulse_width_range
    self._min_duty = int((min_pulse * self._pwm_out.frequency) / 1000000 * 0xffff)
  File "/usr/local/lib/python3.6/site-packages/adafruit_pca9685.py", line 71, in frequency
    return self._pca.frequency
  File "/usr/local/lib/python3.6/site-packages/adafruit_pca9685.py", line 145, in frequency
    return self.reference_clock_speed / 4096 / self.prescale_reg
ZeroDivisionError: float division by zero

Traceback (most recent call last):
  File "robot2.py", line 43, in <module>
    kit.servo[servo1].angle = length1
  File "/usr/local/lib/python3.6/site-packages/adafruit_servokit.py", line 150, in __getitem__
    servo = adafruit_motor.servo.Servo(self.kit._pca.channels[servo_channel])
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 103, in __init__
    super().__init__(pwm_out, min_pulse=min_pulse, max_pulse=max_pulse)
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 45, in __init__
    self.set_pulse_width_range(min_pulse, max_pulse)
  File "/usr/local/lib/python3.6/site-packages/adafruit_motor/servo.py", line 49, in set_pulse_width_range
    self._min_duty = int((min_pulse * self._pwm_out.frequency) / 1000000 * 0xffff)
  File "/usr/local/lib/python3.6/site-packages/adafruit_pca9685.py", line 71, in frequency
    return self._pca.frequency
  File "/usr/local/lib/python3.6/site-packages/adafruit_pca9685.py", line 145, in frequency
    return self.reference_clock_speed / 4096 / self.prescale_reg
ZeroDivisionError: float division by zero