Added min and max frequency settings

This commit is contained in:
shrkey
2016-04-03 13:54:10 +01:00
parent 53d479b776
commit 367d000b67

View File

@@ -57,6 +57,27 @@ class PWM :
time.sleep(0.005) # wait for oscillator
def setPWMFreq(self, freq, correctionFactor=1.0):
"Sets the PWM frequency"
prescaleval = 25000000.0 # 25MHz
prescaleval /= 4096.0 # 12-bit
prescaleval /= float(freq)
prescaleval -= 1.0
if (self.debug):
print "Setting PWM frequency to %d Hz" % freq
print "Estimated pre-scale: %d" % prescaleval
prescale = round(prescaleval * correctionFactor + 0.5)
if (self.debug):
print "Final pre-scale: %d" % prescale
oldmode = self.i2c.readU8(self.__MODE1);
newmode = (oldmode & 0x7F) | 0x10 # sleep
self.i2c.write8(self.__MODE1, newmode) # go to sleep
self.i2c.write8(self.__PRESCALE, int(math.floor(prescale)))
self.i2c.write8(self.__MODE1, oldmode)
time.sleep(0.005)
self.i2c.write8(self.__MODE1, oldmode | 0x80)
def setPWMFreqMin(self, freq, correctionFactor=1.0):
"Sets the PWM frequency"
prescaleval = 25000000.0 # 25MHz
prescaleval /= 4096.0 # 12-bit
@@ -77,18 +98,35 @@ class PWM :
time.sleep(0.005)
self.i2c.write8(self.__MODE1, oldmode | 0x80)
def getPWMFreq(self):
def setPWMFreqMax(self, freq, correctionFactor=1.0):
"Sets the PWM frequency"
prescaleval = 25000000.0 # 25MHz
prescaleval /= 4096.0 # 12-bit
prescaleval /= float(freq)
prescaleval -= 1.0
if (self.debug):
print "Getting PWM frequency Hz"
print "Setting PWM frequency to %d Hz" % freq
print "Estimated pre-scale: %d" % prescaleval
prescale = math.ceil(prescaleval * correctionFactor + 0.5)
if (self.debug):
print "Final pre-scale: %d" % prescale
oldmode = self.i2c.readU8(self.__MODE1);
newmode = (oldmode & 0x7F) | 0x10 # sleep
self.i2c.write8(self.__MODE1, newmode) # go to sleep
self.i2c.write8(self.__PRESCALE, int(math.floor(prescale)))
self.i2c.write8(self.__MODE1, oldmode)
time.sleep(0.005)
self.i2c.write8(self.__MODE1, oldmode | 0x80)
def getPWMFreq(self):
prescale = self.i2c.readU8(self.__PRESCALE)
if (self.debug):
print "Got pre-scale: %d" % prescale
print 25000000.0 / 4096.0 / ( float(prescale) + 1 )
calcfreq = 25000000.0 / 4096.0 / ( float(prescale) + 1 )
print "Calculated Frequency: %d" % calcfreq
return 25000000.0 / 4096.0 / ( float(prescale) + 1 )
#24576000.f / 4096.f / (data + 1)
return calcfreq
def setPWM(self, channel, on, off):
"Sets a single PWM channel"