#!/bin/env python
# Written by Jonathan Foote February 2011
# http://creativecommons.org/licenses/by-sa/3.0/
def bit(n, val):
''' return True if bit n of val is set) '''
val &= (1 << n)
return(val > 0)
# generate a high modulation rate pwm stream
def fastmodulationPWM(val):
''' Generate a binary fast modulation PWM array for the given duty cycle '''
N = 4 # four bits of PWM
n = 16 # length of PWM signal (2^N)
# make a list of n zeros
r = list(0 for i in range(n))
for i in range(n):
flag = 0
if bit (0,i) == 1:
flag = bit(N-1,val)
elif bit(1,i):
flag |= bit(N-2,val)
elif bit(2,i):
flag |= bit(N-3,val)
elif bit(3,i):
flag |= bit(N-4,val)
if(flag):
r[i] = 1
return(r)
# test the fast modulation routine for all values of duty cycle
n = 16
for i in range(n): # for a range of duty cycles
r = fastmodulationPWM(i) # compute the fast modulation array
print "%2d: %s" % (i,str(r)) # and print it