Added updates for getPWM and correctionFactor

This commit is contained in:
shrkey
2016-04-03 13:02:12 +01:00
parent 3511873a7c
commit f05b4403be

View File

@@ -50,13 +50,13 @@ class PWM :
self.i2c.write8(self.__MODE2, self.__OUTDRV) self.i2c.write8(self.__MODE2, self.__OUTDRV)
self.i2c.write8(self.__MODE1, self.__ALLCALL) self.i2c.write8(self.__MODE1, self.__ALLCALL)
time.sleep(0.005) # wait for oscillator time.sleep(0.005) # wait for oscillator
mode1 = self.i2c.readU8(self.__MODE1) mode1 = self.i2c.readU8(self.__MODE1)
mode1 = mode1 & ~self.__SLEEP # wake up (reset sleep) mode1 = mode1 & ~self.__SLEEP # wake up (reset sleep)
self.i2c.write8(self.__MODE1, mode1) self.i2c.write8(self.__MODE1, mode1)
time.sleep(0.005) # wait for oscillator time.sleep(0.005) # wait for oscillator
def setPWMFreq(self, freq): def setPWMFreq(self, freq, correctionFactor=1.0):
"Sets the PWM frequency" "Sets the PWM frequency"
prescaleval = 25000000.0 # 25MHz prescaleval = 25000000.0 # 25MHz
prescaleval /= 4096.0 # 12-bit prescaleval /= 4096.0 # 12-bit
@@ -65,7 +65,7 @@ class PWM :
if (self.debug): if (self.debug):
print "Setting PWM frequency to %d Hz" % freq print "Setting PWM frequency to %d Hz" % freq
print "Estimated pre-scale: %d" % prescaleval print "Estimated pre-scale: %d" % prescaleval
prescale = math.floor(prescaleval + 0.5) prescale = math.floor(prescaleval * correctionFactor + 0.5)
if (self.debug): if (self.debug):
print "Final pre-scale: %d" % prescale print "Final pre-scale: %d" % prescale
@@ -77,6 +77,19 @@ class PWM :
time.sleep(0.005) time.sleep(0.005)
self.i2c.write8(self.__MODE1, oldmode | 0x80) self.i2c.write8(self.__MODE1, oldmode | 0x80)
def getPWMFreq(self):
if (self.debug):
print "Getting PWM frequency Hz"
prescale = self.i2c.readU8(self.__PRESCALE)
if (self.debug):
print "Got pre-scale: %d" % prescale
print 25000000.0 / 4096.0 / ( float(prescale) + 1 )
return 25000000.0 / 4096.0 / ( float(prescale) + 1 )
#24576000.f / 4096.f / (data + 1)
def setPWM(self, channel, on, off): def setPWM(self, channel, on, off):
"Sets a single PWM channel" "Sets a single PWM channel"
self.i2c.write8(self.__LED0_ON_L+4*channel, on & 0xFF) self.i2c.write8(self.__LED0_ON_L+4*channel, on & 0xFF)