X-Git-Url: https://defiant.homedns.org/gitweb/?a=blobdiff_plain;f=bus_pirate.py;h=cdd259fa7581ee42dba23da879fbf10b3aa4d287;hb=c9dbcc66879f0e1d8beb05b49179fcb200ef8cf0;hp=4ef9c61d4eacf79612be535156477e553b4d770b;hpb=6af0c706c1dd1b0ae4cbc38adf1f056a8686aae4;p=pyshared.git diff --git a/bus_pirate.py b/bus_pirate.py index 4ef9c61..cdd259f 100644 --- a/bus_pirate.py +++ b/bus_pirate.py @@ -64,6 +64,29 @@ class BP: v = struct.unpack(">h", s) return v[0]/1024.0*6.6 + # http://codepad.org/qtYpZmIF + def pwm(self, freq, duty_cycle_percent): + lPrescaler = {0:1, 1:8 , 2:64, 3:256} + Fosc = 32e6 + Tcy = 2.0 / Fosc + period = 1.0 / freq + prescaler = 1 + + # find needed prescaler + for i in range(4): + prescaler = lPrescaler[i] + PRy = period * 1.0 / (Tcy * prescaler) + PRy = int(PRy - 1) + OCR = int(PRy * duty_cycle_percent) + + if PRy < (2 ** 16 - 1): + break # valid value for PRy, keep values + + cmd = struct.pack(">BBHH", 0b00010010, i, OCR, PRy) + ret = self.command(cmd, 1) + if ord(ret) != 0x1: + raise Exception() + def spi_command(self, cmd): ret = self.command(cmd, 1) if ord(ret) != 0x1: