|  | ||
| \главная\р.л. конструкции\... | 
PIC Tone generator
   This program uses an 8 bit DAC along with a 16F84 PIC microcontroller to
      generate a keyed sine wave.  The 16F84 uses an RC clock which can be varied (with a suitable potentiometer) to allow a variable frequency
      control for the sine wave output.  A key or keyer output can be connected to pin 1 of the PIC to control the tone output.
      
       This program uses a conventional DDS (Direct Digital Synthesis) phase 
      accumulator type of algorithm.  This is fully explained in the Motorola application note AN1222 referenced above so instead of re-explaining 
      how it works, here are a few important characteristics of this algorithm.  First, the frequency of the tone is easy to control,
      just change the accumulation constant.  In this code this isn't really an advantage since the PIC RC clock has been made variable.
      Second, the waveform has a certain jitter or "crawl" to it, which is easy to see with an osciioscope.  This is due to the fact that the
      algorithm does not hit exactly the same points of the sine table in each successive cycle of the waveform.
      Third, because of this preceeding "crawl", it's hard to end the waveform at an exact point - you can get close, but it takes multiple PIC cycles to
      calculate and compare the present position with the desired ending point. In this program, the waveform just ends when key-up is detected - this
      may increase the key-up thump a bit when the notone routine slams the waveform back to midscale.
      These disadvantages of the conventional DDS are dealt with in the  stepdds.asm program which uses the same hardware setup in a different way
      to generate the tone output.
      
      
      Click here for:
      Project Schematic using an R-2R DAC
      Alternate Schematic using a 6 bit binary DAC 
      Qbasic program to generate a 256 step sine table
      Qbasic program to generate a 128 step sine table
       Qbasic program to generate a 64 step sine table
      First trial program using a conventional DDS algorithm
      Second trial program using a step DDS algorithm
      Final program using step DDS and a ramp up/down of the tone
      A triangle waveform table - insert in place of the sine table
      A sawtooth waveform table - insert in place of the sine table
      Readme.txt
      
      
      PIC pinout:
      
| Pin | Name | Function / Connection | 
|---|---|---|
| 1 | ra2 | key input, pulled up to +5V with a 10K resistor | 
| 2 | ra3 | no connect | 
| 3 | ra4 | no connect | 
| 4 | MCLR | pulled up to +5V with a 10K resistor | 
| 5 | Vss | Ground | 
| 6 | rb0 | connected to 20k dac resistor | 
| 7 | rb1 | connected to 20k dac resistor | 
| 8 | rb2 | connected to 20k dac resistor | 
| 9 | rb3 | connected to 20k dac resistor | 
| 10 | rb4 | connected to 20k dac resistor | 
| 11 | rb5 | connected to 20k dac resistor | 
| 12 | rb6 | connected to 20k dac resistor | 
| 13 | rb7 | connected to 20k dac resistor | 
| 14 | Vdd | +5V | 
| 15 | osc2 | no connect | 
| 16 | osc1 | connected to the RC timing circuit, R = 10k pot, C = 22 pf | 
| 17 | ra0 | no connect | 
| 18 | ra1 | no connect |