This range meter detects a reflected wave
from the object after sending out a ultrasonic pulse.By measuring the time which returns after emitting a sound wave, a
distance to the object is measured.The
operation of the following figure is repeatedly executed.LED display processing is executed in parallel with this
operation.

Label definition
;**************** Label Definition ********************
cblock h'20'
s_count ;Send-out pulse count adr

endc
I used CBLOCK directive for the definition of the
workarea. When using this directive, workareas
which were defined between CBLOCK and ENDC are automatically allocated
in the order from the address which was specified by the operand of
CBLOCK. It is convenient because it is possible to prevent the double
allocation of the area. To confirm an allocated address, you confirm it
by the assembly result.
Lighting-up segment
data for 7 segments LED are designated by EQU. The data from 0 to 9 is used for digital display. However, the
10th is used for the detection error display. At
first, I make light up only center segment. But I turned off all
segments because the display was confusing.
The 11th is used for the interruption error
display. It is for the debugging.

Environment designating and
others
As for LIST and
INCLUDE directive and Program
start, refer to "Light
controller".
The
following specification is done as configuration word.
Oscillator |
: |
HS |
Watchdog Timer |
: |
OFF |
Power-up Timer |
: |
enabled |
Low Voltage ICSP |
: |
OFF (RB3 can not be used
for the input/output port when not making this
OFF). | The result is
3F72h.

Initialization process
;**************** Initial Process *********************
Port initialization
Because the RA0/AN0 port is used for input of A/D
converter, it is set to input mode. Other A ports are set to the
output. All B ports are set to output because it is used for the LED
segment control. RC2/CCP1 of C port is set to
the input mode because it is used for input of
capture.
Ultrasonic transmission period timer(TMR0)
initialization
The transmission period of the ultrasonic is
controlled using timer0. Because timer0 is a timer with byte, the
count value is up to 256. However, it is making count 65535 by setting
the prescaler to 256. (256 x 256 = 65535) This time, because it is
using 4 MHz for the oscillator, 1 count is 1 microsecond. (1/(4 x
106))x4=10-6 seconds So,
the time-out time of timer0 is about 65
milliseconds.
Capture mode initialization
Timer1 is used for capture. Timer1 is
initialized. At the time of the initialization,
it makes CCP1 OFF to prevent from a malfunction.
A/D converter initialization
Channel 0 is set as the converter input. Because the
clock to use this time is 4 MHz, Fosc/8 is set to A/D conversion
clock. Because the higher rank side of the A/D
converted result are used, the storage of the result is made right
justification (ADFM=0). Because A porta are
used for the output of the digit specification of the LED, ports
except RA0/AN0 are made digital specification.
LED display period timer(TMR2)
initialization
Display data for 7 segments LED are set to workarea.
The initial value of the display is "the error code". The time-out of timer2 is about 10
milliseconds. The interruption eable bits of
the capture and timer2 are set.
Interruption initialization
It makes timer0 interruption, peripheral device
interruption, global interruption possible. The
interruption of the capture and timer2 doesn't occur when not making
peripheral device interruption possible. By
this process, interruption operation is
started.
When the initialization process
ends, the interruption is waited for. It executes same address
repeatedly.

Interruption process
;*************** Interruption Process *****************
Capture interruption, timer2 interruption, timer0
interruption are checked. The kind of the interruption is judged by each
interruption flag. After that, it jumps to the corresponding
interruption process. When the kind of the
interruption is unsettled, processing is stopped. To confirm illegal
interruption with the actual circuit, an in-circuit simulator is needed.
There is a way of resetting but it isn't improved because it does the
same operation even if it resets. A global
interruption enable bit (the GIE bit) is automatically cleared when the
interruption occurs. So, the interruption never occurs while processing
in the interruption.

Illegal interruption process
;*************** Illegal interruption *****************
It displays an interruption error to the LED when the
illegal interruption occurs.  This process is the process for debugging and
is usable with the other checking, too.

Interruption ending process
;************ END of Interruption Process **************
As for the software this time, all processing is done
by the interruption except the initialization processing. The common
registers(W register, Status register) are not used in the interrupted
process (Main process). So, the saving and resaving process for them
isn't need. In the interruption ending process,
GIE bit is set by RETFIE instruction to enable
interruption.

Ultrasonic pulse sending-out
process
;*************** Pulse send-out Process ****************
In the pulse sending-out process, the following process
is done.
Clear the interruption display
The interruption flag of TMR0 is cleared. When not
clearing this flag, the interruption occurs at once when interruption
processing is ended without waiting a regular
time-out. I clear the count area of timer0
because of the sure operation.
Check the detection error
When the detection of the reflected wave isn't done
from the pulse sending-out in the last time until the pulse
sending-out this time, it means measurement impossible and display is
turned off. The previous data is displayed in the measurement
impossible condition when not doing this process and the mistake
occurs to the measurement.
Stop the reflected wave
detector
Immediately after letting out a transmission pulse,
the influence occurs to the receiver circuit and there is possibility
to do wrong detection. To prevent from this, the operation of the
reflected wave detector is stopped. The RA4 port is an open type and
an external resistor is needed. So, I used RA5.
Start the capture operation
The count area of timer1 and the contents of the
capture register are cleared. the rising edge detection mode capture
is set and a capture interruption enable bit is set. And an
interruption flag is cleared because of the sure
operation.
Send-out the 40KHz pulse
The 40KHz pulse is the pulse which has 12.5
µ-sec as ON time and 12.5
µ-sec as OFF time in 1
cycle. Because 4-MHz clock is used at the
circuit this time, the instruction execution time is 1 microsecond.
So, correct 40KHz can not be sent out. When doing ON, OFF respectively
with the 12 µ-sec, it is
41.7KHz. In case of 13 µ-sec,
it is 38.5KHz. This time is adjusted by changing the number of the
steps in the pulse sending-out processing. It
is 0.5 milliseconds when sending out 20 pulses. (20pulses x
0.025milliseconds/pulse)
Take-in the display revision
data
To make operate A/D converter, the GO bit of the
ADCON0 register is set. When switching the input channel of A/D
converter, after switching the input, about 20 microseconds waiting
time is needed. This time, because the input channel is fixed on 0,
waiting time isn't necessary. The completion of the A/D conversion is
judged by the checking the GO bit. When GO bit is cleared, the
conversion is completion. The upper 3 bits is picked up and add 54 as
the conversion value.
Error detection prevention
A detector is stopped until the influence ends to the
receiver after sending out a pulse. I set this time to about 1
millisecond. When few influences occur, it is to be OK even if it is
shorter. When many influences occur, it is necessary to make
longer.
Start the reflected wave
detection
After the wrong detection prevention time elapse, it
is made a enable condition in the reflected wave
detection.

Capture interruption process
;****************** Capture Process ********************
In the capture interruption process, the following
process is done.
Clear the interruption display
Capture interruption flag is
cleared.
Distance conversion processing
The count value of the timer0 which was stopped by
the capture operation is proportional to the propagation time of the
sound wave. It isn't possible to use for the display just as it is. In
the processing this time, division by some value is done and is
converted into the distance numerical value. For example, I will explaine in case to have been reflected
from the 1-m distance. In the time that the
sound wave goes and returns in 1 m, it is
2m/343m/sec=5831 microseconds in case of 20°C.
Because the clock of timer0 is 1µ-sec/count, the value of the timer0 when a capture is done is
5831. It is to be OK if using 58 as the divisor to make display this
value as 100(It displays 1 m). The value to take in by the A/D
converter is used for a divisor. So, when the temperature is
different, the display can be revised if changing the input voltage to
the A/D converter. But, because it is changed in the digital, it isn't
possible to do fine adjustment.
Display setting processing
Because the type of distance value which is converted
is binary, it can not be displayed on the LED just as it
is. Binary number is converted into the decimal
number and is set to each workarea(100th, 10th, 1st). When 100th digit exceeds 9, it makes error
display.

LED display process
;**************** LED display control *****************
This is the process to display the distance numerical
value which was gotten by the capture to the LED. One LED is controlled at each period. So, only 1 digit is
displayed at the same time. Display is done every
10 milliseconds using timer2. When the display flickers, you should make
the set value of timer2 more little and it quickens a
period.
|