OH1TV   OH1O   OH1WX              
                       
                       
  DDS experiments                
                       
  About a year ago I started to experiment with PIC-processors. I had no earlier experience with any kind of processors
  nor programming them. I had always thought that it would be too late for me in this age (65). But then a friend told it is 
  reasonable simple and great fun. And I made a try.            
                       
  Since then I have built thermometers, humidity meters, memory keyers, remote heads, etc.    
  Another mystery for me had been DDS, and mainly because a processor is needed to feed the control words.  
                       
  Now, having some touch to  PIC I decided to try a self made DDS for HF. Cheap DDS-modules from China had 
  solved the most difficult HW-problem, SMD soldering.            
                       
  To make a DDS you have four thing to do, in HW and SW          
  1 Inputs, tell the DDS, what it should do, mainly frequency        
  2 Display, show the out coming frequency in Hz          
  3 Conversion calculation              
  4 Load the DDS chip itself              
                       
  The loaded control word to DDS chip is not the frequency directly but a calculated value thereof.    
  The other input is a multiplier, which with 125MHz clock is 34359.738 when the frequency is given in kHz.   
  To learn mode about the numbers, see AD9850 data sheet.          
  Anyway, multiplication 14023.550 X 34359.738 with a 8-bit processor seemed first to be impossible.  
  Picaxe can multiply byte x byte = word, where a byte is 8 bits or max 255 and a word 16 bits or 65535.  
  The same limitations apply to other arithmetic calculations.           
  My way to solve this is as follows: I use the method we were instructed in the school, use a pen and paper.  
  Instead of decimal numbers I use 256-based numeral system (what a 8 bit byte is).       
  Now byte x byte capability is enough. Quite many steps are needed but the process is very clear.    
   When the frequency and the multiplier are expressed with three bytes, the calculation error this way is   
  less than 0.1Hz on HF.                
                       
  Feeding the control word to DDS chip AD9850 is like SPI feed (Serial Peripheral Interface)    
  Picaxe can handle synchronous SPI in two different ways. HW-based is fast but sends most significant bit first.
  SW-based spiout-command is slow but has options to send either most significant bit or less significant bit first.
  AD9850 chip wants LSB first, only SW based instruction can be used.         
                       
  I built a testbed and wrote first a code for the push button controlled version of DDS-VFO.    
  Schematic diagram and the code are on the next pages.           
  I think the comments on SW page explain what the equipment can do        
  Processor standard speed 8MHz is more than enough in the push button controlled version.      
                       
  The next step was to add a rotary encoder as an input device. The code to read the encoder could be   
   a story of its own. I made this one for a K3 remote head last summer and took it as such here.    
  Another thing rose up along the encoder, the speed. The display couldn't follow the knob fast enough.  
  I first increased the processor clock to 64MHz, which is the max. It helped a little but not enough.    
  The time consumer was the Picaxe AXE133Y serial display. Serial transfer is only 2400baud, which is sloow here.
  I had also Sparkfun COM-11443 serial displays, which accept much higher speeds and can be run in SPI-mode 
  up to 250kHz. As SPI is synchronous it should be more reliable. I changed to this and use the SPI mode.  
  I measured the SPI clock speed to be 50kHz, when PIC clock is 64MHz and SW-based command spiout is used.
  HW based hspiout-command would run 1/64 of processor clock which would be too fast for the display.  
  That's why I use the slower spiout, the same as loading the DDS-chip.        
  With this setup tuning speed is good. Not super fast but fast enough.        
  Diagram and code are shown on the next pages.            
                       
  I have tested both versions with a direct conversion receiver made for 20m CW. Results are very encouraging.  
                       
                       
  25.2.2014                    
  Pekka, OH1TV                  
                       
  DDS with push buttons                
  DDS with rotary encoder                
                       
  Back to projects page