Перейти к содержанию
bbh_blocked_dnftl

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


Relayer

Рекомендуемые сообщения

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

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Решил добавить поддержку 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?
Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

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

 

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

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

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

 

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

 

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

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

Решился я таки переписывать графику под 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-ой странице ветки тоже это видно.

 

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

 

 

Ссылка на комментарий
Поделиться на другие сайты

С шрифтами есть некоторые нюансы. Используются упакованные шрифты, которые занимают меньше места. Именно из-за этого я и переписывал 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-ой странице ветки тоже это видно.

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

 

Ссылка на комментарий
Поделиться на другие сайты

И так представляю на внимание общественности проект синтезатора разработанного 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.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

SyntezSi5351_ST7735_1602LCD_NO_RTC.zip

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

Было бы не плохо разобраться с конфликтами и сделать один софт для трёх экранов.

Мне кажется там дело не в PDQ_GFX, а в Ардуиновском препроцессоре.

Буду следить за темой.

 

По поводу копирайта эт я так пошутил)

Если добавите - мне будет приятно.

В профиле моем все ж написано.

Дмитрий Фролов.

Позывного у меня нет.

Я вольный слушатель эфира )))

Ссылка на комментарий
Поделиться на другие сайты

Да тут задумка не только для трех экранов чтобы был один софт но и для Si570 тоже добавить наработки

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

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

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

Как я писал уже, графический интерфейс оставлен без изменений практически.

Просто все "уменьшено", чтобы влезло на экран с меньшим количеством пикселей.

Ссылка на комментарий
Поделиться на другие сайты

Сделал фото.Получилось честно говоря отвратненько.

Но общий смысл понятен.В живую конечно красивее всё.

 

DSC_0045.JPG

DSC_0046.JPG

DSC_0047.JPG

DSC_0048.JPG

DSC_0049.JPG

DSC_0050.JPG

DSC_0051.JPG

DSC_0052.JPG

DSC_0053.JPG

DSC_0054.JPG

DSC_0055.JPG

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

Загрузка...
×
×
  • Создать...