EE 476: Laboratory 2

Cricket-call generator.


You will construct a cricket-call generator which will produce audio output of a simplified cricket call. A cricket call may be very complex, but we will limit ourselves to the following form.

  1. A call is made up by repeating indefinitely a chirp and a silent period. If the duration of the silence is zero, the call is refered to as a trill.
  2. A chirp is made up of a certain number of syllables with specific duration and repitition interval.
  3. A syllable is made up of a sine wave burst at a certain frequency. The burst starts at low amplitude, which increases quickly to a maximum, sustains the maximum amplitude until just before the end, then decreases amplitude to zero.

The image below summerizes the definition ( from Manfred Hartbauer).


You will use an LCD and a keypad to set the parameters like those shown in the table below. Analog output will be in the form of a PWM signal which will be filtered using a simple RC circuit to low pass filter the analog signal. Use a big enough resistor so that you don't load the port pin, and small enough to be below the input resistance of the TV audio input (20 kohm). You should set the RC time constant to about 10 times the period of the PWM. The output of the lowpass filter will go to the audio input of the TV. The PWM signal will be sine wave bursts generated using an amplitude modulated Direct Digital Synthesis (DDS) technique. A short example shows how you might implement a DDS and amplitude modulate it.

You will need to figure out how to generate a variety of time delays and durations. I suggest the following scheme, but you may use any scheme you want. Timer 0 is used to generate the high speed PWM-based D/A signal necessary for the sine wave synthesis. The output will be through OC0 (port pin B.3). Use the PWM mode with the highest speed. This interrupt will also increment a counter to count to 1 mSec. The resulting 1 mSec time base will be used to control all other timing (in the main program, not in the interrupt).

You will need to get user input from a keypad with one of two following configurations. Some keypads have the connector on the top, as shown. Some have them on the bottom. Demonstration keypad scanning code is here.

         Conn. on top     Conn. on bottom
Pin 1  -- row 1 2 3 A         Column 1
Pin 2  -- row 4 5 6 B         Column 2
Pin 3  -- row 7 8 9 C         Column 3
Pin 4  -- row * 0 # D         Column 4
Pin 5  -- col 1 4 7 *         Row 1
Pin 6  -- col 2 5 8 0         Row 2
Pin 7  -- col 3 6 9 #         Row 3
Pin 8  -- col A B C D         Row 4
(a) Each switch shorts one row to one column.
(b) Each pin should be connected to one bit of an i/o port.
(c) The i/o port pins will be used both as inputs and outputs. 
    When they are inputs, they should have internal pullup resistors
    turned on.


  1. Write a C program which implements a cricket-call generator with the following specifcations:

  2. Connect the circuit to the TV audio input (white phone plug) and listen the calls. This will aid in debugging and is required for the demo.
  3. Demo this program to a staff member. Show that all specifications are met by verifying times and frequencies with an oscilloscope.
  4. Your written lab report should include:


Copyright Cornell University Dec 2006