An analogue signal is similar to a sine
wave and is generally less than 5v (5,000mV) in
amplitude. Low-level signals are generally expressed in
mV, to make them instantly recognisable and easy to talk
about.
Fig: 1shows an analogue signal. It may
be as low as a few millivolts or hundreds of millivolts.
In general this type of signal will be too small to be
detected by a microcontroller. A micro needs a signal
greater than about 3,500mV so that the waveform appears
on the input line as a HIGH, during the peak of its
excursion. It should be as high as 5,000mV as possible
for reliable detection of the signal. The instruction to
"read" the HIGH is:
BTFSS 06,3 ;
Test input line GP3
This instruction tests line GP3 and if
the bit is HIGH (the line is SET - the line sees a HIGH)
the micro will skip the next line in the program and
execute the line that follows in the program.
The shape of the waveform does not
matter. It can consist of large excursions and small
excursions as shown in fig: 2.
Only the large excursion(s) will be
detected by the micro as the others may be too small to
be detected. To increase the analogue signal to as high
as 5,000mV as possible, an amplifier is needed, as shown
in fig: 3.
The amplifier maybe one or two stages,
depending on the amplitude of the original signal.
Each stage of an amplifier will increase
the size of the signal about 70 times. If you are very
lucky, you may get an amplification of 100x (100 times).
Thus a 5mV signal with one stage of amplification will
produce a 350mV signal. This is not sufficient to be
detected by the micro. Another stage will easily produce
a full 5,000mV signal and the micro will detect its
presence.
The second stage only needs to amplify
the signal about 10 to 12 times to be sufficient for the
micro, and the added gain provided by the stage simply
drives the waveform into "bottoming" and "cut-off" as
shown in fig: 4.
This means the waveform will be
"clipped" at the top and bottom and converted to a
fairly "square-ish" shape. Normally this would be called
distortion but in digital terms we don't worry about it
being distorted and simply use it for its "triggering"
properties.
Suppose you have a waveform that is
higher than 5mV (say 30 - 50mV) and want to know if it
will trigger the micro after a single stage of
amplification.
Connect the circuit in Fig: 5 to the
micro and connect a LED with 470R resistor in series, to
pin GP0.
Burn the following routine into a
PSEUDO'508 and the LED will illuminate when the waveform
is detected as a HIGH.
Program for a Pseudo'508:
BSF 03,5 ;Select Page1
MOVLW 08 ;GP3 input
TRIS 06 ;Load TRIS
BCF 03,5 ;Select Pag0
Test1 BTFSS 06,3 ;Test input line
GOTO Test2
BSF 06,0
GOTO Test1
Test2 BCF 06.0
GOTO Test1
There is only one problem with the
circuit in Fig: 5.
At the end of a whistle or speech, the
LED may be illuminated or extinguished. It all depends
on the last cycle of the waveform. The circuit sits with
the output approx mid-rail and the micro does not know
if this is a high or low, and takes the reading by the
direction of the last cycle.
Some of the inputs of the micro are
Schmitt Triggered. This means a HIGH has to be 85% to
100% of rail voltage for it to be seen as a HIGH and
between 20% and 0% to be seen as a LOW.
The non-Schmitt Trigger inputs see a LOW
as 20% to 0% and a HIGH as above 2v for 5.5v operation.
If the last cycle went from zero to
mid-rail the micro will see the waveform as a low on
Schmitt Trigger inputs and a HIGH on the other inputs.
If the cycle came from a high to about mid-rail, the
waveform
will be seen as a high. This problem can be overcome via
a few instructions in the program, by looking at the
input and if it is not changing, it is ignored. Suppose
the circuit only just activates the micro with a loud
whistle. To improve the sensitivity of the input another
stage will be needed.
This can be a DIGITAL STAGE as shown in
fig: 6 or an analogue stage as shown in fig: 7.
A digital stage simply means the biasing
resistor is left off the base of the second transistor
so the transistor turns on fully when a signal greater
than 650mV is detected and is fully turned off at other
times. This stage is ideal for the micro as only two
voltage levels are delivered. Either 0v or rail voltage
(5v).The other advantage is the stage does not take any
quiescent (idle) current.
This stage is only suitable if you are
sure you have plenty of "over-voltage" to drive the
transistor into saturation. By this we mean you must
have at least 1v (1,000mV) drive signal so you can be
sure the transistor will turn on (saturate).
The fast rise and fall times means you
have a "clean" period of time during a HIGH or LOW for
counting operations. A micro determines the frequency of
an incoming signal by counting the length of time for
the HIGH or LOW (between a rise and fall) and coming to
a decision as determined by the program. If the lengths
of the HIGHs and LOWs are very regular the micro can
come to an accurate decision very quickly. This is very
important if you are detecting a particular frequency
out of a possibly range of frequencies as the program
will compare the incoming frequency with a table value
and it may keep sampling until an exact match is
produced.
Fig 7. Shows two analogue stages with
"over-drive." The circuit produces a signal that is
larger than necessary for the micro, and when the input
waveform is very low, the output will still be
sufficient to
trigger the micro.
This circuit is more sensitive than fig:
6 and should be used if you want to pick up faint
whispers and turn on equipment (such as a tape
recorder). It should also be used for magnetic pick-ups
(such as a
metal detector, nail finder or pipe locator) as this
type of pick up has a very low output (can be as low as
1 to 5mv).
THE PIEZO DIAPHRAGM
Piezo transducers such as piezo
diaphragms can also be used as microphones. They produce
a very "tinny" sound (like talking into a tin) but this
is not important in our case. The output is about the
same as an electret microphone (about 10 to 30mV for low
level speech and up to 50mV for loud speech).
Some diaphragms are very sensitive while
others are very insensitive. You can check the
sensitivity with a CRO, by simply whistling and viewing
the waveform.
Diaphragms that operate on low voltages,
such as those in a music card seem to very sensitive.
The only other way to determine a
sensitive piezo diaphragm is to connect it to a music
chip. The output it produces reflects its sensitivity as
a microphone.
The piezo diaphragm has an advantage
over an electret microphone. It does not need a power
source.
The diagram of fig: 8 shows how to
connect it to a transistor amplifier. Using the program
above, whistle into the diaphragm and determine if a
single stage is sufficient. If not, a second stage,
exactly like the microphone stage can be added.
Fig 9 shows a simpler circuit to
interface a piezo diaphragm to the input of a micro. The
first transistor is held in "bottoming" and the second
in "cut-off." This offers the lowest current consumption
and produces the greatest output. The second transistor
is "turned-off" because the first transistor is "ON" and
the voltage across its collector-emitter terminals is
about 0.35v and this is below the turn-on voltage of
0.65v for the base of the second transistor. The first
transistor is fully turned on but the turn-on current is
very low and this allows the maximum waveform to be
produced by the piezo for a given sound intensity. In
other words the circuit puts the lightest load on the
piezo.
When no-signal is present, the output of
the circuit is HIGH.
A signal from the piezo produces a
full-rail waveform to exactly match the waveform from
the piezo.
By monitoring the output of the circuit
you will be able to detect the instant the waveform
produces a LOW. Instructions that loops until a low is
detected are shown below:
Loop1 NOP
BTFSC 06,0 ;Test GP0 for a LOW
GOTO Loop1
The only problem with loop1 is it holds
up the micro from doing any other operations.
The solution is to "poll" the input line
by producing a program that "looks" at the input on a
regular basis and if a low is detected, a "bit" is
placed in a flag register. The Main routine constantly
looks at the flag register and when the bit is SET, it
carries out an operation and cancels the flag.
MAGNETIC PICKUP
A 10mH choke (with both wires coming out
the same end so the magnet can pass as close as possible
to the core) can be used as a magnetic pick-up to detect
rotating shafts etc. The circuit in fig: 10 will connect
it to a micro.
Attach a strong magnet to a rotating
shaft and have the magnetic sensor close to the magnet
as possible without touching. The amplitude of the
waveform produced by the coil (choke) will depend on the
strength of the magnet, the distance between the magnet
and coil, the speed of the rotating shaft and the number
of turns on the coil.
Fig: 10 "AC" couples the coil to the
amplifying circuit so that the biasing of the first
transistor can be determined by the value of the
base-bias resistor. The coil cannot be connected
directly to the transistor as the low impedance
(resistance) of the coil will upset the bias on the
base.
If the coil is directly connected to the
base, the voltage across the coil will be only a few
millivolts and the coil will have to produce 600mV or
greater to turn on the transistor.
With our arrangement, 100mV or less will
turn off the transistor (a 100mV waveform will turn the
transistor ON more during the "positive half" of the
waveform and turn it off during the other half of the
waveform).
Any coil of wire of any size will be
suitable and to make it an effective collector of
magnetic flux it should have a magnetic core such as a
ferrite.
Simply rotate the shaft at half the
required RPM and if the circuit detects the magnet, the
coil is suitable. No other impedance-matching or
resistance measurements are necessary.
The output of the circuit is exactly the
same as for the piezo diaphragm except the frequency
will be considerably less.
THE LDR
The cheapest light sensor is the LDR. It
has a resistance of about 100 ohms in bright light and
more than 1M in darkness.
It can be connected to a transistor
amplifier as shown in fig: 11.
The pot alters the sensitivity of the
LDR so that the output changes at the desired light
intensity. This circuit is only suitable for large
changes in intensity. If you need to detect a very
slight change in illumination you need a very sensitive
detector.
PHOTO DARLINGTON TRANSISTOR
A more sensitive device is a photo-darlington
transistor, such as the MEL-12. A further stage of
amplification and a pot will adjust the sensitivity
level. This is shown in fig: 12.
VOLTAGE LEVELS
Some waveforms change very slowly. They
may take a day or so to rise and fall. The are
classified as VOLTAGE LEVELS and can be produced by
thermocouples (a thermocouple PRODUCES a voltage due to
the heating of two different metals in contact with each
other). Other devices DELIVER a voltage by being
supplied with a voltage and the resistance of the device
causes a certain voltage to appear across it. You can
call it a VOLTAGE-DIVIDER principle. Devices that
deliver a voltage include the thermistor, diode (and
transistor) and strain gauge. This is very important as
it determines how the device is connected to either an
amplifier or the input of the micro.
THE FREQUENCY OF A SIGNAL
Once you have a waveform that triggers
the micro (use the test program given at the beginning
of this article to make sure it is being detected by the
micro) you can get the program to simply detect its
presence or determine the frequency.
The frequency can be determined in two
ways:
1. Counting the number of HIGHs and LOWs
in one second.
2. Counting the time taken for a
HIGH-to-LOW transition - one half cycle.
Method 1 is a very slow way to obtain a
frequency in cycles per second.
A micro works so fast that it can
determine things in a fraction of a second.
Method 2 is much faster but it can be
very inaccurate as the half-cycle is multiplied-up to
get the value in Hertz. To reduce the inaccuracy you can
count 10 cycles or 100 cycles and perform a
multiplication. A higher cycle-count reduces the
inaccuracy.
The following steps are required to
produce the value of a frequency (in Hertz). Refer to
fig: 13 for the definition of a HIGH and LOW.
The input is looped until a HIGH is
detected.
The program then goes to a short delay.
The micro comes out of the delay and
increments a "count" file.
The program looks at the input for a
LOW. If a LOW is not detected the program goes to step
B.
When a LOW is detected the program has a
value in the "count" file - this is half a cycle.
By adding-up the number of instructions
carried out during the "count" increment, the program
can work out the frequency of the waveform.
Sometimes a frequency in cycles per
second is not required. You may want to compare a
frequency with a value in a table. This is called TONE
DETECTION.
TONE DETECTION
- also called Tone decoding
The frequency of an incoming tone can be
detected and "flagged" when it is exactly the correct
tone. This is handy for detecting DTMF tones on the
phone line. In this way DTMF tones can be used for
turning on equipment (such as lighting, heating, alarms
etc). The accuracy of the tone can be set by the
program. It is best to allow a margin of error so you
can guarantee the tone will be recognised.
For best detection, the incoming tone should be "good
quality" i.e full amplitude and free from noise, so the
determination can be speedy. Fig: 13 shows a typical
waveform.
|