# AC2DC.py # # This is a demo to show the power of the audio hardware under the # influence of standard text mode Python. # # (C)2010, B.Walker, G0LCU. Now issued as Public Domain; you may do # with this code as you please. # # Tested on PCLinuxOS 2009 and Debian 6.0.0 using Python 2.5.2, 2.6.6 # and 2.7.2; (it may well work on Python versions earlier than the # above but it is untested). # # The device "/dev/dsp" is needed for this to work so you might have # to install "oss-compat" from your distribution's repository... # # A very simple voltage doubler and passive filter TEST CIRCUIT ONLY... # Best viewed in pure text mode. # (Connect DC OUT & GND to a DC coupled oscilloscope to see it working.) # # Headset O/P. C1. |\|D2. # O--------o--||--o-------o---| +---o-------o-------O +VE DC OUT. # | | | |/|+ | | # O < | + < | < # | > --+-- > | + > # | * R1. < / \ D1. < R2. === C2. < R3. # | > +---+ > | > # | < | < | < # | | | | | | # +--------o------o-------o---------o---o---o-------O -VE. # | # Parts List. ---+--- GND. # ----------- /////// # C1 = 1.0 uF, 50V. # C2 = 10 uF, electrolytic, 10V. # R1 = 47 KilOhms, (* this can be ommitted). # R2 = 1 MegOhm. # R3 = 100 KilOhms. # D1, D2 = OA90 or any similar germanium diode. # 3.2 mm stereo jack plug for headset socket. # Coaxial connecting cable. # Sundries as required, stripboard, etc. import os # The running code... def main(): # Set globals, my choice... ;o) global waveform global value global count # Choose startup values... waveform=chr(0)+chr(0) value="(C)2010, B.Walker, G0LCU." count=0 while 1: # Use the Linux system clear-screen command. os.system("clear") # A simple user screen... print "\nA DEMO variable AC to DC Generator using the sound card in Linux.\n" print "(C)2010, B.Walker, G0LCU; now issued as Public Domain...\n" value=raw_input("Input any integer from 0 to 255, [RETURN/ENTER] to Quit:- ") # Don't allow any errors... if value=="": break if len(value)>=4: value="255" count=0 while count<=(len(value)-1): if value[count]>=chr(48) and value[count]<=chr(57): count=count+1 else: value="255" if int(value)>=255: value="255" if int(value)<=0: value="0" # Create a symetrical triangle waveform with an amplitude of "value". print "\nOutput level value is "+value+"..." waveform=chr(0)+chr(int(value)) # Generate this signal for about 10 seconds for this DEMO. if int(value)>=1: count=0 audio=open("/dev/dsp", "wb") while count<=40000: audio.write(waveform) count=count+1 audio.close() main() # End of AC2DC.py program. # Enjoy finding simple solutions to often very difficult problems... ;o)