Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- '''
- This script analyzes a list of given quartz crystal frequencies for the
- possibility to create an 8-bit PWM signal with a given frequency f0
- within a a given tolerance on a typical microcontroller timer with given
- prescalers and a clear-on-timer-compare CTC functionality
- Uwe Zimmermann, 2022
- '''
- f0 = 7000
- tolerance = 2/100
- xtals = [1e6, 1.8432e6, 2e6, 3.2768e6, 3.575e6, 3.579545e6, 3.580e6, 3.6864e6,
- 4e6, 4.194304e6, 4.9152e6, 5e6, 6e6, 7.3728e6, 8e6, 9.216e6, 9.8304e6,
- 10e6, 10.245e6, 10.738635e6, 11.0592e6, 12e6, 12.5e6, 13.56e6, 14.31818e6,
- 14.7456e6, 15e6, 16e6, 17.73447e6, 18e6, 18.432e6, 18.8696e6, 19.6608e6,
- 20e6, 20.48e6, 21e6, 24e6, 24.576e6]
- prescalers = [1,8,64,256,1024]
- results = []
- for p in prescalers:
- for n in range(255):
- xtal = f0 * p * n
- for xt in xtals:
- if abs(xtal - xt)/xt <= tolerance:
- f = xt/(p*n)
- df = (f-f0)/f0*100 # percent
- results.append((f, df, n, p, xt))
- def get_df(item):
- return abs(item[1])
- if results:
- results.sort(key=get_df)
- for res in results:
- print("prescaler ={:4d} n={:4d} xtal = {:7.4f} MHz actual f = {:.3f} Δf = {:+3.2f}%".format(res[3], res[2], res[4]/1e6, res[0], res[1]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement