I'm trying to make a 60Hz frequency, this is How I do it :
freq_hz = 60
pca9685_frequency = 25000000.0 #pca9685 clock : 25Mhz
pca9685_resolution = 4096.0 #12 bits resolution
freq_in_step = pca9685_resolution*float(freq_hz)
prescaleval = pca9685_frequency/freq_in_step
print "prescaler value = {}".format(prescaleval)
prescale = int(math.floor(prescaleval + 0.5))
print "however only round values can be set so we wil use {} as a prescaler value".format(prescale)
print "which makes a frequency of {}".format(pca9685_frequency/(prescale*pca9685_resolution))
oldmode = self.pca9685_device.readU8(self.MODE1);
newmode = (oldmode & 0x7F) | 0x10 # sleep
self.pca9685_device.write8(self.MODE1, newmode) # go to sleep
self.pca9685_device.write8(self.PRESCALE, prescale)
self.pca9685_device.write8(self.MODE1, oldmode)
time.sleep(0.005)
self.pca9685_device.write8(self.MODE1, oldmode | 0x80)
On the screen the result is :
prescaler value = 101.725260417
however only round values can be set so we will use 102 as a prescaler value which makes a frequency of 59.8383884804
But with my oscilloscope, a Tektronix TDS210 I get a 64.1Hz frequency, not 59.84Hz
Did I make a mistake somewhere?