KovAl, про затык на 150МГц - к сожалению проблема есть, и это проблема в библиотеке, но при шаге перестройки 10МГц не виснет. Может есть какие-то обходные решения, не выяснял. По поводу калибровки -уже сказал выше. Я сам ничего не калибровал. Может, если когда -то руки дойдут, -поставлю кварц tcxo высокой точности. Понятно, что на плате si5351c за 200 рублей кварц ставят самый дешевый. Вообще в плане дополнений -с моей стороны никаких планов нет, и скорее всего уже не будет. Но исходник есть, и ничего не мешает желающим допилить под свои хотелки..
По поводу 150мГц проверил у себя - вроде как ничего не зависает. С мелким шагом не пробовал, но на десятках мГц всё нормально. Заодно сделал несколько фото частоты сишки.
Увы, виснет.. В точности так же. Попробуйте "пролистать" вперёд/назад. На "минусе" 150 зависнет.
Переход через 150MHz там какое-то сложное место, в issue фигурировали подобные странности c этой цифрой. Попробуйте перекинуть вывод изменяемой частоты на SI5351_CLK2, может полегчать. Конечно по-хорошему надо бы разобраться с этим багом, но крайне не охота.
KovAl пишет:
Весьма интересная разработка, которую, при желании автора, можно было бы существенно приблизить к прецизионному прибору. А сейчас, повторюсь, это "конструкция выходного дня", с весёлыми картинками (прямоугольники/пила/etc...). На поиграться и разобрать на запчасти..
Именно. Я всегда и писал, что это игрушка "из говна и палок".
KovAl пишет:
А Вам когда-нибудь приходилось "допиливать" чужие нестандартные разработки?
Постоянно. Собссно эта вся тема и есть постепенный допил вот этой конструкции.
Кажись разобрался с багом перехода через 150МГц, -помогло разнести выходы si каждый на разный модуль PLL, видимо библа сама до этого не может додуматься. В общем всего пару строк надо в сетап добавить.
do{ //проверка si5351, если не найден то из цикла проверки не выйдет
if (si5351.init(SI5351_CRYSTAL_LOAD_8PF, 0, 0)==0){ //Serial1.println("I2C address Si5351 not detected");
} delay(300);
si5351.update_status();
if ( !si5351.dev_status.REVID){ //Serial1.println("Error read Si5351 ID");
} } while (!si5351.dev_status.REVID);
si5351.set_ms_source(SI5351_CLK0, SI5351_PLLA);
si5351.set_ms_source(SI5351_CLK1, SI5351_PLLB);
si5351.set_freq(2500000000, SI5351_CLK0);// будущая тактовая 25МГц для мк с выхода0 (*100)
Как откалибровать тем, кто бинарник в стм-ку заливал?
Тем, кто "бинарник в стм-ку заливал", скорее всего калибровка не нужна. А кому надо, смогут и мозгами пошевелить, разобраться, что к чему и зачем. Тем более, что есть готовый "конструктор" в посте #130 для данной версии. Распаковал, запустил и делай, что хочешь, хоть тот же бинарник получай :-)
Кажись разобрался с багом перехода через 150МГц, -помогло разнести выходы si каждый на разный модуль PLL, видимо библа сама до этого не может додуматься. В общем всего пару строк надо в сетап добавить.
Помогло. Спасибо!
P.S.
dimax пишет:
Постоянно. Собссно эта вся тема и есть постепенный допил вот этой конструкции.
Ага! Плавно перешедший в совершенно другую конструкцию.
Ещё бы с вольтметром разобраться. Вот интересно, опять же. Ещё раз проверил эти 150мГц, даже на минимальном шаге ничего не зависло, или оно не каждый раз зависает?
KovAl, я сначала даже не обратил внимание на эти цвета. Поменял цвет - и всё как у вас, те же смещения. У меня есть ещё один такой дисплей от другого продавца, но проверить пока не могу, т.к. этот впаянный на плате. Проверю в другой версии платы. А где эта библиотека находится? Тоже хочу исправить. В исходном варианте смещения влево не было, это так на фото отразилось.
Что то никак не получается с этой библиотекой. В авторской сборке в папке libraries её нет. Скачал архив, подключил, пишет что подключено, но в папках её нет. Сделал изменения в архиве, переподключил, но ничего после прошивки не меняется. Разархивировал, положил в папку libraries-тоже без изменений. Пока в тупике.
Да, туда не посмотрел, спасибо. Там была библиотека Adafruit_ST7735_and_ST7789_Library, а я ещё добавил ту, что мне написал KovAl Adafruit-ST7735-Library-master и там делал изменения, что никак не влияло на результат. Короче, для меня это немножко "тёмный лес", могу заблудиться. Ещё раз спасибо, сейчас уже картинка на месте.
В общем, всё что надо было посмещал, рамку, текст, размер, теперь всё замечательно. По поводу вольтметра: та проблема, о которой я уже упоминал присутствует только в режиме измерения синуса. В режиме вольтметра тот же синус измеряется без каких либо провалов, всё почти линейно.
Да, туда не посмотрел, спасибо. Там была библиотека Adafruit_ST7735_and_ST7789_Library, а я ещё добавил ту, что мне написал KovAl Adafruit-ST7735-Library-master и там делал изменения, что никак не влияло на результат. Короче, для меня это немножко "тёмный лес", могу заблудиться. Ещё раз спасибо, сейчас уже картинка на месте.
А зачем было что-то добавлять? В папке библиотеки Adafruit_ST7735_and_ST7789_Library уже есть Adafruit_ST7735.h, Adafruit_ST7735.cpp - там и надо было делать все изменения. Эта самая Adafruit_ST7735_and_ST7789_Library - два в одном - для дисплеев с контроллерами ST7735 и ST7789. Ну а "тёмный лес" - это понемногу и со временем пройдет :-)
Так я ж её не нашёл, спрашивал где она должна быть, мне KovAl ответил где и как называется библиотека, там её не было, вот я её и установил. Но она установилась в то место, о котором я не знал. Поэтому я её разархивировал и кинул в корневую папку libraries и там делал изменения, которые никак ни на что не влияли. А потом , благодаря вашей подсказке, нашёл эту папку, где были уже обе эти библиотеки. Не дошло сразу, что программа Portable и в такой же папке надо искать библиотеку.
Так я ж её не нашёл, спрашивал где она должна быть, мне KovAl ответил
на будущее - есть простой и очень эффективный способ найти пути для всех библиотек скетча.
Просто запускаете компиляцию , когда она закончится - Ардуино ИДЕ перечислит вам все использованные библиотеки прямо в том же выводе, где поразывается размер скетча и память:
Формирователь - да, от 0 до мегагерц 80-100 не сразу, но работает, а делителей полно, хоть на 2 хоть на 256, частота от 1 ГГц и выше, у них еще и "чуйство" загрублять приходится, чтобы на пролетающую мимо муху не реагировали :-) Только после делителя надо и частотомер соответствующим образом подстроить.
А где, вернее - как поправить в скетче, не подскажете? V3.6
Собрал формирователь/делитель по схеме, которую вы предложили. Только на другом делителе - U664.
Практически тот же самый (делитель на 64), даже цоколёвка совпадает.
Пока методом тыка сделал так - в void freq_meter
// if (infreqpsc) {freq*=8;}// если включен делитель на 8 то результат умножить на 8
if (infreqpsc) {freq*=256;}// если включен внешний делитель на 64, то результат умножить на 256(64*4)
Но наверное, в этом случае делитель на 8 вообще не нужен. Только вот как его правильно убрать, не соображу.
С двоичной арифметикой и с таймерами я очень на "Вы".. :-(
В первой строке 8 заменить на 64, вторая строка не нужна. Коэффициент деления знаете только Вы, а прибор делает то, что в программу заложено. В оригинале предполагается, что на входе делитель на 8, поэтому результат измерения умножается на 8. В Вашем случае это 64.
if (infreqpsc) {freq*=64;} // если включен делитель на 64 то результат умножить на 64
А кто мешает 256 подставить? И все будет правильно, но вот почему эта ошибка в два раза - непонятно. Или встроенный делитель делит на 4, или U664 почему-то делит на 32
TIMER2_BASE->CR2=1<<5; //MMS:010 управление подчинённым в режиме "Update"
// TIMER2_BASE->SMCR= (1<<14)|(5<<0)|(infreqpsc<<13)|(infreqpsc<<12);// режим 2 внешнего тактирования + делитель/8 + разрешение работы от таймера1
TIMER2_BASE->SMCR= (1<<14)|(5<<0)|(infreqpsc<<12);// режим 2 внешнего тактирования + разрешение работы от таймера1
TIMER2_BASE->ARR=65535; //считать до максимума
Ну и тут
// if (infreqpsc) {freq*=8;}// если включен делитель на 8 то результат умножить на 8
if (infreqpsc) {freq*=64;}// если включен внешний делитель на 64, то результат умножить на 64
Теперь вылезла другая странность..
Меряю 30 МГц..
Если подавать сигнал с FFCO, то с обоих входов (формирователь/делитель) результат достоверный.
А вот если те же 30 МГц подать с выхода CLK1 SI5351, то достоверный результат будет только с формирователя.
С делителя получается ровно половина (15МГц)..
Кто-то съедает половину импульсов..
Прям как у Алисы - всё страньше и страньше, всё чудесатее и чудесатее.. :-)
всё стандартно и искать где библиотеки надо посмотрев настройки )))
а вот тут ты пальцем в небо.
Библиотеки могут лежать не только по этому пути, но так же и в каталоге пользователя, и в App_Data и в самой папке скетча.
Более того, на ПК может быть несколько каталогов Ардуино и либы будут браться из любого. Ты думаешь, как у людей получается по нескольку копий одной библиотеки?
Мой способ. описанный выше - хорош тем. что показывает пути именно к тем библиотекам, которые были использованы при данной компиляции скетча.
TIMER2_BASE->SMCR= (1<<14)|(5<<0)|(infreqpsc<<12);// режим 2 внешнего тактирования + разрешение работы от таймера1
TIMER2_BASE->ARR=65535; //считать до максимума
Ну и тут
// if (infreqpsc) {freq*=8;}// если включен делитель на 8 то результат умножить на 8
if (infreqpsc) {freq*=64;}// если включен внешний делитель на 64, то результат умножить на 64
Теперь вылезла другая странность..
Меряю 30 МГц..
Если подавать сигнал с FFCO, то с обоих входов (формирователь/делитель) результат достоверный.А вот если те же 30 МГц подать с выхода CLK1 SI5351, то достоверный результат будет только с формирователя.С делителя получается ровно половина (15МГц)..Кто-то съедает половину импульсов..
Зачем вы вообще меняете действие флага infreqpsc? Это режим аппаратного деления cредствами самого МК. Он включается кнопкой энкодера. А программирование регистра TIMER2_BASE->SMCR= (1<<14)|(5<<0)|(infreqpsc<<12); Будет делить на 2 при включённом флаге. Зачем? Скетч кстати вообще не рассчитан на подключение внешнего делителя. На низких частотах там используется другой алгоритм, он с внешним делителем не совместим, точность измерения будет хуже в число раз делителя. Логичнее было бы по этому флагу аппаратно подключать/отключать ваш делитель. Тогда бы бы общая идеология не нарушилась.
Потому-что не хватило толку найти что-то другое, за что можно зацепиться.. :-(
dimax пишет:
Это режим аппаратного деления cредствами самого МК. Он включается кнопкой энкодера.
Это я понял.
dimax пишет:
А программирование регистра TIMER2_BASE->SMCR= (1<<14)|(5<<0)|(infreqpsc<<12); Будет делить на 2 при включённом флаге. Зачем?
Об этом уже писал, что с таймерами и двоичной арифметикой строго на "Вы".. :-(
dimax пишет:
Скетч кстати вообще не рассчитан на подключение внешнего делителя. На низких частотах там используется другой алгоритм, он с внешним делителем не совместим, точность измерения будет хуже в число раз делителя.
Так мне и не надо делителя на частотах ниже 30 МГц! Там будет работать (и работает, кстати) просто формирователь входного сигнала.
Мне необходимо всего лишь обойти деление на 8 на частотах выше 30 МГц. А вот выше как раз и работать с делителем.
Или не стОит этого (отключать делитель на 8) делать?
Подскажите, пожалуйста, как это правильно реализовать.
dimax пишет:
Логичнее было бы по этому флагу аппаратно подключать/отключать ваш делитель. Тогда бы бы общая идеология не нарушилась.
Именно так и поступил
void freq_meter(){
// коммутатор "формирователь/делитель"
if (infreqpsc) { digitalWrite(PB2,LOW); }
else { digitalWrite(PB2,HIGH); }
/////////////////////счётчик импульсов
si5351.set_freq(2500000000, SI5351_CLK0);// тактовая частота по умолчанию с выхода 1
pinMode(PA15,INPUT_PULLDOWN); // вход частотометра
PB2 подключён вместо переключателя "F1/F2" , вот здесь(#134). Схема один-в-один.
Или не стОит этого (отключать делитель на 8) делать?
Его нужно выключить совсем а не переключать на /2. Уберите биты настройки делителя (12 и13) из функции частотометра совсем. т.е. TIMER2_BASE->SMCR= (1<<14)|(5<<0); Это будет вход без деления.
Что б сделать совсем правильно -нужно более кардинально переделывать функцию частотометра, что б исключить ситуацию, что сигнал идёт низкочастотный, а делитель включен.
Уберите биты настройки делителя (12 и13) из функции частотометра совсем. т.е. TIMER2_BASE->SMCR= (1<<14)|(5<<0); Это будет вход без деления.
Снова чудеса с измерением, теперь в обратную сторону.
Если подавать 30 МГц с CLK1, измерения достоверные, что с "НЧ" входа, что через делитель.
А вот если те же 30 МГц будут поданы с FFCO, то достоверные измерения только с "НЧ" входа, через делитель происходит умножение на 2..
Предполагаю, что это уже что-то аппаратное.
Буду ставить преобразователь уровней на TXS0108E. Все 5-вольтовые сигналы пропущу через него на STM.
dimax пишет:
Что б сделать совсем правильно -нужно более кардинально переделывать функцию частотометра, что б исключить ситуацию, что сигнал идёт низкочастотный, а делитель включен.
А вот здесь не врубаюсь..
В чём может быть разница измерения 15 МГц, пришедших в "НЧ" вход и теми же 15 МГц, прилетевшими с делителя (1000/64=15,625)?
Или вы имеете ввиду ситуацию, когда 1 МГц, например, измерять через делитель?
Так это уже проблемы "измеряющего". Нефига частоту ниже 30 МГц измерять на "ВЧ" входе.
Согласно даташита, U664 не гарантирует работу ниже 30 МГц.
Библиотеки могут лежать не только по этому пути, но так же и в каталоге пользователя, и в App_Data и в самой папке скетча.
Мой способ. описанный выше - хорош тем. что показывает пути именно к тем библиотекам, которые были использованы при данной компиляции скетча.
компилятор берёт библиотеки оттуда, откуда ты его ЗАСТАВЛЯЕШЬ брать, а если их там нет, то ищет строго в определённой последовательности...
Почитай документацию наконец-то )))
KovAl - а вы точность настройки частоты в даташите смотрели? - думаю, что +/- 12 гц - это очень даже хорошо для 10 Мгц, в реальности там наверняка все значительно хуже . или вы исключительно про эстетику - любите красивые цифры на дисплее. независимо от того. что они реально значат? :)
KovAl - а вы точность настройки частоты в даташите смотрели?
В даташите чего? SI5351? Так там аглицким по белому написано, что
Цитата:
the Si5351 can generate any frequency up to 200 MHz on each of its outputs with 0 ppm error.
Или Вы про что-то другое??
b707 пишет:
+/- 12 гц - это очень даже хорошо для 10 Мгц, в реальности там наверняка все значительно хуже .
Вообще-то, не 12, а 122Гц для 10 МГц.
Да, для 10 МГц можно - как говорил т. Бендер - плюнуть слюной на эти 122Гц. :-)
А как Вам 144 998 272 для 145.0 МГц? 1728 Гц, однако.
И 2,8КГц "вранья" для 225 МГц тоже не радуют..
С учётом нынешних реалий, это уже совсем не кот наплакал..
b707 пишет:
или вы исключительно про эстетику - любите красивые цифры на дисплее. независимо от того. что они реально значат? :)
Ровно наоборот. Именно эта "напудренная красота" и напрягает. Ну и в первую очередь, несоответствие действительности.
Имею желание сделать прибор, которому можно доверять, а не смотреть на нём весёлые картинки..
Вообще-то, я писАл о том, что явная кратность ошибки числу 12, "ненавязчиво намекает" на то, что эта "очепятка", возможно, устранима несколькими нажатиями клавиш.
А как Вам 144 998 272 для 145.0 МГц? 1728 Гц, однако.
И 2,8КГц "вранья" для 225 МГц тоже не радуют..
...
Вообще-то, я писАл о том, что явная кратность ошибки числу 12, "ненавязчиво намекает" на то, что эта "очепятка", возможно, устранима несколькими нажатиями клавиш.
Ещё один момент давно хочу уяснить - почему частотомер всегда 10 МГц со своего генератора (на SI5351) показывает как 9 999 878?
Да, знаю что есть такая проблема, но причин не знаю, иначе бы её не было. По идее сигнал от того-же тактового, от которого тактируется сам МК алгоритм должен измерять с точностью +/- 1Гц. Почему это не происходит -фик знает, может потому, что МК доумножает её на 4, и отсюда рассинхрон. Проблема слишком незначительная, а времени на её решение требуется очень много. Может когда-нибудь дойдут руки, выясню.
Ещё один момент давно хочу уяснить - почему частотомер всегда 10 МГц со своего генератора (на SI5351) показывает как 9 999 878?
Если я правильно понял вопрос, то:
Я собирал на макетной плате генератор на Si5351, для контроля частоты использовал цифровой осциллограф. Тоже заметил, что несмотря на то, что в синтезатор загружалась правильная частота - частота на выходе была немного не точная. Посмотрел частоту кварца si5351 - она была тоже "не в ажуре". Короче просто сделал "калибровку" и все стало тип-топ.)
Проблема слишком незначительная, а времени на её решение требуется очень много.
Ну не такая уж и незначительная, если рассматривать её как абсолютное значение, а не в %.
вообще-то в профессиональной технике принято оценивать именно относительную погрешность , выраженную в долях базовой величины, а не пугаться абсолютных цифр.
И потом, вам кажется уже указывали, что это любительский проект, созданный автором для собственного удовольствия, а вы постоянно высказываете к нему претензии, как к профессиональному инструменту.
В таких проектах действует правило - инициатива наказуема. Автор сделал то, что ему было интересно. Если хотите улучшить или что-то не устраивает - исходный код открыт, берите и исправляйте. Или попытайтесь заинтересовать автора своими идеями по развитию проекта.
Вносить в меню операцию, которая выполняется _один_ раз нет никакого смысла.
Вы забыли про "овраги". Про тех, для кого всё то, что написано в https://github.com/etherkit/Si5351Arduino - не более чем "барбармия кергуду".
Как откалибровать тем, кто бинарник в стм-ку заливал?
Для них генератор превратится в игрушку с красивыми картинками на экране, не более того..
P.S. Немного мыслей вслух. Про меню.
Почему бы не сделать так называемое "Сервисное меню"? Первый пункт его уже есть - калибровка генератора.
Вызывать это меню не стандартным перебором меню, а например, удержанием кнопки энкодера при включении девайса.
KovAl, про затык на 150МГц - к сожалению проблема есть, и это проблема в библиотеке, но при шаге перестройки 10МГц не виснет. Может есть какие-то обходные решения, не выяснял. По поводу калибровки -уже сказал выше. Я сам ничего не калибровал. Может, если когда -то руки дойдут, -поставлю кварц tcxo высокой точности. Понятно, что на плате si5351c за 200 рублей кварц ставят самый дешевый. Вообще в плане дополнений -с моей стороны никаких планов нет, и скорее всего уже не будет. Но исходник есть, и ничего не мешает желающим допилить под свои хотелки..
KovAl, про затык на 150МГц - к сожалению проблема есть, и это проблема в библиотеке, но при шаге перестройки 10МГц не виснет.
Увы, виснет.. В точности так же.
Попробуйте "пролистать" вперёд/назад. На "минусе" 150 зависнет.
По поводу калибровки -уже сказал выше. Я сам ничего не калибровал. Может, если когда -то руки дойдут, -поставлю кварц tcxo высокой точности.
Это какой же, интересно? Рубидиевый генератор за $к? :-)
Любой TCXO - это ничто иное, как ТЕРМОСТАБИЛИЗИРОВАННЫЙ кварцевый генератор.
Т.е. обеспечивается высокая стабильность частоты генерации, в зависимости от температуры.
К точности установки частоты это имеет не такое уж и близкое отношение..
И при таком "умножении", как в SI5351, по-любому потребуется калибровка даже с крутым ТСХО.
А вольтметр как откалибруете? Будете ставить "батарейку высокой точности"? ;-)
Вообще в плане дополнений -с моей стороны никаких планов нет, и скорее всего уже не будет.
Очень и очень печально.. :-(
Весьма интересная разработка, которую, при желании автора, можно было бы существенно приблизить к прецизионному прибору.
А сейчас, повторюсь, это "конструкция выходного дня", с весёлыми картинками (прямоугольники/пила/etc...).
На поиграться и разобрать на запчасти..
Но исходник есть, и ничего не мешает желающим допилить под свои хотелки..
А Вам когда-нибудь приходилось "допиливать" чужие нестандартные разработки?
По поводу 150мГц проверил у себя - вроде как ничего не зависает. С мелким шагом не пробовал, но на десятках мГц всё нормально. Заодно сделал несколько фото частоты с
ишки.



Увы, виснет.. В точности так же. Попробуйте "пролистать" вперёд/назад. На "минусе" 150 зависнет.
Переход через 150MHz там какое-то сложное место, в issue фигурировали подобные странности c этой цифрой. Попробуйте перекинуть вывод изменяемой частоты на SI5351_CLK2, может полегчать. Конечно по-хорошему надо бы разобраться с этим багом, но крайне не охота.
Именно. Я всегда и писал, что это игрушка "из говна и палок".
А Вам когда-нибудь приходилось "допиливать" чужие нестандартные разработки?
Постоянно. Собссно эта вся тема и есть постепенный допил вот этой конструкции.
Кажись разобрался с багом перехода через 150МГц, -помогло разнести выходы si каждый на разный модуль PLL, видимо библа сама до этого не может додуматься. В общем всего пару строк надо в сетап добавить.
Вы забыли про "овраги". Про тех, для кого всё то, что написано в https://github.com/etherkit/Si5351Arduino - не более чем "барбармия кергуду".
Как откалибровать тем, кто бинарник в стм-ку заливал?
Тем, кто "бинарник в стм-ку заливал", скорее всего калибровка не нужна. А кому надо, смогут и мозгами пошевелить, разобраться, что к чему и зачем. Тем более, что есть готовый "конструктор" в посте #130 для данной версии. Распаковал, запустил и делай, что хочешь, хоть тот же бинарник получай :-)
Кажись разобрался с багом перехода через 150МГц, -помогло разнести выходы si каждый на разный модуль PLL, видимо библа сама до этого не может додуматься. В общем всего пару строк надо в сетап добавить.
Помогло. Спасибо!
P.S.
Постоянно. Собссно эта вся тема и есть постепенный допил вот этой конструкции.
Ага! Плавно перешедший в совершенно другую конструкцию.
Ох уж эти сказочники! Ох уж эти сказочки! :-)
Ещё бы с вольтметром разобраться. Вот интересно, опять же. Ещё раз проверил эти 150мГц, даже на минимальном шаге ничего не зависло, или оно не каждый раз зависает?
Piton, а вы не пытались победить путанку с цветом на дисплее?
Посмотрел ваши фотки - у меня та же беда - красный с синим перепутан.
Что только не пробовал подсунуть компилятору - никакого эффекта.. :-(
Тут уже писали, что такая беда с дисплеем 128*128, но у меня вроде как тот же, что и у автора - "1.8TFT SPI 128*160".
А со строкой инициализации tft.initR(INITR_BLACKTAB); пробовали поиграться?
А со строкой инициализации tft.initR(INITR_BLACKTAB); пробовали поиграться?
Ай, спасибо, MAG-N!!! А мужики-то и не знали! :-)
А я весь ум сломал, 333 библы перецеплял, перелопатил, 1000 ..ёв в глотку и якорь в ...у китайцам отправил. :-)
Всего-то и делов - надо было на цвет "ярлычка" на дисплее глянуть.
А он зелёный у моего экранчика...
tft.initR(INITR_GREENTAB); - и все дела!
вообще-то в библиотеке всего 4 режима из 14, я допиливал нужные мне еще два
Блин.. Достала меня уже эта "зелёная бирка"!
Вчера на радостях не заметил, что с правильными цветами картинка сдвинулась вниз и вправо.
Совсем чуть, но всё одно - неприятно..
MAG-N, не подскажете, где покрутить?
P.S. Нашёл в библе Adafruit_ST7735.cpp
сделал вот так:
Всё вернулось на место.
Может проще можно было сделать?
P.P.S. Кстати.. Piton, а у вас, похоже, картинка влево сдвинута.
Всё-таки, видимо не зря я кЕтайцам "морское пожелание" направлял. :-)
А если так tft.initR(); без всяких бирок?
KovAl, я сначала даже не обратил внимание на эти цвета. Поменял цвет - и всё как у вас, те же смещения. У меня есть ещё один такой дисплей от другого продавца, но проверить пока не могу, т.к. этот впаянный на плате. Проверю в другой версии платы. А где эта библиотека находится? Тоже хочу исправить. В исходном варианте смещения влево не было, это так на фото отразилось.
В исходном варианте смещения влево не было, это так на фото отразилось.
Уверены? А где край рамки слева? И цифирка "2" на фото, где 225МГц вроде как "за угол слегка зашла".
А где эта библиотека находится?
Если нет в папке со скетчем и в скетче объявлена как #include <Adafruit_ST7735.h>(именно в угловых скобках, а не в кавычках), то скорее всего в
Ну или в папке libraries, где установлена Arduino IDE.
А если так tft.initR(); без всяких бирок?
Гм.. Судя по условию в библе
дисплею будет выдана "красная метка" :-)
И во что это выльется, одному дисплею известно.. Да и лень уже пробовать. ;-)
Что то никак не получается с этой библиотекой. В авторской сборке в папке libraries её нет. Скачал архив, подключил, пишет что подключено, но в папках её нет. Сделал изменения в архиве, переподключил, но ничего после прошивки не меняется. Разархивировал, положил в папку libraries-тоже без изменений. Пока в тупике.
Что то никак не получается с этой библиотекой. В авторской сборке в папке libraries её нет.
Плохо искали. В авторской сборке Portable\sketchbook\libraries
Да, туда не посмотрел, спасибо. Там была библиотека Adafruit_ST7735_and_ST7789_Library, а я ещё добавил ту, что мне написал KovAl Adafruit-ST7735-Library-master и там делал изменения, что никак не влияло на результат. Короче, для меня это немножко "тёмный лес", могу заблудиться. Ещё раз спасибо, сейчас уже картинка на месте.
В общем, всё что надо было посмещал, рамку, текст, размер, теперь всё замечательно. По поводу вольтметра: та проблема, о которой я уже упоминал присутствует только в режиме измерения синуса. В режиме вольтметра тот же синус измеряется без каких либо провалов, всё почти линейно.
Да, туда не посмотрел, спасибо. Там была библиотека Adafruit_ST7735_and_ST7789_Library, а я ещё добавил ту, что мне написал KovAl Adafruit-ST7735-Library-master и там делал изменения, что никак не влияло на результат. Короче, для меня это немножко "тёмный лес", могу заблудиться. Ещё раз спасибо, сейчас уже картинка на месте.
А зачем было что-то добавлять? В папке библиотеки Adafruit_ST7735_and_ST7789_Library уже есть Adafruit_ST7735.h, Adafruit_ST7735.cpp - там и надо было делать все изменения. Эта самая Adafruit_ST7735_and_ST7789_Library - два в одном - для дисплеев с контроллерами ST7735 и ST7789. Ну а "тёмный лес" - это понемногу и со временем пройдет :-)
Так я ж её не нашёл, спрашивал где она должна быть, мне KovAl ответил где и как называется библиотека, там её не было, вот я её и установил. Но она установилась в то место, о котором я не знал. Поэтому я её разархивировал и кинул в корневую папку libraries и там делал изменения, которые никак ни на что не влияли. А потом , благодаря вашей подсказке, нашёл эту папку, где были уже обе эти библиотеки. Не дошло сразу, что программа Portable и в такой же папке надо искать библиотеку.
Главное, что руки не опустили. Получилось, и это хорошо.
Так я ж её не нашёл, спрашивал где она должна быть, мне KovAl ответил
на будущее - есть простой и очень эффективный способ найти пути для всех библиотек скетча.
Просто запускаете компиляцию , когда она закончится - Ардуино ИДЕ перечислит вам все использованные библиотеки прямо в том же выводе, где поразывается размер скетча и память:
Это если подробный вывод включен. А по-умолчанию "Скетч использует..."
Формирователь - да, от 0 до мегагерц 80-100 не сразу, но работает, а делителей полно, хоть на 2 хоть на 256, частота от 1 ГГц и выше, у них еще и "чуйство" загрублять приходится, чтобы на пролетающую мимо муху не реагировали :-) Только после делителя надо и частотомер соответствующим образом подстроить.
А где, вернее - как поправить в скетче, не подскажете? V3.6
Собрал формирователь/делитель по схеме, которую вы предложили. Только на другом делителе - U664.
Практически тот же самый (делитель на 64), даже цоколёвка совпадает.
Пока методом тыка сделал так - в void freq_meter
Но наверное, в этом случае делитель на 8 вообще не нужен. Только вот как его правильно убрать, не соображу.
С двоичной арифметикой и с таймерами я очень на "Вы".. :-(
В первой строке 8 заменить на 64, вторая строка не нужна. Коэффициент деления знаете только Вы, а прибор делает то, что в программу заложено. В оригинале предполагается, что на входе делитель на 8, поэтому результат измерения умножается на 8. В Вашем случае это 64.
if (infreqpsc) {freq*=64;} // если включен делитель на 64 то результат умножить на 64
В оригинале предполагается, что на входе делитель на 8.
Гм.. Так это, наверное, софтверный делитель?
if (infreqpsc) {freq*=64;} // если включен делитель на 64 то результат умножить на 64
Увы.. Результат в этом случае будет в 4 раза меньше. Почему так, сам не понял.
Предполагаю, что это связано с теми самыми, не любимыми мною таймерами и двоичной арифметикой.
Наверное, всё же надо просто убрать делитель на 8, и после этого результат умножить на 64.
Вот только как это сделать "культурно", пока не могу сообразить..
Я не учел, что делитель на 8 встроенный. Тогда вместо 64 надо 512 подставить: 8*64=512
Можно применить другие делители
МС12080 10/20/40/80
МС12093 2/4/8
Я не учел, что делитель на 8 встроенный. Тогда вместо 64 надо 512 подставить: 8*64=512
Неа.. Тогда результат будет в 2 раза больше. :-)
Я тоже так сначала посчитал, но не прокатило..
Можно применить другие делители
Уже не можно, т.к. плата формирователя/делителя уже исполнена в рабочем варианте (не на макетке).
И наверное, всё же проще софт поправить?
Или мы не ищем лёгких путей? :-)
А кто мешает 256 подставить? И все будет правильно, но вот почему эта ошибка в два раза - непонятно. Или встроенный делитель делит на 4, или U664 почему-то делит на 32
Метод тыка - наше всё! :-)
Победил с его помощью.
Ну и тут
Теперь вылезла другая странность..
Меряю 30 МГц..
Если подавать сигнал с FFCO, то с обоих входов (формирователь/делитель) результат достоверный.
А вот если те же 30 МГц подать с выхода CLK1 SI5351, то достоверный результат будет только с формирователя.
С делителя получается ровно половина (15МГц)..
Кто-то съедает половину импульсов..
Прям как у Алисы - всё страньше и страньше, всё чудесатее и чудесатее.. :-)
Это если подробный вывод включен. А по-умолчанию "Скетч использует..."
всё стандартно и искать где библиотеки надо посмотрев настройки )))

всё стандартно и искать где библиотеки надо посмотрев настройки )))

а вот тут ты пальцем в небо.
Библиотеки могут лежать не только по этому пути, но так же и в каталоге пользователя, и в App_Data и в самой папке скетча.
Более того, на ПК может быть несколько каталогов Ардуино и либы будут браться из любого. Ты думаешь, как у людей получается по нескольку копий одной библиотеки?
Мой способ. описанный выше - хорош тем. что показывает пути именно к тем библиотекам, которые были использованы при данной компиляции скетча.
TIMER2_BASE->SMCR= (1<<14)|(5<<0)|(infreqpsc<<12);// режим 2 внешнего тактирования + разрешение работы от таймера1
Ну и тут
Теперь вылезла другая странность..
Меряю 30 МГц..
Если подавать сигнал с FFCO, то с обоих входов (формирователь/делитель) результат достоверный.А вот если те же 30 МГц подать с выхода CLK1 SI5351, то достоверный результат будет только с формирователя.С делителя получается ровно половина (15МГц)..Кто-то съедает половину импульсов..
Зачем вы вообще меняете действие флага infreqpsc? Это режим аппаратного деления cредствами самого МК. Он включается кнопкой энкодера. А программирование регистра TIMER2_BASE->SMCR= (1<<14)|(5<<0)|(infreqpsc<<12); Будет делить на 2 при включённом флаге. Зачем? Скетч кстати вообще не рассчитан на подключение внешнего делителя. На низких частотах там используется другой алгоритм, он с внешним делителем не совместим, точность измерения будет хуже в число раз делителя. Логичнее было бы по этому флагу аппаратно подключать/отключать ваш делитель. Тогда бы бы общая идеология не нарушилась.
Зачем вы вообще меняете действие флага infreqpsc?
Потому-что не хватило толку найти что-то другое, за что можно зацепиться.. :-(
Это я понял.
Об этом уже писал, что с таймерами и двоичной арифметикой строго на "Вы".. :-(
Так мне и не надо делителя на частотах ниже 30 МГц! Там будет работать (и работает, кстати) просто формирователь входного сигнала.
Мне необходимо всего лишь обойти деление на 8 на частотах выше 30 МГц. А вот выше как раз и работать с делителем.
Или не стОит этого (отключать делитель на 8) делать?
Подскажите, пожалуйста, как это правильно реализовать.
Именно так и поступил
PB2 подключён вместо переключателя "F1/F2" , вот здесь(#134). Схема один-в-один.
Или не стОит этого (отключать делитель на 8) делать?
Его нужно выключить совсем а не переключать на /2. Уберите биты настройки делителя (12 и13) из функции частотометра совсем. т.е. TIMER2_BASE->SMCR= (1<<14)|(5<<0); Это будет вход без деления.
Что б сделать совсем правильно -нужно более кардинально переделывать функцию частотометра, что б исключить ситуацию, что сигнал идёт низкочастотный, а делитель включен.
Уберите биты настройки делителя (12 и13) из функции частотометра совсем. т.е. TIMER2_BASE->SMCR= (1<<14)|(5<<0); Это будет вход без деления.
Снова чудеса с измерением, теперь в обратную сторону.
Если подавать 30 МГц с CLK1, измерения достоверные, что с "НЧ" входа, что через делитель.
А вот если те же 30 МГц будут поданы с FFCO, то достоверные измерения только с "НЧ" входа, через делитель происходит умножение на 2..
Предполагаю, что это уже что-то аппаратное.
Буду ставить преобразователь уровней на TXS0108E. Все 5-вольтовые сигналы пропущу через него на STM.
Что б сделать совсем правильно -нужно более кардинально переделывать функцию частотометра, что б исключить ситуацию, что сигнал идёт низкочастотный, а делитель включен.
А вот здесь не врубаюсь..
В чём может быть разница измерения 15 МГц, пришедших в "НЧ" вход и теми же 15 МГц, прилетевшими с делителя (1000/64=15,625)?
Или вы имеете ввиду ситуацию, когда 1 МГц, например, измерять через делитель?
Так это уже проблемы "измеряющего". Нефига частоту ниже 30 МГц измерять на "ВЧ" входе.
Согласно даташита, U664 не гарантирует работу ниже 30 МГц.
Ещё один момент давно хочу уяснить - почему частотомер всегда 10 МГц со своего генератора (на SI5351) показывает как 9 999 878?
Ну и не только 10 МГц. Практически все сгенерённые сишкой частоты выдает с одной и той же погрешностью, кратной 12.
1 МГц отображается как 999 988, 10МГц - соотв. как 9 999 878 и т.п..
Это неустранимая погрешность, связанная с тем, что тактирование CPU идёт от измеряемого генератора?
И при измерении "внешних" устройств этой ошибки не будет.
Или всё же сиё живёт где-то в дебрях софта?
а вот тут ты пальцем в небо.
Библиотеки могут лежать не только по этому пути, но так же и в каталоге пользователя, и в App_Data и в самой папке скетча.
Мой способ. описанный выше - хорош тем. что показывает пути именно к тем библиотекам, которые были использованы при данной компиляции скетча.
компилятор берёт библиотеки оттуда, откуда ты его ЗАСТАВЛЯЕШЬ брать, а если их там нет, то ищет строго в определённой последовательности...
Почитай документацию наконец-то )))
KovAl - а вы точность настройки частоты в даташите смотрели? - думаю, что +/- 12 гц - это очень даже хорошо для 10 Мгц, в реальности там наверняка все значительно хуже . или вы исключительно про эстетику - любите красивые цифры на дисплее. независимо от того. что они реально значат? :)
Почитай документацию наконец-то )))
лучше ты читай внимательнее. Твое замечание не про то, о чем я писал.
далее дискутировать не буду. У нас с тобой, как мне кажется, есть четкое мнение друг о друге ( о моем ты, наверно. догадываешься).
Не вижу смысла продолжать.
В даташите чего? SI5351? Так там аглицким по белому написано, что
Или Вы про что-то другое??
+/- 12 гц - это очень даже хорошо для 10 Мгц, в реальности там наверняка все значительно хуже .
Вообще-то, не 12, а 122Гц для 10 МГц.
Да, для 10 МГц можно - как говорил т. Бендер - плюнуть слюной на эти 122Гц. :-)
А как Вам 144 998 272 для 145.0 МГц? 1728 Гц, однако.
И 2,8КГц "вранья" для 225 МГц тоже не радуют..
С учётом нынешних реалий, это уже совсем не кот наплакал..
или вы исключительно про эстетику - любите красивые цифры на дисплее. независимо от того. что они реально значат? :)
Ровно наоборот. Именно эта "напудренная красота" и напрягает. Ну и в первую очередь, несоответствие действительности.
Имею желание сделать прибор, которому можно доверять, а не смотреть на нём весёлые картинки..
Вообще-то, я писАл о том, что явная кратность ошибки числу 12, "ненавязчиво намекает" на то, что эта "очепятка", возможно, устранима несколькими нажатиями клавиш.
Вообще-то, не 12, а 122Гц для 10 МГц.
А как Вам 144 998 272 для 145.0 МГц? 1728 Гц, однако.
И 2,8КГц "вранья" для 225 МГц тоже не радуют..
...
Вообще-то, я писАл о том, что явная кратность ошибки числу 12, "ненавязчиво намекает" на то, что эта "очепятка", возможно, устранима несколькими нажатиями клавиш.
Ни 122, ни 2800 не кратны 12.
Не вижу смысла продолжать.
отож! ты случаем не под знаком весов родился, у них обычно такой апломб изрядный
Ещё один момент давно хочу уяснить - почему частотомер всегда 10 МГц со своего генератора (на SI5351) показывает как 9 999 878?
Да, знаю что есть такая проблема, но причин не знаю, иначе бы её не было. По идее сигнал от того-же тактового, от которого тактируется сам МК алгоритм должен измерять с точностью +/- 1Гц. Почему это не происходит -фик знает, может потому, что МК доумножает её на 4, и отсюда рассинхрон. Проблема слишком незначительная, а времени на её решение требуется очень много. Может когда-нибудь дойдут руки, выясню.
Ещё один момент давно хочу уяснить - почему частотомер всегда 10 МГц со своего генератора (на SI5351) показывает как 9 999 878?
Если я правильно понял вопрос, то:
Я собирал на макетной плате генератор на Si5351, для контроля частоты использовал цифровой осциллограф. Тоже заметил, что несмотря на то, что в синтезатор загружалась правильная частота - частота на выходе была немного не точная. Посмотрел частоту кварца si5351 - она была тоже "не в ажуре". Короче просто сделал "калибровку" и все стало тип-топ.)
Проблема слишком незначительная, а времени на её решение требуется очень много.
Ну не такая уж и незначительная, если рассматривать измерение частот от 100МГц и выше.
Ошибка в 2,752 КГц на 225МГц уже существенна, если рассматривать её как абсолютное значение, а не в %.
Кстати.. Ошибка проявляется и при измерении частоты и от внешнего генератора тоже.
Т.е. "внутреннее тактирование" тут не при делах..
А что если пойти путём лечения не причины, а следствия? Т.е. тупо прибавлять к измеренной частоте некое значение.
Просматривается же явная зависимость абсолютного значения ошибки от какого-то некоего числа.
Ну вот смотрите:
1 МГц - ошибка 12Гц
10 МГц - ошибка 122Гц
20 МГц - ошибка 244 Гц
100 МГц - ошибка 1216 Гц
200 МГц - ошибка 2432 Гц
Если я правильно понял вопрос..
..skip..
...просто сделал "калибровку" и все стало тип-топ.
Нет, Вы не об этом. Озвученная проблема не зависит от конкретной частоты тактового генератора сишки.
От этого зависит только абсолютное значение генерируемой сишкой частоты.
Проблема слишком незначительная, а времени на её решение требуется очень много.
Ну не такая уж и незначительная, если рассматривать её как абсолютное значение, а не в %.
вообще-то в профессиональной технике принято оценивать именно относительную погрешность , выраженную в долях базовой величины, а не пугаться абсолютных цифр.
И потом, вам кажется уже указывали, что это любительский проект, созданный автором для собственного удовольствия, а вы постоянно высказываете к нему претензии, как к профессиональному инструменту.
В таких проектах действует правило - инициатива наказуема. Автор сделал то, что ему было интересно. Если хотите улучшить или что-то не устраивает - исходный код открыт, берите и исправляйте. Или попытайтесь заинтересовать автора своими идеями по развитию проекта.