Частотомер на Arduino UNO и 2004 (временный)

b707
Онлайн
Зарегистрирован: 26.05.2017

SLKH пишет:

b707 пишет:

 в силу технологического процесса один получается 16300, а другой 15700

Ну это всё-таки не розничная торговля, скорее всё же разброс поменьше. Но единицы минут в сутки - запросто натикает.

цифры исключительно для примера.

Хотя да, с этим ТС надо поакууратнее, а то он примеров тоже не поймет :)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Если взять ардуино с нормальным кварцем (Роботдин), ввести в счётчик временного 10 секундного интервала процедуру корректировки, то с точностью 0,2 герца пожалуй можно одолеть, если задаться целью, главное в этом деле "цветовая дифференциация штанов"

b707
Онлайн
Зарегистрирован: 26.05.2017

ua6em пишет:

Если взять ардуино с нормальным кварцем (Роботдин), ввести в счётчик временного 10 секундного интервала процедуру корректировки, то с точностью 0,2 герца пожалуй можно одолеть, если задаться целью, главное в этом деле "цветовая дифференциация штанов"

точный 10-секундный интервал откуда возьмется?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

ua6em пишет:

Если взять ардуино с нормальным кварцем (Роботдин), ввести в счётчик временного 10 секундного интервала процедуру корректировки, то с точностью 0,2 герца пожалуй можно одолеть, если задаться целью, главное в этом деле "цветовая дифференциация штанов"

точный 10-секундный интервал откуда возьмется?

ардуиной на микросе и организовать, вопрос корректировки - по чём это сделать? NTP? можно пойти другим путём зацепить GPS

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

Отвечаю по порядку.

Я и не ожидал, что кварц именно 16,000,000. Погрешность в +/- десятки, а то и сотни килогерц предполагал.
К чему тогда это:
http://www.cqham.ru/forum/showthread.php?31198
https://radioskot.ru/forum/12-3410-1
https://trolsoft.ru/ru/sch/f-meter
https://meandr.org/archives/25040

Фигуры Лиссажу не подойдут - продал С1-83 пару лет назад, т.к. задолбало его каждый раз доставать убирать. Сейчас есть простенький китайский "показометр" с одним входом - в 99% мне хватает, в оставшийся процент вздыхаю с ностальгией.

Так и я хочу посчитать число импульсов за 10 секунд. Просто насколько точная будет эта секунда с ардуино? Я считаю, чем выше тактовая частота, тем меньше погрешность при её делении на большее число. И, чем больше промежуток счёта импульсов, тем выше итоговая точность при усреднении.
Пусть даже ардуинка считает 1 минуту, но выдаст точно до 0,1 сек. Или так всё-равно не выйдет из-за систематической ошибки?

Вроде я где то читал, что 3231 умеет на выходе выдавать не только 32768, но и перепрограммируется до секунд.
Вот с неё и хотел брать эти 10 сек через аппаратное прерывание.  Или я не так понял?

Я никогда не интересовался точным измерением частоты, вот и встал вопрос использования ардуино, как генератора точных временных интервалов за которые и подсчитать частоту.

Green
Offline
Зарегистрирован: 01.10.2015

Потому что точность измерения будет определяться точностью и стабильность кварца. Это понятно?)
Касательно ds3231 логика правильная). Только он может выдавать максимум 1 секундный меандр, вот и думайте.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

Потому что точность измерения будет определяться точностью и стабильность кварца. Это понятно?)
Касательно ds3231 логика правильная). Только он может выдавать максимум 1 секундный меандр, вот и думайте.

эти секундные ++ до нужного интервала?

Вот когда-то писалось, может пригодится
 

// Пример использования Таймера 2 (восьмибитный)(с) UA6EM 
// на основе заимствований на arduino.ru у DIMAX и ЕвгенийП
// Скетч проверки программы частотомера

#include "lgtx8p.h"

volatile unsigned int int_tic=0; 
volatile unsigned long tic; 
unsigned long old_millis = 0; 
int pin_freq = 11;

enum Prescalers {
   PRESCALER_STOP = 0,
   PRESCALER_1 = 1, 
   PRESCALER_8 = 2, 
   PRESCALER_32 = 3, 
   PRESCALER_64 = 4, 
   PRESCALER_128 = 5, 
   PRESCALER_256 = 6, 
   PRESCALER_1024 = 7  
};


void setup() {
   Serial.begin(115200);
   TCCR1A=0; TIMSK1 = 1<<TOIE1; //прерывание по переполнению
 //  pinMode (5,INPUT); // вход сигнала T1 (only для atmega328)
   
   pinMode(11, OUTPUT);
   digitalWrite(11, HIGH);
   
   /*
   uint8_t prescaler = PRESCALER_1; //Частота около 300кНz
   uint8_t topValue = 26;
   pinMode(11, OUTPUT);
   TCCR2A = 0x42;              // Инвертирование пина 11 по сравнению и режим CTC то OCR2A
   TCCR2B = 0x00 | prescaler;  // Установить СТС режим и делитель частоты
   OCR2A = topValue;           // установить TOP равным topValue
  */
  }

ISR (TIMER1_OVF_vect){ int_tic++;}

void freq_meter() {
pinMode (5,INPUT); // вход сигнала T1 (only для atmega328)
TCCR1B = (1<<CS10)|(1<<CS11)|(1<<CS12);//тактирование от входа Т1
delay(1000);
TCCR1B=0;                             // Остановить счетчик
tic= ((uint32_t)int_tic<<16) | TCNT1; //сложить что натикало
int_tic=0; TCNT1 = 0; 
}

void loop() {
  if(millis() - old_millis >= 10000){
  freq_meter();
  old_millis = millis();
  Serial.print(tic);
  Serial.println(" Hz ");
  }
  digitalWrite(11, !digitalRead(11));
 }

 

SLKH
Offline
Зарегистрирован: 17.08.2015

ArturKu пишет:

Отвечаю по порядку.

Я и не ожидал, что кварц именно 16,000,000. Погрешность в +/- десятки, а то и сотни килогерц предполагал.
К чему тогда это:
http://www.cqham.ru/forum/showthread.php?31198
https://radioskot.ru/forum/12-3410-1
https://trolsoft.ru/ru/sch/f-meter
https://meandr.org/archives/25040

Да к чему угодно. Из 5 ссылок только в одной наличествует слово "погрешность", причем в форме "... с погрешностью менее 1%. Такой точности обычно более, чем достаточно." Для твоих часов 1% - это ~14 минут в сутки, тебя такая точность устроит? 

 

Цитата:
Или так всё-равно не выйдет из-за систематической ошибки?
или.

Цитата:
Вроде я где то читал, что 3231 умеет на выходе выдавать не только 32768, но и перепрограммируется до секунд.
она много чего умеет
Цитата:
Вот с неё и хотел брать эти 10 сек через аппаратное прерывание.  Или я не так понял?
ты хотел, и ты же не понял? Вариантов много, главное - RTC дает частоту с нормированной погрешностью. 

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

ua6em

Спасибо. Большую часть кода не понял.. Буду изучать.
Появились у меня ещё идеи как подстроить часы, но они с программированием никак не связаны. Поэтому не буду озвучивать.

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

Да, уж...
Когда прикидывал - всё выходило так красиво...

16.010.000/16,000,000 = 1,0006 сек. (округлил)

32768*1,0006 = 32787,66 импульса, т.е. 19,66 имп. лишние

За сутки: 19,66*60*60*24 = 1698693,12 импульсов или 51,84 сек. лишние.
За месяц = 25,92 мин.

Вот теперь понял!

Green
Offline
Зарегистрирован: 01.10.2015

ua6em пишет:

эти секундные ++ до нужного интервала?


++ чем? Вам нужно СТРОГО иметь ворота (10 сек).

ua6em пишет:

Вот когда-то писалось, может пригодится
+/- лапоть. См. выше.
ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

Green

А если "откалибровать" счётчик ардуино и начинать расчёт, например так: 
16.010.000/16,010,000 =... Т.е. методом подбора вычислить делитель? 

SLKH
Offline
Зарегистрирован: 17.08.2015

ArturKu пишет:

Green

А если "откалибровать" счётчик ардуино и начинать расчёт, например так: 
16.010.000/16,010,000 =... Т.е. методом подбора вычислить делитель? 

калибровать будешь по какому образцу?

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

По инету, на глаз. За неделю, думаю управлюсь, что бы внутренний счётчик считал +/- 1 сек.
Чисто из спортивного интереса.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

ArturKu пишет:

ua6em

Спасибо. Большую часть кода не понял.. Буду изучать.

я тоже, но это не мешает собирать вполне рабочий код )))

SLKH
Offline
Зарегистрирован: 17.08.2015

ArturKu пишет:

Green

А если "откалибровать" счётчик ардуино и начинать расчёт, например так: 
16.010.000/16,010,000 =... Т.е. методом подбора вычислить делитель? 

В ds3231 кварц:

- термостатированный

- частота конкретного кварца скорректирована своим микропроцессором.

Green
Offline
Зарегистрирован: 01.10.2015

Во во. У обычного кварца частота от сквозняка играет.)

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

Вопрос частично снят - решил в те, в которые влезет впихнуть 3231sn вместо кварца.
Интересно во все ли получится... В одни - точно получится - там генератор "странный" - на транзисторе. В остальные не знаю. В крайнем случае пищалку выкину, всё-равно у меня будильник в смартфоне.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

ТС, а где ты (Вы) живёшь? Мне кажется за столько то дней проще найти клуб радиолюбителей или любое другое место, где есть поверенный частотомер. Принеси туда часы и поверь их. 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

b707 пишет:

ArturKu пишет:

А надпись "16.000" не сможет меня оградить от этих инсинуаций? Хотя бы в какой то мере? Или всё настолько плохо? Кому тогда верить?!

Вот точно так же с кварцами. На нем написано "16 000" и его выпустили без обмана именно как 16 000, но  в силу технологического процесса один получается 16300, а другой 15700

Ну если речь идет об уважаюших себя производителей, то их кварцы с надписью 16.000 гарантируют точность до 3го знака после запятой, то еть 16300  или 15700 там точно не будет. А вот  16.0004 или 15.9997 это уже может быть. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

asam пишет:

b707 пишет:

ArturKu пишет:

А надпись "16.000" не сможет меня оградить от этих инсинуаций? Хотя бы в какой то мере? Или всё настолько плохо? Кому тогда верить?!

Вот точно так же с кварцами. На нем написано "16 000" и его выпустили без обмана именно как 16 000, но  в силу технологического процесса один получается 16300, а другой 15700

Ну если речь идет об уважаюших себя производителей, то их кварцы с надписью 16.000 гарантируют точность до 3го знака после запятой, то еть 16300  или 15700 там точно не будет. А вот  16.0004 или 15.9997 это уже может быть. 

увести кварц даже на килогерц совсем не просто, а чтобы разброс на 300 - невероятно, может то не кварцы были?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

ArturKu пишет:

О Просто насколько точная будет эта секунда с ардуино? Я считаю, чем выше тактовая частота, тем меньше погрешность при её делении на большее число. И, чем больше промежуток счёта импульсов, тем выше итоговая точность при усреднении.

Тут уже говорили, что точность кварцев измеряется ppm это, как проценты от частоты не зависит.

Если у нас кварц с точностью +/ 50ppm это значит, что за время на котором он должен (если бы был аболютно точным) совершить миллион осцилляций он на самом деле может сделать на 50 больше или меньше. При этом хоть дели эту частоту, хоть умножай - относительная погрешность не изменится

Теперь твое требование "50 кГц достаточно, но с точностью до +/- 0,1 Гц." если пересчитать на ppm то получим +/- 2 ppм

Кварцы могут иметь и 150 ppm погрешност. Кварцы с ppm >=50 считаются хорошими, а менше 10 это уже высокоточные и цена на них заметно выше. Даже если у вас плата от хорошего производителя, то в лучшем случае там будет кварц с 20ppm что при измерении на 50КГц даст погрешность в +/- 1 Гц  

 

 

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

BOOM

Я в Питере. Есть радиоклуб (связисты - сам там состою). Но это уже далеко не СССР с его Радиоклубами. Из приборов там только пара компьютеров и советская деревянная картотека для QSL-карточек...

Да и переться туда (50+50 рэ и 60+60 минут) не интересно - проще за те же 100 рэ заказать десяток часовых кварцев у проверенного продавца или те же мелкосхемы 3231...

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

ua6em пишет:

asam пишет:

Ну если речь идет об уважаюших себя производителей, то их кварцы с надписью 16.000 гарантируют точность до 3го знака после запятой, то еть 16300  или 15700 там точно не будет. А вот  16.0004 или 15.9997 это уже может быть. 

увести кварц даже на килогерц совсем не просто, а чтобы разброс на 300 - невероятно, может то не кварцы были?

Ну это же был гипоетический пример про надпись 16 000

Вот кварц маркированный как 16 0000 (те на порядок точнее чем вышеобсуждаемый) https://www.digikey.com/en/products/detail/txc-corporation/9B-16-000MBBK...

Смотрим параметры 

Frequency Stability
±50ppm
Frequency Tolerance
±50ppm

что дает нам общую погрешность в 71ppm  - а это на 16МГц будт 1131Гц, то есть на килогерц увести легко 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

ua6em пишет:

Если взять ардуино с нормальным кварцем (Роботдин), ввести в счётчик временного 10 секундного интервала процедуру корректировки, то с точностью 0,2 герца пожалуй можно одолеть, если задаться целью,

Увы, даже если взять плату от Роботдин, то точность в 0.2Гц при измерении частоты часового кварца никак не получить

Green
Offline
Зарегистрирован: 01.10.2015

Если хочется просто и без дополнительных изгалений - ставьте часовой кварц на 32 кгц. С материнок они достаточно качественные. И делайте программную коррекцию +/- секунд в сутки. Вот и получите вы приемлемую точность, особенно если ваши часы эксплуатируются при комнатной температуре.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

asam пишет:

ua6em пишет:

Если взять ардуино с нормальным кварцем (Роботдин), ввести в счётчик временного 10 секундного интервала процедуру корректировки, то с точностью 0,2 герца пожалуй можно одолеть, если задаться целью,

Увы, даже если взять плату от Роботдин, то точность в 0.2Гц при измерении частоты часового кварца никак не получить

а если термостатировать? а если программно корректировать тики, дискретность в 62 наносекунды хороший запас для корректировки, на 10 секундах то, на асме я это делал  через nop, главное справиться с временной термостабильностью, а уж какова истинная частота без разницы

SLKH
Offline
Зарегистрирован: 17.08.2015

ArturKu пишет:

По инету, на глаз. За неделю, думаю управлюсь, что бы внутренний счётчик считал +/- 1 сек.
Чисто из спортивного интереса.

ну разве что из интереса.

тогда это делается примерно так:

собирается точный компенсированный источник питания 5 вольт, от него запитывается (правильно, через проходные конденсаторы) ардуино нано, помещённая вместе с нагревателем в хорошо экранированный и термоизолированный корпус. датчик температуры на кристалле есть. т.е. сочиняем термостабилизированный кварцевый генератор с индивидуальной коррекцией. *

по людски, нужно бы выставить термостабильную точку для кварца - но нечем, и не факт, что она будет выше комнатной температуры. 

==========

* сильно сомневаюсь, что удастся достичь нормированных параметров +/- 2ppm ds3231, не говоря уже о её микропотреблении.

 

SLKH
Offline
Зарегистрирован: 17.08.2015

asam пишет:

ArturKu пишет:

О Просто насколько точная будет эта секунда с ардуино? Я считаю, чем выше тактовая частота, тем меньше погрешность при её делении на большее число. И, чем больше промежуток счёта импульсов, тем выше итоговая точность при усреднении.

Тут уже говорили, что точность кварцев измеряется ppm это, как проценты от частоты не зависит.

Если у нас кварц с точностью +/ 50ppm это значит, что за время на котором он должен (если бы был аболютно точным) совершить миллион осцилляций он на самом деле может сделать на 50 больше или меньше. При этом хоть дели эту частоту, хоть умножай - относительная погрешность не изменится

Теперь твое требование "50 кГц достаточно, но с точностью до +/- 0,1 Гц." если пересчитать на ppm то получим +/- 2 ppм

Кварцы могут иметь и 150 ppm погрешност. Кварцы с ppm >=50 считаются хорошими, а менше 10 это уже высокоточные и цена на них заметно выше. Даже если у вас плата от хорошего производителя, то в лучшем случае там будет кварц с 20ppm что при измерении на 50КГц даст погрешность в +/- 1 Гц  

или до 10 минут за год.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Я вообще не вижу никаких проблем, берём TCXO, потом умножитель на ренесас на выходе получим тактовую 20 мегагерц, её на ардуино, ну и дальше уже по сказанному, для проверки и калибровки собираем небольшой стендик, как у Карена к примеру

v258
Offline
Зарегистрирован: 25.05.2020

А может быть проблему нужно решать системно? Если нужны синхронизированные часы на каждой стене, то может быть собрать первичные часы на той же DS3231, при желании добавить синхронизацию с интернетом, а по стенам развешать экраны вторичных часов? Тогда можно будет быть уверенным, что любой циферблат показывает то же самое время, что и остальные с точностью до секунды. И даже если они будут врать, то будут делать это одинаково ))

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

Ну это уже перебор... :-)

У меня и так куча обычных часов, так ещё и "умные" расставлять. Прям как на заводе.

v258
Offline
Зарегистрирован: 25.05.2020

Обычные убрать ))

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

Не, я заказал голые мелкосхемки ds3231 и буду пытаться их подцепить вместо кварца.

v258
Offline
Зарегистрирован: 25.05.2020

ArturKu пишет:

Не, я заказал голые мелкосхемки ds3231 и буду пытаться их подцепить вместо кварца.

Стрельба из пушки по тараканам. Этим мелкосхемам нужно будет еще и бесперебойное питание обеспечивать

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

Так часы питаются от батареек 3В.

Но это же проще, чем первичные/вторичные часы?

v258
Offline
Зарегистрирован: 25.05.2020

ArturKu пишет:

Так часы питаются от батареек 3В.

Но это же проще, чем первичные/вторичные часы?

Батарейка сядет, пока будете менять на новую, микросхема сбросится, и будет ли она после этого выдавать вам 32 килогерца на нужном выходе - большой вопрос

ArturKu
ArturKu аватар
Offline
Зарегистрирован: 06.09.2020

Она, вроде, по умолчанию выдаёт 32К? вот их и хочу как тактовые загнать в микросхему часов.
А дальше штатными кнопками часов выставить время. Мне милисекунды не принципиально - достаточно, +/- 30 сек, но что бы шли точно, пока не сядут батарейки.

v258
Offline
Зарегистрирован: 25.05.2020

ArturKu пишет:

Она, вроде, по умолчанию выдаёт 32К? 

Уверены? В теме про DS3231 осцилятор у вас выключен ))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Я не знаю, что ставят в ардуиновский ширпотреб, кварцы или керамику, но в Меге, которую я использовал для музыкального синтезатора, погрешность частоты была -0.7%, что было явно заметно на слух.

С другой стороны, в 8266 WEMOS D1, которую я использовал в NTP Clock, уход по опыту (т.е. количество корректировок в сутки) составил менее секунды в сутки.

В общем - как повезет. Ни на что нельзя надеяться заранее.