Перейти к содержимому

Добро пожаловать на Первый форум сообщества радиолюбителей Одессы и Одесской области!

Добро пожаловать на Первый форум сообщества радиолюбителей Одессы и Одесской области. Чтобы общаться на форуме, скачивать файлы и использовать другие возможности, Вам необходимо зарегистрироваться. Или войти под своим логином. Так же вы можете войти на форум через свою учетную запись в Facebook или Twitter.
Внимание!
Наш форум не поддерживает регистрацию с почтового сервера mail.ru, bk.ru, inbox.ru, list.ru, mail.ua! Если вы всё же решили использовать эту почту, и не получили письмо подтверждения, то возможно оно попало в спам. В этом случае не забудьте его отметить как не спам!
Проблемы с регистрацией? Читаем эту тему.
Чтобы сменить фон форума, внизу с лева нажмите "Изменить Стиль".
Форум полностью поддерживает Русский язык.

Фотография

Вариант синтезатора частоты на Si5351 (UR5FFR)


Сообщений в теме: 224

#141
US5IVZ

US5IVZ

    Любопытный

  • Пользователи
  • 21 сообщений
  • 0 тем
  • Позывной:US5IVZ
  • Город:Донецк

trx.SwitchToBand(0) надо - нумерация бендов с 0 начинается

 

Да,хоть 0 хоть 1 результат один -в аттаче.

Пока ,не подключу 160М ,.

40 м невозможно запустить,пока не подключено 160 и 80 М ,ну и т.д по нарастающей.

Прикрепленные файлы

  • Прикрепленный файл  80M_ only.jpg   17,87К   Количество загрузок: 12


#142
Relayer

Странно. На неделе гляну что там может быть



#143
US5IVZ

US5IVZ

    Любопытный

  • Пользователи
  • 21 сообщений
  • 0 тем
  • Позывной:US5IVZ
  • Город:Донецк

Relayer,

Спасибо-!

Очень ,надеюсь!  Ваша разработка мне нравиться  и подходит ,под мою задачу, больше всего !!!

СПАСИБО за бескорыстный труд!



#144
Relayer

Да,хоть 0 хоть 1 результат один -в аттаче.

 

Проверил с одним диапазоном 40м и с двумя 12+10м - все работает. Так же проверил со списком диапазонов которые расположены не по возрастанию частот

 

#define BAND_COUNT 3

#define DEFINED_BANDS \
  {30,  10100000L,        0,  10150000L, USB}, \
  {20,  14000000L, 14100000L, 14350000L, USB}, \
  {40,   7000000L,  7045000L,  7200000L, LSB}

Тоже все работает.

 

Вы все же еще раз убедитесь что в случае одного диапазона trx.SwitchToBand вызывается с аргументом 0 т.к. иначе вы вылетаете за границы массива и на экране будет "мусор". Нумерация диапазонов начинается с 0. Если у вас два диапазона и вы хотите стартовать со 2го то trx.SwitchToBand в setup() надо вызывать с аргументом 1, а не 2. То есть на 1 меньше



#145
US5IVZ

US5IVZ

    Любопытный

  • Пользователи
  • 21 сообщений
  • 0 тем
  • Позывной:US5IVZ
  • Город:Донецк

Да, вроде бы все так и делаю. Но результата-Увы..

Это скриншоты к фото выложенному ранее.

Прикрепленные файлы

  • Прикрепленный файл  80M_only_config.jpg   154,97К   Количество загрузок: 29
  • Прикрепленный файл  80M_only.jpg   145,64К   Количество загрузок: 29


#146
Relayer

Так, да не так. У вас в строке задания параметров диапазона "{80, 350....." в конце стоит запятая. А ее там быть не должно

 

#define DEFINED_BANDS \
  {80,   3500000L,  3600000L,  3800000L, LSB}

Каменты возле trx.SwitchToBand правильны, да не совсем. Это ИНДЕКС диапазона с нумерацией начиная с 0 в списке диапазонов. Если у вас там 2 диапазона то допустимые индексы 0 и 1. Если 3 - то 0,1,2. И т.д.

 



					
					

#147
US5IVZ

US5IVZ

    Любопытный

  • Пользователи
  • 21 сообщений
  • 0 тем
  • Позывной:US5IVZ
  • Город:Донецк

""У вас в строке задания параметров диапазона "{80, 350....." в конце стоит запятая. А ее там быть не должно""

Ой,ей ей-Ох!  Убрал Эту запятую.Скомпилировал. Загрузил ,,но все едино. Изменений нет!



#148
Relayer

Там в #define DEFINED_BANDS нельзя коментарить строки. Вот так нельзя:

#define DEFINED_BANDS \
//  {160,  1810000L,  1840000L,  2000000L, LSB}, \
  {80,   3500000L,  3600000L,  3800000L, LSB}
//  {40,   7000000L,  7045000L,  7200000L, LSB}, \
//  {30,  10100000L,        0,  10150000L, USB}, \

Надо убирать лишние

 

#define DEFINED_BANDS \
  {80,   3500000L,  3600000L,  3800000L, LSB}

 

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



#149
US5IVZ

US5IVZ

    Любопытный

  • Пользователи
  • 21 сообщений
  • 0 тем
  • Позывной:US5IVZ
  • Город:Донецк

Там в #define DEFINED_BANDS нельзя коментарить строки.

 

"Вот,оно что...Михалыч!" (с)

Ух! Наконец-то.Тупо убрал все лишние ,диапазоны путем -delete, и скопировал строку с описание границ 80М туда,где было описание 160метрового диап. И все получилось.Ура!

Relayer, огромное СПАСИБО!!!



#150
Relayer

Ну вот и чудненько. Не забывайте корректировать диапазон с которого стартуем (trx.SwitchToBand в setup()) чтобы не "вылететь" за границы списка диапазонов. Иначе на экране будут в лучшем случае нули, в худшем - мусор



#151
US5IVZ

US5IVZ

    Любопытный

  • Пользователи
  • 21 сообщений
  • 0 тем
  • Позывной:US5IVZ
  • Город:Донецк

Понял. Спасибо "за науку"! Буду теперь разбираться с раскладкой гетеродинов и IF.



#152
Gluck35533

Gluck35533

    Любопытный

  • Пользователи
  • 17 сообщений
  • 0 тем
  • Город:Москва

Решил добавить поддержку ST7735 пока автор занят и т.к. ILI9341 у меня нет.

Скачал библиотеки PDQ_GFX, PDQ_ST7735, PDQ_ILI9341

 

Чтобы не удалять поддержку экранов ILI9341 сделал следующее:

 

В Syntez.ino после строк:

#ifdef DISPLAY_TFT_ILI9341
  #include "disp_ILI9341.h"
#endif

Добавил:

#ifdef DISPLAY_TFT_ST7735
  #include "disp_ST7735.h"
#endif

 

После строк:

#ifdef DISPLAY_TFT_ILI9341
  Display_ILI9341_SPI disp;
#endif

Добавил:

#ifdef DISPLAY_TFT_ST7735
  Display_ST7735_SPI disp;
#endif

 

В config.h внёс изменения:

// раскоментарить тип используемого дисплея (только один!)
//#define DISPLAY_LCD_1602
//#define DISPLAY_TFT_ILI9341
#define DISPLAY_TFT_ST7735
 

Добавил в проект disp_ST7735.h и disp_ST7735.cpp которые создал из disp_ILI9341.h и disp_ILI9341.cpp путем их переименования.

Оригинальные disp_ILI9341.h и disp_ILI9341.cpp тоже оставил в папке проекта.

 

Отредактировал в созданных disp_ST7735.h и disp_ST7735.cpp имена классов, функций и имена макросов в препроцессорных директивах т.е. заменил везде ILI9341 на ST7735.

В disp_ST7735.cpp указал пины к которым подключен дисплей.

Вывод reset дисплея подключил к выводу reset ардуины иначе дисплей не заводился.

 

Так вот вопрос:

Если оставить файлы disp_ILI9341.h и disp_ILI9341.cpp в папке проекта и попробовать его откомпилировать то вываливается куча ошибок типа:

 

sketch\disp_ST7735.cpp.o (symbol from plugin): In function `Display_ST7735_SPI::reset()':

 

(.text+0x0): multiple definition of `cur_freq'

 

sketch\disp_ILI9341.cpp.o (symbol from plugin) :

(.text+0x0): first defined here

 
И так по всем переменным которые определены в disp_ILI9341.cpp т.е. cur_freq, cur_freq2, cur_freq_buf, cur_vfo_idx.... и т.д.
 
По моей логике если в config.h есть единственный раскоментированый #define DISPLAY_TFT_ST7735
А в Syntez.ino есть директивы препроцессору:
#ifdef DISPLAY_TFT_ST7735
  #include "disp_ST7735.h"
#endif
то причем тут вообще disp_ILI9341.cpp и multiple definition?
По моему мнению компилятор в disp_ILI9341.cpp вообще заглядывать не должен?
Поправьте меня если я не прав.
 
Если удалить из папки проекта файлы disp_ILI9341.h и disp_ILI9341.cpp то проект собирается без ошибок, загружается и дисплей ST7735 работает.
За исключением естественно того, что все надписи сикось накось потому что нужно еще править размер шрифтов и координаты начала вывода строк.
 
Как лучше поступить что-бы оставить поддержку обоих дисплеев?
Перенести определение переменных которые определены в disp_ILI9341.cpp т.е. cur_freq, cur_freq2, cur_freq_buf, cur_vfo_idx.... и т.д. в другой файл? 
или тупо переименовать их в файле disp_ST7735.cpp?
Или можно как-то поменять директивы препроцессора в Syntez.ino?


#153
Relayer

Киньте мне в личку файлы проекта после правки - попробую скомпилить



#154
Gluck35533

Gluck35533

    Любопытный

  • Пользователи
  • 17 сообщений
  • 0 тем
  • Город:Москва

Андрей, отправил!



#155
Relayer

Мда. В общем "лечится" просто - убираем файлы disp_ILI9341.* из каталога проекта. Пока ничего более изящного не получилось сделать. Почему так - долгая история связанная с тем как сделана PDQ_GFX


  • Gluck35533 это нравится

#156
Gluck35533

Gluck35533

    Любопытный

  • Пользователи
  • 17 сообщений
  • 0 тем
  • Город:Москва

Жаль конечно ((

 

С ST7735 наверно тоже печалька выйдет.

 

Я посмотрел код касаемо координат вывода на экран различных частей интерфейса синтезатора.

Боюсь я там без Ваших коментариев не разберусь.

Вам Андрей как разработчику его проще будет переписать под этот экран чем мне въехать в суть происходящего там.

 

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

 

Я собираю данный синтезатор для приемника.Попробую пока с LCD 1602 оценить функционал.

Если мне подойдет и с ST7735 не срастется куплю ILI9341 и не буду париться.

В любом случае спасибо за разработку и удачи!



#157
Gluck35533

Gluck35533

    Любопытный

  • Пользователи
  • 17 сообщений
  • 0 тем
  • Город:Москва

Приветствую Андрей!

 

Решился я таки переписывать графику под ST7735.

Вроде разобрался и уже многое поправил.

Так что к Новому Году будет всем пользователям подарочек в виде поддержки ST7735.

 

Возникло пару вопросов и предложений.

 

В вашем коде для ILI9341 когда на экран выводится номер диапазона на всех диапазонах кроме 160 метров зачем-то выводится первым символом восклицательный знак.

т.е. вместо 80 на экране мы видим !80.

 

Вот код из disp_ILI9341.cpp:

 if (trx.BandIndex != cur_band) {
    if ((cur_band=trx.BandIndex) >= 0) {
      int mc = Bands[trx.BandIndex].mc;
      char buf[4];
      buf[3] = 0;
      buf[2] = '0'+mc%10; mc/=10;
      buf[1] = '0'+mc%10; mc/=10;
      if (mc > 0) buf[0] = '0'+mc;
      else buf[0] = '!';
      drawBtn(30,0,30,20,buf,ST7735_BLACK,ST7735_BLUE);
    } else
      drawBtn(30,0,30,20,"",ST7735_BLACK,ST7735_BLUE);
  }

Вот эта строка зачем? 

else buf[0] = '!';

Из-за того, что экран значительно меньше (160х128 пикселей, а не 320х240) шрифты пришлось значительно уменьшить.

В связи с этим часы с указанием даты и времени скорее всего не влезут в верхнюю строку над S-метром.

Для того чтобы они влезли все надписи над S-метром придется еще сильнее уменьшить и они будут трудно читаемые.

В принципе как и сами часы если они при этом влезут. Модуля RTC у меня нет следовательно попробовать не получится.

Да я думаю не слишком это нужная вещь в синтезаторе. Вместо часов в верхний правый угол экрана думаю сделать вывод символа блокировки энкодера.

Но не как это сделано сейчас символом "#", а в виде кнопочки как у "RIT", "QRP" и прочих.

Думаю так будет красивее и полезнее.

 

И еще заметил одну странность.

Шкала S-метра выводится в цикле:

for (int j=0; j < 15; j++) tft.drawRect(j*10+4,SMetr_Y+8,9,SMetr_H,(j < 9 ? ILI9341_GREEN : ILI9341_RED));

Т.е. квадратики красные и зеленые должны иметь одинаковые размеры и расположены на одной горизонтальной линии.

А по факту размер у них одинаковый, но красные визуально на экране смотрятся чуть выше расположенными относительно зеленых.

Не знаю с чем это связанно, может это косяк PDQ_GFX или просто из-за строения пикселя экрана и различия в яркости цветов, но мне кажется на фотках экрана ILI_9341 которые лежат на 5-ой странице ветки тоже это видно.

 

Посмотрите у себя на железе так это или нет.

 

 



#158
Relayer

С шрифтами есть некоторые нюансы. Используются упакованные шрифты, которые занимают меньше места. Именно из-за этого я и переписывал PDQ_GFX (мои правки были включены автором в основной транк). В коде шрифты подключаются вот тут:

#ifdef GFX_FONT_PACKED                                                                                                               
#include "font\Gadugi58.pck.h"                                                                                                       
#include "font\Tahoma28.pck.h"                                                                                                       
#include "font\Tahoma18.pck.h"                                                                                                       
#else                                                                                                                                
#include "font\Gadugi58.h"                                                                                                           
#include "font\Tahoma28.h"                                                                                                           
#include "font\Tahoma18.h"                                                                                                           
#endif

Упакованные шрифты генерируются с помощью утилиты TTF2GFX. При этом задается ограниченный набор символов (для дополнительного уменьшения объема). Трбуемые наборы символов можно посмотреть в самих файлах шрифтов. Например для Tahoma28.pck.h в первой строчке перечисленны символы (цифры и точка)

 

// Font charset:  0123456789.

 

При генерации шрифта в него всегда принудительно включается пробел. По сути для символа пробела указывается только его ширина. И вот тут мы приходим к символу "!". Откроем Tahoma28.pck.h

const GFXglyph Tahoma28Glyphs[] PROGMEM = {
{0, 0, 0, 12, 0, 0},  //  , 0
{0, 0, 0, 20, 0, 0},  // !, 0
{0, 0, 0, 12, 0, 0},  // ", 0
..............

Эта структура описывает глифы - собственно изображение самих символов. Важно что шрифты у нас TFT и ширина символа разная. Для пробела просто указывается ширина в 12 пикселей и нет ссылки на данные глифа. Для символа "!" аналогично указывается только ширина 20 пикселей. По сути "!" используется в качестве "широкого пробела" для очистки знакоместа при выводе текста. Для этого в автоматически сгенерированном утилитой TFT2GFX файле шрифты руками для этого символа была прописана требуемая "ширина".

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

Не знаю с чем это связанно, может это косяк PDQ_GFX или просто из-за строения пикселя экрана и различия в яркости цветов, но мне кажется на фотках экрана ILI_9341 которые лежат на 5-ой странице ветки тоже это видно.

Мне кажется что это связанно както со строением пикселя у самого экрана и/или визуальным восприятием

 



#159
Gluck35533

Gluck35533

    Любопытный

  • Пользователи
  • 17 сообщений
  • 0 тем
  • Город:Москва

И так представляю на внимание общественности проект синтезатора разработанного UR5FFR с добавленной поддержкой экрана ST7735 128x160 пикселей.

 

Данная сборка софта обеспечивает работу с экраном ST7735 128x160 пикселей либо с экраном 16х2 LCD.

Удалена поддержка ILI9341 в виду конфликта библиотек и RTC в виду отсутствия места для вывода часов на маленьком экране.

Для обеспечения полной функциональности используйте оригинальную версию софта от Relayer.

 

Принцип настройки и конфигурирования синтезатора остался прежним.

Графический интерфейс синтезатора остался практически прежним за исключением добавления надписи LOCK в правом верхнем углу экрана вместо часов.

 

Из меню удалены настройки и пункты связанные с RTC.

Меню адаптированно под экран ST7735 128x160 и добавлены заголовки в некоторых подменю.

 

Из изменений по файлам проекта:

 

- добавлен шрифт Tahoma8 которым выводятся теперь подписи на кнопках;

- шрифт Tahoma18 оставлен без изменений.Сейчас он используется только для вывода частоты настройки B.Я не стал удалять из него буквы которыми раньше выводились надписи на кнопках для обеспечения совместимости;

- шрифт Gadugi58 удален за ненадобностью.Раньше им выводилась частота настройки А;

- добавлен шрифт Tahoma28.Сейчас он используется для вывода частоты настройки А;

- все связанное с RTC в коде я просто закоментировал, а файлы TinyRTC.* перенес на директорию выше.Но они есть в архиве;

- удалены файлы disp_ILI9341.* , вместо них добавлены disp_ST7735.*;

- файл menu.h откорректирован для обеспечения корректного вывода меню на ST7735 128x160 и удаления из меню пунктов связанных RTC;

- в config.h частота кварца SI5351 изменена с 27 на 25 МГц.Обращайте внимание на это при настройке железа.Просто на моей плате кварц на 25 МГц стоит;

- в Syntez.ino строки связанные с ILI9341 заменены на соответствующие для работы с ST7735;

в Syntez.ino поправлен адрес i2c адаптера к которому подключена клавиатура и параметр отвечающий за число импульсов на оборот для энкодера.Мой энкодер выдает 600 имп.\ об;

 

В целом все.Проект проверен на железе на сколько это возможно.Багов не обнаружено.

У меня аккаунта на Гитхабе нет по этому выкладываю здесь.

 

Огромная просьба к Андрею разместить его у себя и при желании добавить меня в copyright.

Замечания по работе софта приветствуются.

 

 

 

 

 

 

 

 

 

 

 

 

 

Прикрепленные файлы



#160
Relayer

Спасибо за проделанную работу. После праздников планирую заняться софтом поплотнее - постараюсь все же как-то разобраться с конфликтами. И тогда уже выложу все на гитхабе

PS и кого в копирайты добавлять то?






Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных