EPROM application in User Define Function Signal Generator using DAC-0800/DAC-0808


 Function Signal Generator


Universal Digital Function Generator, based on DAC-0800 (DAC-0808) and EPROM-2732 for lookup table data to generate any function signals. 

Why it's universal?

Because you can add the patterns as you wish. 

I. PREFACE

 

        After already done with EPROM programmer, you really don't know where to go next, what to do next, etc...etc. Here is the example of EPROM implementation, Universal Digital Function Signal Generator. We can use it as a collection of our R&D laboratory instrument, beside that you can learn how to use a Digital to Analog Converter (DAC) type DAC-0800 or DAC-0808, an 8-bits resolution DAC. The circuit we want to build, I got it from "Electronic Project Magazine" made by "Shailesh M. Patkar & Prashant P. Kelkar" from India. Thanks to both of them, for their great idea.

        This signal generator, generate its signal wave form from look up table data. This data reside in EPROM type 2716 (2k X 8-bit) or 2732 (4k X 8-bit). Each signal used 1 block of data (about 256 byte of data each). So for 2716 type, it can be store up to 8 function signals, while for 2732 type, it can be store up to 16 function signals. This signal data still in digital type. Then we used DAC to convert this data to become analog signal. Because we can programmed what kind of signal we want to, it is why we named it as Universal Digital Function Signal Generator (UDFG).

II. SCHEMATIC

        The original version use 2716 EPROM type, while I prefer using 2732 type. The first one may be already hard to find, while the last one also can load more signals data (it can feed more signals 16 types), you can create more than 8 signal types.

To generate the address lines, the circuit use cascaded binary counters. By cascading this 2 binary counters up to 2 power by 8 (256) address line covered. This is all the data we need for 1 block or 1 function signal. The rest of address lines connect to binary selector switch. It is better if you could find a thumb wheel switch (digital switch). So it is easy to select the function type that you want. But thumb wheel switch only preserve for 10 function types. You need another one selector switch to select the upper and lower half of 8 signals. By store this data in EPROM, the circuit becomes less complicated and less expensive and gives high fidelity. The clock use a simple clock generator from IC 555 which configured as an astable multivibrator. The timing is adjusted by the equation : 

  T = 0.693 (R1 + VR1) C
 
By using the values give in the drawing, the frequency varied from 10Hz to 1kHz. Besides that we preserved also for external clock generator. Because the sampling frequency for DAC-0800 minimum as little as 100 nsec, we can do experiment about the speed of this function generator (in theory up to 10 MHz, this is the limitation of TTL IC clock). Digital output of EPROM 2732 tired to DAC-0800 and convert it to be an analog signal gradation from -10V to +10V, because the reference voltage is tired to +10V. Data for each point of signal rose by 2 IC counters (74163 & 74193) wired cascaded, 4-bit each to become 8-bit counter. These 8-bit counters produces the output data from 00h to FFh totaling 256 states. These 8-bit output counters then wired to the low address of EPROM, while the rest high address connect to digital switch and selector switch to select each signal generator types.

        As told before, each signal divided by 256 data point. So for a complete 1 cycle (360 degree) signal, each data point must rounded to the nearer number. This data for each signal then combine to make it a data look up table and programmed to the EPROM. We don't cover the programming section for this EPROM. For detail explanation about programming the EPROM go to another pages. These Data look up table will be explained later.

        None further explanation needed for the power supplies, because it all using a simple IC regulator. The +10V supply inherited from +15V supply because we don't need this to much power (Iref is about 1.7 mA only) and used to give the reference voltage to DAC-0800, so the output will vary from 0 to +10V by 256 gradation and then feed to op-amp comparator to make the output voltage vary from 0 to +/-15V. That is the output range. You can decrease the output voltage by adding divider resistors. 


III. LAYOUT

        Original circuit completed with PCB layout. But to accommodate the modification, I  already drawn another layout to make it comfort and fit the modification option. So it can fit at a box about (100 x 100 x 30) mm. Only single side needed, the rest will connect through cable and jumper. Note that except the 10 jumpers from the picture, there are 4 connections by cable for power supply. Also not included IC10 and the pull up resistors, because when I designed this layout, the switch never thought about. I put it later. 


IV. PART LISTS

        Component parts lists to build the complete set are : 

   1. Resistors :
 
      R1 = 330k ......................................................... 1 pcs
      R2 = 680k ......................................................... 1 pcs
      R3, R4 = 45k6 ..................................................... 2 pcs
      R5 = 1k. .......................................................... 1 pcs
      R6 = 470 Ohm ...................................................... 1 pcs
      R7 = 47 Ohm / 20W ................................................. 1 pcs
      R8 ~ R11 = 4k7 .................................................... 4 pcs
 
   2. Capacitors :
 
      C1 ~ C4 = 100 nF .................................................. 4 pcs
      C5, C6, C8 = 10 nF ................................................ 3 pcs
      C7 = 10 uF/16V (elco) ............................................. 1 pcs
      C9, C10 = 2200 uF/35V (elco) ...................................... 2 pcs
      C11 ~ C14 = 1000 uF/25V (elco) .................................... 4 pcs
 
   3. Semiconductors :
 
      D1 ~ D4 = 1N4007 (Silicon diode) .................................. 4 pcs
      DZ1 = 10V / 0.25W ................................................. 1 pcs
      Led1 = Red Led (3 mm) ............................................. 1 pcs
      IC1 = 2732 (4kByte EPROM) ......................................... 1 pcs
      IC2 = 74HC193 (Synchronous 4-bit binary counter) .................. 1 pcs
      IC3 = 74HC163 (Synchronous 4-bit binary up/down counter) .......... 1 pcs
      IC4 = DAC0800 or DAC0808 (Digital to analog converter 8-bit) ...... 1 pcs
      IC5 = 555 (Timer) ................................................. 1 pcs
      IC6 = LM324 (Low power Quad Op-Amp) ............................... 1 pcs
      IC7 = 7805 (Voltage regulator) .................................... 1 pcs
      IC8 = 7815 (Voltage regulator) .................................... 1 pcs
      IC9 = 7915 (Voltage regulator) .................................... 1 pcs
      IC10 = 74HC04 (Hex inverter) ...................................... 1 pcs
 
   4. Others :
 
      VR1 = 100k (trimpot) .............................................. 1 pcs
      VR2 = 10k (trimpot) ............................................... 1 pcs
      VR3 = 1k (trimpot) ................................................ 1 pcs
      CON1 = 2-pin terminals PCB type ................................... 1 pcs
      CON2 = 6-pin terminals PCB type ................................... 1 pcs
      CON3 = 3-pin terminals PCB type ................................... 1 pcs
      S1, S2 = Switch spdt .............................................. 2 pcs
      S3 = Thumbwheel switch (BCD switch) ............................... 1 pcs
      T1 = 220V to 30V, sec. 500mA (Transformer) ........................ 1 pcs
      Box = about 12 x 12 x 4 cm ........................................ 1 pcs
      Single side PCB = 10 x 10 cm ...................................... 1 pcs
 

V. DATA LOOK UP TABLE

        To display a signal on an oscilloscope using microprocessor is a very difficult and time consuming task. Say that for example a digital sine wave signal :
                           03     05     07
        sin 0 = 0 - ---- + ---- + ---- + . . .
                          3!      5!      7!
Using microprocessor, the sine function can be displayed at the output by incrementing 0 at every step and outputting the sine value of the 0 to the DAC. The sin 0 can either be calculated by software or by using floating point arithmetic cards. As this method is complicated, the simple and accurate method is to make the look up table. The value for each 0 is stored in memory in a sequential manner. For outputting code to the DAC, the memory for the 0 is then accessed. That is why we use a look up table to store the data.
        The original version already put data for 6 signals, ie: sine wave, ramp (saw tooth), triangular wave, square wave, staircase and particular wave. Here is the explanation of  2 steps from look up table data for sine wave signal :
 
 
Memory
Address
 0 =(360/256) x Memory Address
Sin
0
Bits
Binary
Value
(Base 80h + Bits)
Hex
Value
0000
0
0
0000 0000
1000 0000
80
0001
1.40625
0.02454
0000 0011
1000 0011
83
...
...
...
...
...
...
Example of two steps from look up table data for sine wave signal
       
The value of sine function = 1 at 90 degree. The amplitude is 128 units above the zero (reference) level. So for X sin function = ? above zero level. 

              X
        So ---- x 128 = X.128
              1
                         (sin 0 x 128) Round off
        %Error = -------------------------------- x 100
                                  (sin 0 x 128)
Digital value calculation :
                360                                       360
        0 = ------ x Memory Address = ------ x 0001 = 1.40625
                256                                       256
        sin 0 = 0.02454
        Bits = sin 0 x 128 = 3.14127
 
Therefore the digit before decimal point is 3.14127 = 3 (decimal) = 0000 0011 (binary, Bits)
Binary value to be stored to the EPROM is = 1000 0000  (Base value of DAC) + 0000 0011 (rounded point value) = 1000 0011 (83h).

The %Error can be calculated to get the exact sine wave representation which improves the accuracy.
Here is the rest of the look up table data for these sine wave signal. To make it simple for me and for you to design the patterns, I already make the simple editor program, works in graph mode or text mode. So it is easy to see the result and the more important things that it can be saved to disk. Here is the result for the six pattern signal that I already inputted :
  1. Sine wave (sine.sig)
  2. Saw tooth (ramp) wave (ramp.sig)
  3. Ramp reverse wave (ramprev.sig)
  4. Triangular wave (triangle.sig)
  5. Square wave (square.sig)
  6. Staircase wave (stair.sig)
  7. Negative staircase wave (stairneg.sig)
  8. Particular wave (partculr.sig)
The signal then can be combined to become one big data to loaded into EPROM. Just use copy command from DOS like this : 

COPY /B sine.sig+ramp.sig+triangular.sig+square.sig+stair.sig+...(more pattern signals)...+particle.sig  all.sig

You can add the spare address locations of EPROM to fit your need. Up to 10 signals free for your imagination. Please explore it and have fun !!! 


VI. PROTOTYPE

        My prototype size about 100mm x 100mm x 30mm (LWT), with the switches, thumb wheel and connector put on the top side of the box. Made from plastic and PVC. By using thumb wheel switch, only 10 function signals can be covered. If you don't want this, you can change the system by using a decoder type switch (1 to 16 lines), so the location can be covered all. Here is my prototype and sample of its wave form generate (This capture from a simple selfmade oscilloscope). I will published it later.

The complete UDFG can be obtained here.

No comments:

Post a Comment

Followers