Простые часы нереального времени

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

ua6em пишет:

я добиваюсь этого корректируя 2 раза в секунду

у тебя секунда равна реальной секунде?

почему два раза секунду корректируешься, а не каждую микросекунду?

Logik
Offline
Зарегистрирован: 05.08.2014

Я ниче не корректирую. Часовой кварц в RTC наверно есть, но я ж ясно писал, к нему обращение раз в сутки (и прни включении устройства разумеется). У Вас в коде ошибко дающая такую фигню, в начале темы есть старый скетч, но лучше дафай актуальный скетч, покажу где поправить и Вы не будете корректировать. Ну разумеется если китайцы не впаяли вместо кварца чето по цвету подходящее ))

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

код изменился только в поправочных коэффициентах:

 

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

Клапауций 234 пишет:

ua6em пишет:

я добиваюсь этого корректируя 2 раза в секунду

у тебя секунда равна реальной секунде?

почему два раза секунду корректируешься, а не каждую микросекунду?

1. конечно не равна, она равна millis*1000
 

Logik
Offline
Зарегистрирован: 05.08.2014

Там где millis();  //запуcкаем таймер

))) неее... давайте шото более адекватное.

ПС. Думал на прошлой странице Вас убедили хоть в этом, выходит нет ;)

Похоже "крепкий орешек" ;) Ну удачи, удачи...

 

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

Logik пишет:

Там где millis();  //запуcкаем таймер

))) неее... давайте шото более адекватное.

ПС. Думал на прошлой странице Вас убедили хоть в этом, выходит нет ;)

уберите millis(); (я там рыбу заворачивал) и читайте дальше, кстати проверил, раскомментировал чистый millis() и с ним работает, НАСТОЯЩУЮ ПРОФЕССИОНАЛЬНУЮ РАБОТУ сраный millis() не испортит )))

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

Клапауций 234 пишет:

ua6em пишет:

К каким ногам ардуино нано подключаем правильный резонатор 32768, если XTAL подключен 16 мегагерц?

#5

*так и подмывает спросить у этих шустрых и невнимательных: вами в постели довольны жёны? потому, как 30 секунд - это дурь какая-то, а не секс.

...Академическим виделся текст, а на поверку про секс...
Вас всегда на секс тянет когда на простой вопрос - к каким ногам подключаем часовой кварцевый резонатор в предложенном Вами решении, ежели стандартный уже подключен...

Или когда понимате, что это из области абстракции решение? К реальности не имеющем никакого отношения... с программистами так бывает...витают в виртуальных мирах... а мы тут куём железом по железу

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

ua6em пишет:

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

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

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

я спрашивал как перевести на RC?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Протестировал я счёт времени средствами самой ардуины,  вот с таким кварцем,  фото :

за три часа время отстало на 12 секунд.  По расчётам реальная частота кварца получается 15 982 223 Герц, т.е. отклонение 1111 ppm, итог -  это не кварц а жуткое говно.

 

А вот такой обычный кварц-лодочка

 

и такой кварцевый генератор

не дали отклонений за 3 часа.  Измерялось с точностью в 1 сек, разумеется какие-то отклонения появяться, но потребуется несколько дней что б их измерить. Либо написать программу с более точным измерением и автоматической синхронизацией по интернету.  В качестве образцового источника времени использовался ds3231, +  дополнительно время контролировалось по компьютеру, производя синхронизацию по серверу времени в начале и в конце тестового отрезка.

Logik
Offline
Зарегистрирован: 05.08.2014

//потребуется несколько дней что б их измерить.

На сутках вылезут. Только в чем смысл экспериментальной проверки даташита )

Вот типичные, там и лодочка есть. http://www.quartz1.com/price/group.php?p1=14745%2C6&group=430

В среднем 30ppm т.е. 2,5сек/сутки. Любые существенные отклонения возможны по двум причинам: 1. криворукость разраба 2. китайцы впаяли хрень. Все приезжающие платы я на такое не тестирую, но те 2 промини что попали в устройства с часами ведут себя отлично.

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

dimax пишет:

Протестировал я счёт времени средствами самой ардуины,  вот с таким кварцем,  фото :

за три часа время отстало на 12 секунд.  По расчётам реальная частота кварца получается 15 982 223 Герц, т.е. отклонение 1111 ppm, итог -  это не кварц а жуткое говно.

 

А вот такой обычный кварц-лодочка

и такой кварцевый генератор

не дали отклонений за 3 часа.  Измерялось с точностью в 1 сек, разумеется какие-то отклонения появяться, но потребуется несколько дней что б их измерить. Либо написать программу с более точным измерением и автоматической синхронизацией по интернету.  В качестве образцового источника времени использовался ds3231, +  дополнительно время контролировалось по компьютеру, производя синхронизацию по серверу времени в начале и в конце тестового отрезка.

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

Вопрос остался, можно ли в mega328 перевести кварц таймеров на другие пины, в частности мне не нужны A6 и A7 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

ua6em пишет:

Вопрос остался, можно ли в mega328 перевести кварц таймеров на другие пины, в частности мне не нужны A6 и A7 

от тупица упоротый. :D

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ua6em пишет:
Речь идёт об алгоритме, я добиваюсь этого корректируя 2 раза в секунду, раз в минуту, раз в час и раз в 24 часа и корректирующее воздействие выражается в миллисекундах (умножаемая дробная часть от нестабильности хода)

Зачет.  Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.

_kp
Offline
Зарегистрирован: 07.10.2016

ua6em пишет:
и на ардуине используя функцию millis() это достижимо )))

Недостижимо даже близко. И пробовать не стоит. Объяснять долго, почему получится совсем плохо.

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

Но о точности хода - секунда в сутки речь не идёт.
Даже если каллибровать по эталону и корректировать поправками на точность хода, то тоже не поможет.
Только если по радио/gps/ntp/sntp синхронизировать. Кстати по sntp накладные расходы микроскопические.

Дело в том, что часовые кварцы делают с очень малым дрейфом частоты в зависимости от температуры и времени работы.
Чем 16МНz китайский кварц похвастаться не может, впрочем он и не для часов.

В китайских платах часов, которые неточно идут, кстати очень помогает замена кварца.
С  некитайским кварцем от найденных на помойке/чердаке старых наручных часов, даже DS1307 идёт нормально, хотя лучше повнимательнее присмотреться к DS3231.

arduino328
Offline
Зарегистрирован: 01.09.2016

qwone пишет:

ua6em пишет:
Речь идёт об алгоритме, я добиваюсь этого корректируя 2 раза в секунду, раз в минуту, раз в час и раз в 24 часа и корректирующее воздействие выражается в миллисекундах (умножаемая дробная часть от нестабильности хода)

Зачет.  Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.

Так ТС и делает часы нереального времени.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

И завершающий тест -сравнение счёта времени через прерывания 16-битный таймером,  и традиционным методом начинающих ардуинщиков  миллис()-превмиллис. Тестовый МК тактируется от кварцевого генератора, -первая сверху цифра -количество секунд,- 1-герцовых импульсов от ds3231, условно принимаю за эталон.  Вторая цифра -количество секунд подсчитанных 16-битным таймером, третья цифра -количество секунд, подсчитанных через функцию миллис(). Как видно по картинке  за 2 часа миллис отстал на 22 секунды. Таймер считает лоб в лоб с ds3231, думаю и за сутки разницы не будет. Собссно всё это как аргументы к тому, что нельзя через (миллис- превмиллис)  время измерять. Т.к. этот способ накапливает ошибку на каждой итерации переменной.

Тестовый скетч на обозрение, думаю всё ясно, вывод SQW модуля ds3231 подключен к входу D3.

#include <wiring.c>
volatile uint32_t ds, tim1; 
uint32_t previousMillis,tim0;
volatile boolean first=1;
#include <LCD5110_SSVS.h>
#include "Wire.h"

extern uint8_t SmallFont[];
LCD5110 lcd(A0,A1,A2,A3);


void setup(){
lcd.InitLCD();
lcd.setFont(SmallFont);
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x0E); // Control Register
Wire.write(B01000000); // 1 Hz Out
Wire.endTransmission();
pinMode (3,INPUT_PULLUP);
TCNT1=0; TCNT0=0;  TCCR1A=0;
TCCR1B=(1<<CS12)|(1<<WGM12); //CTC Mode, DIV256
OCR1A=62499; //1 раз в секунду
TIMSK1=(1<<OCIE1A); // разрешить прерывание
attachInterrupt(1, herz, FALLING);
}


void loop(){
   if (millis() - previousMillis >1000) {  
   previousMillis = millis(); tim0++; }
     
  lcd.print("Test Millis()", LEFT, 0); 
  lcd.printNumI(ds,LEFT, 8);
  lcd.printNumI(tim1,LEFT, 16);
  lcd.printNumI(tim0,LEFT, 24);
}

ISR (TIMER1_COMPA_vect) { 
  tim1++;
  }


void herz() {
 ds++;
   if (first) {
       TCNT1=0;TCNT0=0; TIFR0=0;  TIFR1=0;  timer0_millis=0 ; first=0; tim0=0;tim1=0;ds=0;  
      }
 }
  

После первого импульса от ds3231 все переменные обнуляются, чем обеспечивается очень высокая синхронность старта счётчиков.

 

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

dimax, у Вас в коде алгоритмическая ошибка - поэтому и отстает на 22 сек.

Перед 30 строкой нужно один раз считать и запомнить значение millis() в локальной переменной, чтобы затем в строках 30 и 31 использовать одно и то же значение. Иначе при вклинивании прерывания между строками 30 и 31 теряем приращение счетчика времени (1 или 2).

PS. Подумал: лучше в 31 строке прибавлять 1000.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

andriano, ну ошибка то не моя, а того, кто придумал что так можно время считать :)  , PS:   previousMillis +=1000 ;  Это сделать? Попробую ради интереса, но мне кажется в лучшем случае ошибка уменьшится на каждой итерации, но не исчезнет. PS: запустил, через часик наверное будет результат.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Удивительно, но факт. Прошёл час, но с поправкой от andriano счётчик миллис не отстал, одновременно все счтчики показали 3600. значит всё таки можно использовать миллис для счёт времени, если конечно loop сильно не перегружать..

Конечный вариант тестового скетча:

#include <wiring.c>
volatile uint32_t ds, tim1; 
uint32_t previousMillis,tim0;
volatile boolean first=1;
#include <LCD5110_SSVS.h>
#include "Wire.h"

extern uint8_t SmallFont[];
LCD5110 lcd(A0,A1,A2,A3);


void setup(){
lcd.InitLCD();
lcd.setFont(SmallFont);
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x0E); // Control Register
Wire.write(B01000000); // 1 Hz Out
Wire.endTransmission();
pinMode (3,INPUT_PULLUP);
pinMode (9,OUTPUT);

TCNT1=0; TCNT0=0; 
TCCR1A=0;
TCCR1B=(1<<CS12)|(1<<WGM12); //делить частоту CPU на 256
OCR1A=62499; //1 раз в секунду
TIMSK1=(1<<OCIE1A); //разрешить прерывание
attachInterrupt(1, herz, FALLING);
}


void loop(){
 
   if (millis() - previousMillis >1000) {  
   previousMillis +=1000 ; tim0++; }
     
  lcd.print("Test Millis()", LEFT, 0); 
  lcd.printNumI(ds,LEFT, 8);
  lcd.printNumI(tim1,LEFT, 16);
  lcd.printNumI(tim0,LEFT, 24);
}

ISR (TIMER1_COMPA_vect) { 
  tim1++;
  }


void herz() {
 ds++;
   if (first) {
       TCNT1=0;TCNT0=0; TIFR0=0;  TIFR1=0;  timer0_millis=0 ; first=0; tim0=0;tim1=0;ds=0;  
      }   
 }
  

 

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

dimax пишет:

andriano, ну ошибка то не моя, а того, кто придумал что так можно время считать :)

Попытался выяснить, откуда ноги растут. Сперва подумал, что отсюда: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

Ан, нет, там, что удивительно, данный фрагмент написан правильно.

У Клапауция в титановой кнопке - тоже правильно.

А вот в прикрепленной теме "Работа с кнорпками. В помощь новичку" содержится именно такая ошибка.

Как бы ее исправить? Нехорошо новичнов учить сразу неправильно.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

andriano, поставил на тестирование вариант с arduino.cc , уже через минуту стала вырисовываться тенденция оставания счётчика миллис, посмотрим итоги через час :)

добавлено:

Нет смысла ждать час, эта конструкция из примера arduino.cc  дала отставание в 7 секунд уже за 30минут.

void loop(){
 unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= 1000) {
       previousMillis = currentMillis;  tim0++; 
       }

Стало быть вариант из #70 на данный момент самый верный.

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

Думаю, это вариант не выдержит сильно нагруженного loop().

Мне кажется, что наиболее надежный вариант:

while (millis() - previousMillis >1000) { 
	   previousMillis +=1000 ; tim0++; }

 

Logik
Offline
Зарегистрирован: 05.08.2014

Да. Для счета времени именно так. В условии > или >= не существенно, == нельзя. Вариант с previousMillis = millis();  годится для формирования временного интервала, когда важно что до следующего входа в условие прошло не менее времени чем задано. Правильный подход вызывать millis()один раз при входе в луп и сохранять даже не в локальной а в глобальной переменной (лишний параметр в функции не будет передаватся), и использовать везде где надо, разумеется это при быстром лупе.

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

dimax пишет:

И завершающий тест -сравнение счёта времени через прерывания 16-битный таймером,  и традиционным методом начинающих ардуинщиков  миллис()-превмиллис. Тестовый МК тактируется от кварцевого генератора, -первая сверху цифра -количество секунд,- 1-герцовых импульсов от ds3231, условно принимаю за эталон.  Вторая цифра -количество секунд подсчитанных 16-битным таймером, третья цифра -количество секунд, подсчитанных через функцию миллис(). Как видно по картинке  за 2 часа миллис отстал на 22 секунды. Таймер считает лоб в лоб с ds3231, думаю и за сутки разницы не будет. Собссно всё это как аргументы к тому, что нельзя через (миллис- превмиллис)  время измерять. Т.к. этот способ накапливает ошибку на каждой итерации переменной.

Тестовый скетч на обозрение, думаю всё ясно, вывод SQW модуля ds3231 подключен к входу D3.

#include <wiring.c>
volatile uint32_t ds, tim1; 
uint32_t previousMillis,tim0;
volatile boolean first=1;
#include <LCD5110_SSVS.h>
#include "Wire.h"

extern uint8_t SmallFont[];
LCD5110 lcd(A0,A1,A2,A3);


void setup(){
lcd.InitLCD();
lcd.setFont(SmallFont);
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x0E); // Control Register
Wire.write(B01000000); // 1 Hz Out
Wire.endTransmission();
pinMode (3,INPUT_PULLUP);
TCNT1=0; TCNT0=0;  TCCR1A=0;
TCCR1B=(1<<CS12)|(1<<WGM12); //CTC Mode, DIV256
OCR1A=62499; //1 раз в секунду
TIMSK1=(1<<OCIE1A); // разрешить прерывание
attachInterrupt(1, herz, FALLING);
}


void loop(){
   if (millis() - previousMillis >1000) {  
   previousMillis = millis(); tim0++; }
     
  lcd.print("Test Millis()", LEFT, 0); 
  lcd.printNumI(ds,LEFT, 8);
  lcd.printNumI(tim1,LEFT, 16);
  lcd.printNumI(tim0,LEFT, 24);
}

ISR (TIMER1_COMPA_vect) { 
  tim1++;
  }


void herz() {
 ds++;
   if (first) {
       TCNT1=0;TCNT0=0; TIFR0=0;  TIFR1=0;  timer0_millis=0 ; first=0; tim0=0;tim1=0;ds=0;  
      }
 }
  

После первого импульса от ds3231 все переменные обнуляются, чем обеспечивается очень высокая синхронность старта счётчиков.

 

previousMillis = millis(); tim0++; }

Дмитрий! Это  в Вашем коде повторяется у всех )))

Оно и будет накапливаться правильней  по моему мнению:

previousMillis = previousMillis + 1000;

Нас же интересует само событие, что оно перешло через секундный барьер, а насколько  нас не интересует?  Отбрасывая это НАСКОЛЬКО мы сами вносим ошибку, разве не так?

Поэтому увеличиваем на секунду, а так как millis() шлёпает от таймера, а у нас в этом случае счет последовательный и непрерывный  и всё должно быть КАРАСО

Кварцы оказались дерьмо, в другой ардуине попало ровно в 500 миллисекундный участок (на 10 минутном цикле проверки время не ушло), посмотрим 24 часовой прогон. Понятно что с часами на миллис не всё так гладко (вероятная область применения), вот дособираю по кускам всё что задумал добавить в скетч Индийца, выложу )))

 

 

 

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

andriano пишет:

Думаю, это вариант не выдержит сильно нагруженного loop().

Мне кажется, что наиболее надежный вариант:

while (millis() - previousMillis >1000) { 
	   previousMillis +=1000 ; tim0++; }

 

мы наверно об одном и том же )))

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

andriano пишет:

Думаю, это вариант не выдержит сильно нагруженного loop().

Мне кажется, что наиболее надежный вариант:

while (millis() - previousMillis >1000) { 
	   previousMillis +=1000 ; tim0++; }

 

мы наверно об одном и том же )))
Что-то сдуплил мой комп, звиняйте
А на хреновый кварц изменяем эту тыщу на сколько надо +- , у меня 6 миллисекунд в минус позволили вывести суточный уход в точность 1 секунда

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

arduino328 пишет:

qwone пишет:

ua6em пишет:
Речь идёт об алгоритме, я добиваюсь этого корректируя 2 раза в секунду, раз в минуту, раз в час и раз в 24 часа и корректирующее воздействие выражается в миллисекундах (умножаемая дробная часть от нестабильности хода)

Зачет.  Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.

Так ТС и делает часы нереального времени.

Мастера говорили так нельзя, пришёл колхозник и сделал, я выложу картинки до и после суточного прогона )))
языком звиздеть это не мешки ворочать, а тем паче ковать железом по железу ...

Logik
Offline
Зарегистрирован: 05.08.2014

ua6em Читаем выборочно? См. http://arduino.ru/forum/programmirovanie/prostye-chasy-nerealnogo-vremeni?page=1#comment-237523

 "счётчик миллис не отстал, одновременно все счтчики показали 3600." ;)

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

Сменил mega2560, залил программу, часики на миллис за 20 часов ушли вперёд на 2 секунды, сейчас рассчитаю поправки, внесу, перезалью и по нулям поставлю на прогон...посмотрим, что день грядущий нам готовит

Кстати, часы компьютера тоже улетели на 1.71 секунды

Logik
Offline
Зарегистрирован: 05.08.2014

так  писал же ..."Вот типичные.... В среднем 30ppm т.е. 2,5сек/сутки. " 

Это обычный результат при правильном коде, без коррекции. Бодатся выше нет смысла, будут уходы на температуре. Можна конечно и это корректировать. Но для точных часов свой подход и без RTC не получится, хотяб по отключениям питания.

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Предлагаю для точности греть/охлаждать кварц элементом Пельтье)))

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

Mr.Privet пишет:
Предлагаю для точности греть/охлаждать кварц элементом Пельтье)))

Проще, берём обычный TCXO c 0,5 ppm (такие у меня во всех шарабанах стоят) и будет ЩАСТЕ,
Но мы же лёгких путей не ищем )))

Да и смотрю - столько голосистых и залихватских из щелей повылазило... на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...

ЗАТТО АНАЛИТЕГИ

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

Logik пишет:

так  писал же ..."Вот типичные.... В среднем 30ppm т.е. 2,5сек/сутки. " 

Это обычный результат при правильном коде, без коррекции. Бодатся выше нет смысла, будут уходы на температуре. Можна конечно и это корректировать. Но для точных часов свой подход и без RTC не получится, хотяб по отключениям питания.

Я же сказал уже, у меня и на дерьме уже получилось лучше секунды
Кстати утилита D4 всё еще актуальна однако )))

arduino328
Offline
Зарегистрирован: 01.09.2016

ua6em пишет:

arduino328 пишет:

qwone пишет:

ua6em пишет:
Речь идёт об алгоритме, я добиваюсь этого корректируя 2 раза в секунду, раз в минуту, раз в час и раз в 24 часа и корректирующее воздействие выражается в миллисекундах (умножаемая дробная часть от нестабильности хода)

Зачет.  Что бы часы ходили абсолютно неверно, надо их регулярно корректировать.По солнцу, по звездам, по трещинам на стрене, по случайно открытой странице.

Так ТС и делает часы нереального времени.

Мастера говорили так нельзя

Почему нельзя? Часы нереального времени можно сделать из чего-угодно.

arduino328
Offline
Зарегистрирован: 01.09.2016

ua6em пишет:

на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...

Ну и почему минимальная единица времени равна около тридцати колебаниям атома цезия?

Logik
Offline
Зарегистрирован: 05.08.2014

ua6em Вы писали "Сменил mega2560, залил программу, часики на миллис за 20 часов ушли вперёд на 2 секунды". Про ", у меня и на дерьме уже получилось лучше секунды" явно не по теме Вопрос похоже исчерпан не Ваше ж дерьмо обсуждать.

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

ua6em пишет:

Кварцы оказались дерьмо...

Кварцы - это песня!

У меня сейчас на Меге 2560 нота "ля" 437 Гц вместо 440. Пришлось даже MIDI-порт устанавливать в 31500 вместо стандартных 31250 - иначе время от времени проскакивали ошибки.

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

Logik пишет:

ua6em  Вопрос похоже исчерпан не Ваше ж дерьмо обсуждать.

Ну да, мы обсуждали то дерьмо, что переходило со страницы на страницу уже много лет вместо правильного алгоритма: (не берём во внимание константу)
 

if (millis() - previousMillis >=500) 
   {  
   previousMillis = previousMillis + 496; 

 

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

Дальше пытать безсмысленно, теоретическая точность алгоритма - 2 миллисекунды в сутки на родном кварце, остальное детали )))

         
 

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

andriano пишет:

ua6em пишет:

Кварцы оказались дерьмо...

Кварцы - это песня!

У меня сейчас на Меге 2560 нота "ля" 437 Гц вместо 440. Пришлось даже MIDI-порт устанавливать в 31500 вместо стандартных 31250 - иначе время от времени проскакивали ошибки.

А с чего вы решили, что ля 440гц? так принято...кем принято?...всё имеет гармоничную основу, разделите на частоту Шумана, отбросьте дробное, умножте на целое и она уже не 440...многие произведения классиков переиграли в этом строе послушайте...разницу почувствуйте...

nik182
Offline
Зарегистрирован: 04.05.2015

Есть такая штука, камертон называется. 440 Гц. Ни поделишь. Ни округлишь. Можно кварцы подстраивать :-,

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

ua6em пишет:

А с чего вы решили, что ля 440гц? так принято...кем принято?...всё имеет гармоничную основу, разделите на частоту Шумана, отбросьте дробное, умножте на целое и она уже не 440...многие произведения классиков переиграли в этом строе послушайте...разницу почувствуйте...

Мной принято.

Тем, что я установил коэффициент деления 2273 для частоты 1 МГц. Если округлять не до целых, а до сотых, получается 439.95. Но никак не 437. И частота Шумана не имеет е этому факту никакого отношения.

Единственное объяснение сему феномену я вижу в том, что мегагерц какой-то слишком китайский.

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

каждый материальный объект живёт в диапазоне своих вибраций, частота Шумана для Земли имеет важное значение, это Альфа ритмы головного мозга, так сказать тактовая частота нашего процессора )))

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

nik182 пишет:
Есть такая штука, камертон называется. 440 Гц. Ни поделишь. Ни округлишь. Можно кварцы подстраивать :-,

В годы моей юности на телеграфе работали мастера, настраивавшие оные, так как могли различать звуки с отклонением в 7 герц )))
 

arduino328
Offline
Зарегистрирован: 01.09.2016

ua6em пишет:

В годы моей юности на телеграфе работали мастера, настраивавшие оные, так как могли различать звуки с отклонением в 7 герц )))

Это смотря в каком частотном диапазоне.

ua6em пишет:

на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...

Ну и почему минимальная единица времени равна около тридцати колебаниям атома цезия?

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

arduino328 пишет:

ua6em пишет:

В годы моей юности на телеграфе работали мастера, настраивавшие оные, так как могли различать звуки с отклонением в 7 герц )))

Это смотря в каком частотном диапазоне.

ua6em пишет:

на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...

Ну и почему минимальная единица времени равна около тридцати колебаниям атома цезия?

на стандартной - 45 бод, 300-3000 - ширина стандартного канала, вроде как

 по цезию - если вы этого не знаете, то вам эти знания вредны )))

Logik
Offline
Зарегистрирован: 05.08.2014

Поздравляю Вас господа с очередным форумным пиздаболом отмечающимся во всех темах и озаряющий их  феерической безграмотностю :(   Нас ждут пару увлекательных месяцев пока у него пройдет обострение.

"Правильная частота для резонанса частицы цезия сегодня определена международным соглашением и составляет 9 192 631 770 герц, поэтому при делении выходного сигнала на это число должен получаться 1 Гц, или 1 цикл в секунду."  30 колебаний - 3,26нсек. Это минимальная еденица? На всяк случай планковское время 5*10е-44 сек. Применяемые в лазерной технике импулсы бывают пикосекундные, и даже доли пикосекунд.

ПС. Ширина телефонного канала по стандарту 300-3400Гц. К 45 бодам отношения не имеет.

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

ua6em пишет:

каждый материальный объект живёт в диапазоне своих вибраций, частота Шумана для Земли имеет важное значение, это Альфа ритмы головного мозга, так сказать тактовая частота нашего процессора )))

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

ua6em пишет:

nik182 пишет:
Есть такая штука, камертон называется. 440 Гц. Ни поделишь. Ни округлишь. Можно кварцы подстраивать :-,

В годы моей юности на телеграфе работали мастера, настраивавшие оные, так как могли различать звуки с отклонением в 7 герц )))

Если 7 Гц от упомянутых 440 Гц, то это порядка 25 центов - ничего удивительного: дифференциальная чувствиетльнось к частоте "простых смертных" составляет в среднем от 6 до 40 центов, а музыкантов - 3-4 цента.

Если же речь о частоте 1 кГц, то все равно 7 Гц составляет 10-12 центов, что вполне естественно даже для нетренированного уха.

arduino328
Offline
Зарегистрирован: 01.09.2016

ua6em пишет:

arduino328 пишет:

ua6em пишет:

на простой вопрос почему минимальная единица времени равна ОКОЛО тридцати колебаниям атома цезия ответить не могут...

Ну и почему минимальная единица времени равна около тридцати колебаниям атома цезия?

по цезию - если вы этого не знаете, то вам эти знания вредны

Что, на себе заметил вредность своих знаний? Тогда бегом от них! Куй железо и мешки ворочай! )))
Тем более, что минимальная единица времени не равна вышенаписанному бреду с цезием.