# -*- coding: utf-8 -*- """ Created on Tue Jun 23 16:34:33 2015 @author: sundranandhan """ import math as m f = float(input("Enter frequency in kHz= ")) a = int(f) d = float(input("Enter duty cycle (<0.5): ")) b = int(d*100) s = "SqWv_"+str(b)+"duty"+str(a)+"kHz.ino" fo = open(s, "w") fo.write( """ void setup() { pinMode(2, OUTPUT); pinMode(3, OUTPUT); } void loop() { while(1){ """ ) TotNop = int(1/f/62.5e-9/1000.0) s = "// nop="+str(TotNop)+" freq="+str(f)+" kHz\n" fo.write(s) s = "// Duty Cycle = "+str(d*100)+"%\n" fo.write(s) fo.write(""" PORTD |= 0x4; //gate0 on """) D1 = int(TotNop*d) s = "// noplines="+str(D1//10)+", 10 in each line\n" fo.write(s) for i in range(D1//10): fo.write(""" __asm__("nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t");""") fo.write(" // "+str(i+1)+"\n") s = "// nop="+str(D1%10)+"\n" fo.write(s) s = """ __asm__(""" fo.write(s) for i in range(D1%10): fo.write('"nop\\n\\t"') s = """);\n""" fo.write(s) s = "// Actual duty cycle using nops is="+str(float(D1)/float(TotNop)) fo.write(s) fo.write(""" PORTD &= ~0x4; //delay """) D2 = int((0.50 - d)*TotNop) s = "// noplines="+str(D2//10)+", 10 in each line\n" fo.write(s) for i in range(D2//10): fo.write(""" __asm__("nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t"); """) fo.write(" // "+str(i+1)+"\n") s = "// nop="+str(D2%10)+"\n" fo.write(s) s = """ __asm__(""" fo.write(s) for i in range(D2 % 10): fo.write('"nop\\n\\t"') s = """);\n""" fo.write(s) fo.write(""" PORTD |= 0x8; //gate1 on """) D3 = int(TotNop*d) s = "// noplines="+str(D3//10)+", 10 in each line\n" fo.write(s) for i in range(D3//10): fo.write(""" __asm__("nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t");""") fo.write(" // "+str(i+1)+"\n") s = "// nop="+str(D3%10)+"\n" fo.write(s) s = """ __asm__(""" fo.write(s) for i in range(D3%10): fo.write('"nop\\n\\t"') s = """);\n""" fo.write(s) fo.write(""" PORTD &= ~0x8; //gate1 off """) D4 = int((0.5 - d)*TotNop) s = "// noplines="+str(D4//10)+", 10 in each line\n" fo.write(s) for i in range(D4//10): fo.write(""" __asm__("nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t""nop\\n\\t"); """) fo.write(" // "+str(i+1)+"\n") s = "// nop="+str(D4%10)+"\n" fo.write(s) s = """ __asm__(""" fo.write(s) for i in range(D4 % 10): fo.write('"nop\\n\\t"') s = """);\n""" fo.write(s) fo.write("""}} """) fo.close()