[time-nuts] Frequency Counter using OCXO and MCU

d0ct0r time at patoka.org
Wed Mar 12 11:48:04 EDT 2014


LCD connected to the same MCU. And it has relation to the core clock 
too. So, nothing on LCD before I reset entire MCU. I think initial 
incorrect core clock reading cause a lot of issues. Probably my only 
option will be to implement some external relay and timer to turn on MCU 
few seconds after OCXO. Or may be to put 10Mhz oscillator to PCB and 
connect OCXO output in parallel to it (not sure if its good idea or it 
will works).

Regards,
V.P.

On 2014-03-12 10:21, Chris Albertson wrote:
>  Sorry forgot to add this.
> 
> As for delayed turn on.  That can work but why not simply have the
> software go into a 5 or 10 second wait before it does anything else.
>  Display "warming up" or "please wait" on the LCD.
> 
> On Wed, Mar 12, 2014 at 7:18 AM, Chris Albertson
> <albertson.chris at gmail.com> wrote:
> 
>> Are you putting the "unknown signal" to be measured on an interrupt
>> pin?  that will work for low enough frequencies but most uPs have a
>> built-in counter.   It is a hardware register on the uP chip that
>> will increment for each pulse on a pin.  then you read that number
>> and divide by the gate time.   At some point the frequency will be
>> to high for the counter pin so then you switch in a hardware
>> frequency diver as a pre-scaler.
>> 
>> On Tue, Mar 11, 2014 at 8:24 PM, d0ct0r <time at patoka.org> wrote:
>> 
>>> Hello,
>>> 
>>> I am experimenting to build frequency counter using external OCXO
>>> and ST32 MCU. The OCXO is external DATUM 2750013-1 device which
>>> produce 10Mhz sine wave. I connected its output to OC_IN on MCU. I
>>> have few challenges now.
>>> 
>>> First, looks like I need to create some delay to turn on MCU
>>> _after_ OCXO. If I try to start both devices simultaneously, I got
>>> following result for 10 kHz TTL measurement:
>>> 
>>> System Core Clock: 168000000 Hz
>>> SYSCLK_Frequency PCLK1_Frequency PCLK2_Frequency
>>> 16000000         16000000        16000000
>>> 
>>> # Starting SuperLoop...
>>> FREQ: 105197
>>> FREQ: 105263
>>> FREQ: 105263
>>> FREQ: 105263
>>> 
>>> As soon as I push reset button on MCU, I got correct results for
>>> its clocks and correct value for the counter:
>>> 
>>> System Core Clock: 168000000 Hz
>>> SYSCLK_Frequency PCLK1_Frequency PCLK2_Frequency
>>> 168000000        42000000        84000000
>>> 
>>> # Starting SuperLoop...
>>> FREQ: 10019
>>> FREQ: 10019
>>> FREQ: 10019
>>> FREQ: 10019
>>> FREQ: 10018
>>> FREQ: 10019
>>> 
>>> Another challenge is the fact, that if I increase the input
>>> signal frequency, then performance of the MCU decreased. In the
>>> other word, I need to wait much more time to have a result.
>>> Probably MCU is super busy to handle the interrupt. Say for 10 kHz
>>> range its pretty fast. Then for 1 mHz its much slower.
>>> 
>>> Here is main loop:
>>> 
>>> while (1) {
>>>         if(j++ < 0xF00000) {
>>>             accum += deltaREF; // Moving Average
>>>             accum = (accum >> 1);
>>>         } else {
>>>             uwTIM1Freq = (uint32_t) SystemCoreClock /
>>> accum;
>>>             printf("FREQ: %ulnr", uwTIM1Freq);
>>>             accum = j = 0;
>>>         }
>>>     }
>>> 
>>> The counter is based on timer in "input capture" mode and driven
>>> by interrupt:
>>> [ See STM32F4xx_StdPeriph_ExamplesTIMTIM_InputCapture ]
>>> 
>>> Also this counter shows incorrect results for low frequency. For
>>> example, for 100 Hz:
>>> 
>>> FREQ: 4968
>>> FREQ: 5030
>>> FREQ: 5056
>>> FREQ: 4916
>>> 
>>> I would be interesting to hear any advise how to improve it.
>>> 
>>> And another question is: what will be "pros" and "cons" to
>>> transform 10Mhz sine to square to feed MCU ? I tried it, but
>>> didn't catch any difference.
>>> 
>>> Here is schema
>>> 
>> 
> http://www.qsl.net/va3iul/Homebrew_RF_Circuit_Design_Ideas/Sine-to-Square_Wave_BJT_Converter_Wenzel.gif
>>> [1]
>>> 
>>> --
>>> WBW,
>>> 
>>> V.P.
>>> _______________________________________________
>>> time-nuts mailing list -- time-nuts at febo.com
>>> To unsubscribe, go to
>>> https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts [2]
>>> and follow the instructions there.
>> 
>> --
>> 
>> Chris Albertson
>> Redondo Beach, California
> 
> --
> 
> Chris Albertson
> Redondo Beach, California
> 
> Links:
> ------
> [1]
> http://www.qsl.net/va3iul/Homebrew_RF_Circuit_Design_Ideas/Sine-to-Square_Wave_BJT_Converter_Wenzel.gif
> [2] https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts

-- 
WBW,

V.P.


More information about the time-nuts mailing list