mirror of
git://projects.qi-hardware.com/ben-wpan.git
synced 2024-11-28 18:13:08 +02:00
6d4ea61ae1
- cntr/README, ecn/INDEX, ecn/ecn0006.txt: moved discussion of the input circuit from README to ECN0006 - cntr/cntr.sch: changed pointer from README to ECN0006 - ecn/ecn0006.txt: added more measurements, explanations, and an analysis of the situation
80 lines
2.9 KiB
Plaintext
80 lines
2.9 KiB
Plaintext
Arbitrary-precision frequency counter
|
|
=====================================
|
|
|
|
Theory of operation
|
|
-------------------
|
|
|
|
The arbitrary-precision frequency counter counts clock cycles of a
|
|
frequency source that is assumed to be free from drift. It compares the
|
|
count with the host's system clock. If the system clock is synchronized
|
|
with an accurate NTP reference, measurements with arbitrarily high
|
|
accuracy can be obtained.
|
|
|
|
In practice, this is limited by the the frequency source's drift and
|
|
the time one is willing to wait. If NTP maintains the system time
|
|
with an accuracy of +/- 100 ms, obtaining measurements with an
|
|
accuracy of +/- 1 ppm would take about 28 hours.
|
|
|
|
Additional error sources, such as the round-trip time when requesting
|
|
a sample from the microcontroller, are also considered in the accuracy
|
|
calculation.
|
|
|
|
The counter consists of a board based on a C8051F320 microcontroller
|
|
and the control software on the host. The microcontroller counts
|
|
events in a free-running 16 bit counter that is regularly read and
|
|
extended to 32 bits. The 32 bit counter is periodically queried by
|
|
the host.
|
|
|
|
The microcontroller's counter can count at a frequency of up to 3 MHz.
|
|
(SYSCLK/4)
|
|
|
|
In order to protect against transmission errors not detected by USB's
|
|
CRC, which are occur relatively often, each packet is protected by a
|
|
CRC-32 and an inverted copy of the payload. Corrupted packets are
|
|
rejected by the host.
|
|
|
|
The 32 bit counter wraps around at most once very 21.8 ms. The 32 bit
|
|
counter wraps around at most every 1431 s. The host extends the 32 bit
|
|
counter to 64 bits, and calculates frequency and accuracy from the
|
|
count and the run time of the measurement application.
|
|
|
|
|
|
Performing a measurement
|
|
------------------------
|
|
|
|
To perform a measurement, connect the CNTR board's probe input to the
|
|
clock source and then run the "cntr" application on the host. An
|
|
accuracy goal (in ppm) can be specified on the command line (see
|
|
below).
|
|
|
|
The host polls the microcontroller every 100 ms and displays the run
|
|
time (in seconds), the measured frequency, and the accuracy achieved
|
|
so far.
|
|
|
|
Measurements can be stopped by pressing ^C or by specifying an
|
|
accuracy goal. At the end, the total number of events counted and
|
|
communication statistics are displayed.
|
|
|
|
|
|
Updating the firmware
|
|
---------------------
|
|
|
|
The protocol revision and the build date of the firmware of the CNTR
|
|
board can be queried with "cntr -i".
|
|
|
|
To update the firmware, run
|
|
cntr -r; sleep 1 && dfu-util -d 0x20b7:0xcb72 -D cntr.bin
|
|
|
|
|
|
Known issues (version 2 hardware)
|
|
---------------------------------
|
|
|
|
- the input circuit does not perform well. See ECN0006 for details.
|
|
- the MMCX connector is hard to solder because of its large thermal
|
|
capacitance and surface
|
|
- the lateral pads of the MMCX connector could be wider
|
|
- manufacturing tolerances can push the USB connector a bit inside
|
|
the board, making its signal pins overshoot the pads
|
|
- the ground fill under the LED causes a secondary cathode contact
|
|
(which is harmless on this case)
|