Oscilloscope using a microcontroller and a TV Introduction I wanted to see if I could make a useful scope using just a microcontroller and a television. The result works, but is a bit slow with a maximum sampling rate of 15,750 Hz. This is fast enough for most electrophysiology, but not for audio. The sampling rate is determined by the maximum rate of the internal A/D converter. The entire scope consists of a Mega32 microcontroller, 8 push buttons (connected to one port), and a TV. Optionally, you can add an RS232 interface to dump waveforms to a computer. The DAC to connect the microcontroller to the TV is shown below. The analog input to the scope consists of a 0.47 microfarad capacitor and two 1.0 megaohm resistors as shown below. The highpass cutoff is around 1 Hz. The two resistors bias the A/D input to Vref/2. The capacitor blocks DC from the input. Input must be limited to +/-2.5 volts. The full schematic: The external trigger input is just a logic level directly into the INT0 input which is PORTD.2. The system runs on a 16 MHz crystal at 5 volts.The curcuit board is shown below (version 1 without RS232). The ExpressPCB (do a save as... on the following link and use ExpressPCB software) design file is for the version with RS232 output. Parts list (Digikey part numbers): - MEGA32-16PC Atmel microcontroller
- MAX233ACPP dual RS232 interface.
- A2100 RS232 connector socket
- LM340LAZ-5.0 regulator
- 901K snap-fit phone jack, 90-degree
- CP-3502N mono 3.5 mm audio connector socket
- 401-1103-1 rubber surface-mount push puttons
- CTX077 16 MHz crystal
- All resistors and capacitors are 1206 surface-mount packages
Scope details Scope freatures: - Displays one voltage channel.
- Full scale voltage range of 5, 2.5, 1.25 and 0.75 volts.
- Full scale time range of 8, 16, 33, 65, 130, 261, 521, 1042 mSec.
- Samples at 15.75 kHz maximum (NTSC video line rate).
- Cursor measurement of time and voltage on the trace.
- Calculation of RMS voltage of the trace.
- Trigger on edge/level, with settable value. External logic-level trigger.
- RUN/STOP modes with single trace capture.
- Waveform dump to the UART.
The CodeVision C program is loaded on the Atmel Mega32. The above image shows two pulses. The dot just below the trace is the cursor. Below that there is a RUN/STP/ARM indicator, cursor readout of time and voltage on the trace, aLEVL/EDGE/EXTN/FREE trigger indicator, and the trigger level. The current time and voltage scales are shown in the upper right corner. Buttons: - Button 0 toggles RUN/ STOP mode.
- Button 1 arms a capture in STOP mode. The capture actually occurs when the trigger condition is met.
- Button 2 cycles the trigger mode to LEVEL/EDGE/EXTERNAL/FREERUN.
- Button 3 changes the time scale in RUN mode. The time scale cycles through eight values.
- Button 4 changes the voltage scale in RUN mode. The voltage scale cycles through four values.
- Button 5 dumps the waveform to the serial port in STOP mode. The video is stopped during the dump. See example below. Button 5 computes the RMS voltage value of the trace in RUN mode.
- Button 6 decrements the trigger level in RUN mode. It increments the cursor position in STOP mode.
- Button 7 increments the trigger level in RUN mode. It decrements the cursor position in STOP mode.
Internally, the program is divided into two parts: - The timer1 compare-match ISR runs at video line rate. The ISR:
- generates the horizontal and vertical synch pulses
- blasts bits from RAM to the video output
- checks for a trigger condition, and acquires a voltage sample, if the time is right.
- An external trigger pulse is latched by the INT0 interrrupt flag, but there is no associated ISR, rather the timer1 ISR poles and clears the flag.
- The main program:
- Sets up the environment, draws some strings, and drops into the usual endless loop
- the loop sleeps until the whole video screen is drawn by the ISR, then during the vertical sync time:
- draws a new trace, if it ready
- runs the button debounce state machine
- performs the button actions (move cursor, draw strings, etc) and sets flags for the ISR
The serial port dump allows analysis of individual traces. A trace dump to a PC and then plotted by Excel is shown below. The actual data shown is simulated AP data fed into the scope from the sound port of a PC. The Matlab commands
clear allload 'a:\dump1.txt' -asciiplot(dump1(:,1),dump1(:,2))xlabel('Time (mSec)')ylabel('Voltage')produced the plot below:
|