Генератор с регулируемоей частотой на ардуино.

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

видимо проблема в таймерах (синхронные - асинхронные), в ардуине последние

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

KovAl пишет:

Нет, Вы не об этом. Озвученная проблема не зависит от конкретной частоты тактового генератора сишки.

От этого зависит только абсолютное значение генерируемой сишкой частоты.

Так врет "генератор" или "измеритель"?

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

BOOM пишет:

KovAl пишет:

Нет, Вы не об этом. Озвученная проблема не зависит от конкретной частоты тактового генератора сишки.

От этого зависит только абсолютное значение генерируемой сишкой частоты.

Так врет "генератор" или "измеритель"?

враньё генератора  (опорной частоты SI) вроде можно подстроить

KovAl
Offline
Зарегистрирован: 25.01.2022

BOOM пишет:

Так врет "генератор" или "измеритель"?

Частотомер. "Измеритель" в вашей терминологии. :-)

Генератор легко калибруется вот этой строчкой в setup

si5351.set_correction(88794, SI5351_PLL_INPUT_XO);

А вот с частотмером всё гораздо печальнее.. Там ошибка обусловлена чем-то другим, не имеющим никакого отношения к частоте тактирования..

Скорее всего, связанным с потерей импульсов во время выполнения команд МК.

Ну или чего-то подобного. Дальше гадать не буду - это не мой уровень..

На данный момент попробовал реализовать предложенный мной же "метод дубины". :-)

Тупо умножил измеренную частоту на "волшебный коэффициент" (выделено зелёным), полученный в результате шаманства со значением ошибки. 

Цитата:
....

     freq=  TIMER3_BASE->CNT<<16  | TIMER2_BASE->CNT; //частота (не удесятерённая)   

   if (infreqpsc) {freq*=64;}// если включен внешний делитель на 64, то результат умножить на 64

    freq = freq*1.0000121602;

    if (freq>1E5){

.....

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

Навскидку, работает вроде как.. Посмотрю результаты прогона на всех пределах.

Если устроит, то оставлю так, если у автора не появится правильное решение..

 

KovAl
Offline
Зарегистрирован: 25.01.2022

KovAl пишет:

BOOM пишет:

Так врет "генератор" или "измеритель"?

Частотомер. "Измеритель" в вашей терминологии. :-)

Генератор легко калибруется вот этой строчкой в setup

si5351.set_correction(88794, SI5351_PLL_INPUT_XO);

А вот с частотмером всё гораздо печальнее.. Там ошибка обусловлена чем-то другим, не имеющим никакого отношения к частоте тактирования..

Скорее всего, связанным с потерей импульсов во время выполнения команд МК.

Ну или чего-то подобного. Дальше гадать не буду - это не мой уровень..

На данный момент попробовал реализовать предложенный мной же "метод дубины". :-)

Тупо умножил измеренную частоту на "волшебный коэффициент" (выделено зелёным), полученный в результате шаманства со значением ошибки. 

Цитата:
....

     freq=  TIMER3_BASE->CNT<<16  | TIMER2_BASE->CNT; //частота (не удесятерённая)   

   if (infreqpsc) {freq*=64;}// если включен внешний делитель на 64, то результат умножить на 64

    freq = freq*1.0000121602;

    if (freq>1E5){

.....

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

Навскидку, работает вроде как.. Посмотрю результаты прогона на всех пределах.

Если у автора не появится правильное решение, то оставлю так..

 

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

KovAl пишет:

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

Ну вот смотрите:

1 МГц - ошибка 12Гц

10 МГц - ошибка 122Гц

20 МГц - ошибка 244 Гц

100 МГц - ошибка 1216 Гц

200 МГц - ошибка 2432 Гц

Если не причину лечить, то нужно не результат корректировать, а тактовую МК. Вот смотрите, Тактовая у нас 100МГц, но  те же  100МГц на вход отстают на 1216Гц. Значит надо просто их вычесть из 100Мгц. Ну и разделить на 4, т.к. МК настроен на умножение на 4. Итого, (100 000 000 - 1260)/4 =  2499696, Всё, вносим эту цифру в настройку тактовой в начале модуля частотометра.

 void freq_meter(){
/////////////////////счётчик импульсов
si5351.set_freq(2499969600, SI5351_CLK0);//  тактовая частота по умолчанию с выхода 

Готово. Точность должна быть +\- 1 Герц.

KovAl
Offline
Зарегистрирован: 25.01.2022

dimax пишет:

Значит надо просто их вычесть из 100Мгц. Ну и разделить на 4, т.к. МК настроен на умножение на 4. Итого, (100 000 000 - 1260)/4 =  2499696, Всё, вносим эту цифру в настройку тактовой в начале модуля частотометра.

Готово. Точность должна быть +\- 1 Герц.

 ПрЭлЭстно!!  И "идеологически вЕрно" :-)

То, что доктор прописал. Уже можно вполне доверять картинке на дисплее. ;-)

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

Ну тут причина проблемы в собственно  делителе, вернее - в уровне сигнала на его входе.

MAG-N пишет:
у них еще и "чуйство" загрублять приходится, чтобы на пролетающую мимо муху не реагировали :-)

А делитель точно почему-то в этом случае ловит вторую гармонику - проверял на выходе U664.

Ну это уже не имеет отношения к собственно обсуждаемому прибору..

 

ssss
Offline
Зарегистрирован: 01.07.2016

dimax пишет:

Если не причину лечить, то нужно не результат корректировать, а тактовую МК.

Вот здесь собака и порылась...

Цитата:

Готово. Точность должна быть +\- 1 Герц.

Бред... всё равно точности не будет... напрасный труд...

ssss
Offline
Зарегистрирован: 01.07.2016

KovAl пишет:

И "идеологически вЕрно" :-)

Угу... пионерщина и наколенщина... РеспЭкт!!! )))))

И отсебятинский подГОН результата под заведомо известный... что как бы тоже вариант... )))))

=====

Не знаком с "идеологией" данного девайса... уже лет 6-7 как это всё неинтересно... от слова совсем...

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

Для нормального измерения частоты... нельзя пользоваться PLL STM32... НЕЛЬЗЯ!!! Ибо он кривой наглухо!!!

 

 

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

KovAl пишет:

Ну тут причина проблемы в собственно  делителе, вернее - в уровне сигнала на его входе.

MAG-N пишет:
у них еще и "чуйство" загрублять приходится, чтобы на пролетающую мимо муху не реагировали :-)

А делитель точно почему-то в этом случае ловит вторую гармонику - проверял на выходе U664.

Ну это уже не имеет отношения к собственно обсуждаемому прибору..

Поиграйтесь с резистором 51к с 3 ноги на землю - чем меньше - тем ниже чувствительность. И еще: на самом выходе всего этого формирователя стоит резистор 300 Ом. Без него кривовато работает. Это я к тому, а вдруг нет его? Режимом транзистора, который после делителя, тоже полезно поиграть.

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

ua6em пишет:

BOOM пишет:

KovAl пишет:

Нет, Вы не об этом. Озвученная проблема не зависит от конкретной частоты тактового генератора сишки.

От этого зависит только абсолютное значение генерируемой сишкой частоты.

Так врет "генератор" или "измеритель"?

враньё генератора  (опорной частоты SI) вроде можно подстроить

вот и я так подумал, а смотри чо понаписали )

parni6ka
Offline
Зарегистрирован: 20.02.2022

Интересный генератор. Но мне нужен более скромный, и с более точной регулировкой. А именно: диапазон: 1 -1000 Гц., шаг: 0,01 Гц. Возможность регулировки амплитуды. Плюс индикация выхода.

Возможно ли такое, и во что это обойдётся?

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

parni6ka, купите готовый на Али.

parni6ka
Offline
Зарегистрирован: 20.02.2022

Ну.. во первых. На Али в наш регион (Молдова) доставка, как с Марса. А во вторых, не думаю, что там с такими параметрами есть. Регулировка с точностью в сотую..

Если скинете ссылку на подобный, могу посмотреть на Джуме. Он к нам лоялен.

KovAl
Offline
Зарегистрирован: 25.01.2022

Давно хотел задать этот вопрос, но всё как-то не до этого было.

Кнопка энкодера работает безобразно - срабатывает как при нажатии, так и при отпускании.

Соответственно, на одно нажатие получается два значения.

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

С собственно энкодером проблем нет - всё переключает правильно, а вот кнопка..

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

Это мне одному так не повезло, или..?

 

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

KovAl, у меня нет особых проблем.  Попробуйте подключить обычную кнопку вместо кнопки энкодера  (новую, не убитую) , эффект будет такой-же?

KovAl
Offline
Зарегистрирован: 25.01.2022

dimax пишет:

Попробуйте подключить обычную кнопку вместо кнопки энкодера  (новую, не убитую) , эффект будет такой-же?

100% аналогичный.. Заменил енкодер - то же самое.

В процессе изучения проблемы обнаружил весьма странный "эффект" - если просто тупо касаться любой железкой до "земли", происходит то же самое!

Срабатывает прерывание на РВ5, что приводит к переключению "Step"..

Шунтирование линий питания (5 и 3,3В) конденсаторами 0,1 мкФ, дублирование проводами всех "земляных" выводов модулей STM и SI5351 эффекта также не далО..

Пробовал менять источник питания 5В - тоже без результата..

Вот такая вот "аппаратно-программная мистика"..

Всё собрано пока на "собашнике" из куска картона, но подобные "монтажки" собираю не впервой.

Никогда прежде с подобным не сталкивался.

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

KovAl пишет:

В процессе изучения проблемы обнаружил весьма странный "эффект" - если просто тупо касаться любой железкой до "земли", происходит то же самое! Срабатывает прерывание на РВ5, что приводит к переключению "Step"..

Офигеть) Ну это точно проблема монтажа. У меня ничего подобного нет. Ложные срабатывания были в старой версии схемы (3.5) и то, может одно на сотню нажатий.

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

To KovAl :  присоединяюсь к предыдущему посту, что-то с разводкой платы и (или) с монтажом не так. Работает энкодер и кнопка его уже не первый год, и никаких проблем.

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

parni6ka пишет:

Интересный генератор. Но мне нужен более скромный, и с более точной регулировкой. А именно: диапазон: 1 -1000 Гц., шаг: 0,01 Гц. Возможность регулировки амплитуды. Плюс индикация выхода.

Возможно ли такое, и во что это обойдётся?

Возможно. Обратитесь в раздел «Ищу исполнителя». Там и напишут «во что».

Я на макете подобное собирал - Генератор НЧ на биениях. В качестве генератора был модуль на si5351. Подробности не помню - собирал для «побаловаться». 

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

KovAl пишет:

Всё собрано пока на "собашнике" из куска картона, но подобные "монтажки" собираю не впервой.

Никогда прежде с подобным не сталкивался.

Это называется склеено соплями, да наверно ещё на дюпонах.

При нормальном монтаже нет ни каких проблем. У меня работает с момента опубликования скетча.

 

parni6ka
Offline
Зарегистрирован: 20.02.2022

Спасибо. Попробую.

KovAl
Offline
Зарегистрирован: 25.01.2022

oleg_kazakof пишет:

При нормальном монтаже нет ни каких проблем. У меня работает с момента опубликования скетча.

А фото можно увидеть?

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

KovAl пишет:

А фото можно увидеть?

Пост #60

KovAl
Offline
Зарегистрирован: 25.01.2022

MAG-N пишет:

KovAl пишет:

А фото можно увидеть?

Пост #60

 

И где тут образец "правильного монтажа"?

Образец "красивой коробки" вижу. ;-)

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

KovAl пишет:

А фото можно увидеть?

И где тут образец "правильного монтажа"?

Образец "красивой коробки" вижу. ;-)

https://wdfiles.ru/fd800a

Раскрутил, не поленился. Вот так эта "красивая коробка" изнутри выглядит:

Ещё вопросы будут?

 

KovAl
Offline
Зарегистрирован: 25.01.2022

MAG-N пишет:

Раскрутил, не поленился. Вот так эта "красивая коробка" изнутри выглядит:

 

Спасибо, но не полегчало.. :-)

Во-первых, это НЕ V3.6, а во-вторых, на вопрос о "правильном монтаже" не отвечает.

Такая "картинка" у меня на столе лежит. Пост № 688.

 

Ну лан.. "Правильные советы" я тоже умею давать, однако толку от них обычно никакого.. 

Будем думать, где же в моём случае та Жучка порылась.. :-)

Есть одна мыслишка.. Если к вечеру омикрон не одолеет, возможно и проверю её..

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

KovAl пишет:

Спасибо, но не полегчало.. :-)

"...и он пошёл попил-поел...не полегчало..." (c) В.В

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

Да, это нечто среднее между 3.2 и 3.5 Делал для себя, и меня все устраивает.

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

ua6em пишет:

KovAl пишет:

Спасибо, но не полегчало.. :-)

"...и он пошёл попил-поел...не полегчало..." (c) В.В

Надо три-четыре захода сделать. Главное, попить... :-)

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

Ребята из магазина на букву "Ч" рыбного супчика нахлебались. Уху ели ... 

Чип МЕГА328 - 1640 Р  !!!

Ну и всеми любимый STM32F103С8Т6 - 1500

 

 

Piton
Offline
Зарегистрирован: 18.01.2022

 Как в известной песне-"...то ли ещё будет ой-ой-ой".

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

Piton пишет:

 Как в известной песне-"...то ли ещё будет ой-ой-ой".

Эттто точно ой-ой-ой

oleg_kazakof
Offline
Зарегистрирован: 24.04.2015

[quote=MAG-N]

Ребята из магазина на букву "Ч" рыбного супчика нахлебались. Уху ели ... 

Чип МЕГА328 - 1640 Р  !!!

Ну и всеми любимый STM32F103С8Т6 - 1500

не надо засирать тему  подобными  коментариям. для этого есть другой раздел. генератор отличный.

желательно почистить тему от всякого спама и от вопросов типа плата собрана на картонке и не работает ?.

 

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

oleg_kazakof пишет:

не надо засирать тему  подобными  коментариям. для этого есть другой раздел. генератор отличный.

желательно почистить тему от всякого спама и от вопросов типа плата собрана на картонке и не работает ?.

Насчет картонки - Пост #60

KovAl
Offline
Зарегистрирован: 25.01.2022

oleg_kazakof пишет:

желательно почистить тему от всякого спама и от вопросов типа плата собрана на картонке и не работает ?.

Если про "картонку" - это в мой огород, то сообщаю - картонка не при делах.

Проблема была в некорректной защите от дребезга кнопки энкодера.

Изменил схему антидребезговой цепочки на такую (из V3.5), и.. - "картонка плавно превратилась в FR-4" :-) 

И кнопочка заработала, как доктор прописал.

Кстати.. Так и не смог понять алгоритм софтовой защиты от дребезга кнопки энкодера в V3.6..

Если честно, я его вообще не нашёл в скетче..

Но так-как проблема решилась аппаратно, углубляться в поиск не стал. Да и не мой это уровень..

Далее.. По поводу милливольтметра в составе прибора.

Решил его не реализовывать.

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

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

 

P.S. Немного поспамлю ещё ;-)

Насчёт "картонок" вообще..

Для 90% "цифровых" устройств (НЕ СВЧ), нет существенной разницы в материале платы.

Так же невелика и разница влияния на работу "цифровых" схем типа монтажа - печатный, или "проводочками".

Вот прескалер и генератор на Si5351, конечно, на картонке и проводочках делать не стОит.

 

P.P.S. С этим согласен -

oleg_kazakof пишет:

генератор отличный.

С небольшим уточнением - для радиолюбительского применения. С учётом "комплектующих".

gena
Offline
Зарегистрирован: 04.11.2012

Разъясните такое. В посте #1,  в строке

17

TCCR1A=1<<COM1A0; //подключить выход OC1A первого таймера

вместо этой строки применяю     bitSet(TCCR1A,COM1A0); но результат работы программы меняется-

частота устанавливается совершенно иначе. Понять почему - не могу. 

b707
Offline
Зарегистрирован: 26.05.2017

Потому что строчки не эквивалентны. Ваша строка только устанавливает нужный бит, а авторская еще и ОБНУЛЯЕТ все остальные.

А зачем вы вообще полезли менять строки, если не понимаете их значения?

KovAl
Offline
Зарегистрирован: 25.01.2022

gena пишет:

 

вместо этой строки применяю   bitSet(TCCR1A,COM1A0); но результат работы программы меняется-

частота устанавливается совершенно иначе. Понять почему - не могу. 

Может компилятор?

gena
Offline
Зарегистрирован: 04.11.2012

 "Потому что строчки не эквивалентны. Ваша строка только устанавливает нужный бит, а авторская еще и ОБНУЛЯЕТ все остальные."

Это так, да. Я полагаю, что после сброса микроконтроллера, в регистре TCCR1A, согласно даташиту, нули. Следовательно, установка только бита COM1A0 должна дать одинаковый результат, но фактически получается не так. Не подскажете ли, где и что ещё я упускаю в работе программы?

gena
Offline
Зарегистрирован: 04.11.2012

Меняю их потому, что мне так удобнее далее модифицировать программу под свою задачу. А встречающиеся "непонятки" изучаю с превеликим удовольствием. Здесь вот забуксовал, поэтому и прошу помощи.

gena
Offline
Зарегистрирован: 04.11.2012

  Итак, спасаю себя сам. Выведя на печать содержимое регистра "TCCR1A", вижу, что его бит "WGM10" перед командой "TCCR1A=1<<COM1A0;"

УЖЕ установлен. Т.е. регистр "TCCR1A" перед вышеуказанной командой равен единице. Моя команда "bitSet(TCCR1A,COM1A0);" делает содержимое равным "65-ть". Далее программа из поста #1 формирует частоту аномально.

Если же я подаю команды "bitClear(TCCR1A, WGM10); bitSet(TCCR1A,COM1A0);", то программа работает нормально. Пока не знаю, отчего к началу выполнения программы установлен бит "WGM10" (аппаратная проблема в конкретном микроконтроллере, результат работы бутлоадера, компилятор ....), может когда либо поэкспериментирую. Может быть.

   А на будущее вывод для себя (и читающим) таков: при непонятном поведении программы полезно пробовать устанавливать содержимое регистров целиком и однозначно.

b707
Offline
Зарегистрирован: 26.05.2017

Интересно, чем лоховская :) запись через bitSet() вам нравится больше, чем строчка Димакса?

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

gena
Offline
Зарегистрирован: 04.11.2012

  Лоховская запись мне более понятна, таков уж я. Только что залил в МК программу с лоховским кодом, но без бутлоадера - всё равно не пошла. Видать не  в бутлоадере дело. 

В среде 1.6.3 ( с бутлоадером)  лоховской вариант тоже на работает.

MAG-N
MAG-N аватар
Offline
Зарегистрирован: 05.06.2017

KovAl пишет:

Проблема была в некорректной защите от дребезга кнопки энкодера.

Изменил схему антидребезговой цепочки на такую (из V3.5), и.. - "картонка плавно превратилась в FR-4" :-) 

 

Я делаю так, независимо от библиотек и просто "самописного" софта. Ну а FR-4 до гигагерца-двух вполне нормально работает.

KovAl
Offline
Зарегистрирован: 25.01.2022

MAG-N пишет:

Я делаю так, независимо от библиотек и просто "самописного" софта. Ну а FR-4 до гигагерца-двух вполне нормально работает.

Собственно аналогичное также применяю в своих "поделках".

Но в данном случае, почему-то оно не прокатило..

Предполагаю, что причина в небольшой разнице напряжения между внутренней подтяжкой МК и источника 3,3V.

Плюс мелкие пульсации питания, пролезающие из БП.

Практически не заметные "глазом" (осликом), но всё же имеющие место быть.

А в софте кнопка висит на прерывании в режиме "RISING" (возрастание). Возможно, при дребезге эти паразитные импульсы создают некий "высокий" импульс.

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

MAG-N пишет:

Ну а FR-4 до гигагерца-двух вполне нормально работает.

Это мне известно. Без малого 30 лет на УКВ. :) Правда, выше 23см. не "поднимался".

b707
Offline
Зарегистрирован: 26.05.2017

gena пишет:

Только что залил в МК программу с лоховским кодом, но без бутлоадера - всё равно не пошла. Видать не  в бутлоадере дело.

причем тут бутлоадер? Прежде чем заработает ваша программа, среда ардуино ИДЕ выполняет кучу работы -  настраивает для вас системуню шину, создает экземпляры обьектов таймеров, сериалов, I2C, SPI, настраивает шим...

Откройте в ИДЕ пустой скетч

void setup() { }
void loop() { }

и скомпилируйте. Вы увидите, что для контроллера stm32f103 даже "пустой скетч" имеет размер порядка 10к и его переменные в РАМ занимают порядка 2-3кбайт.

Так что не стоит думать. что к моменту старта все регистры в МК имеют нулевые значения - многие из них уже настроены. в том числе и TCCR1A

gena
Offline
Зарегистрирован: 04.11.2012

Вполне это допускаю. Следовательно, на будущее, нужно настраивать используемые регистры с учётом таких "нежданчиков". Это важное замечание.

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

KovAl пишет:

А в софте кнопка висит на прерывании в режиме "RISING" (возрастание). Возможно, при дребезге эти паразитные импульсы создают некий "высокий" импульс.

кнопка на прерывании мне не понравилась (источник проблем)...

Vytelis
Offline
Зарегистрирован: 15.03.2022

Здраствуйте.Собрал генератор на дисплее 5510 из первых постов,есть проблема,при частоте в килогерцах перестройка частоты проскачивает через 20-30Гц,хотя шаг установлен 1Гц.Подскажите как можно это исправить?Где то до 4кГц всё нормально,потом чем выше частота тем больше проскачивает при одном шаге энкодера,но только в режиме ШИМ. https://www.youtube.com/shorts/Vq4pcb2PKmM