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

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

странно все это. на a7 должен быть инвертированный pwm. а заваленные фронты в дополнение к отсутствию выбросов после цапа на относительно невысокой частоте - где-то высокая емкость. щупы+осцил?

ShAlex13
Offline
Зарегистрирован: 19.01.2018

А можно переделать скетч 3.6 под экран 2.2 с контроллером ILI9341 ?

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

ShAlex13 пишет:

А можно переделать скетч 3.6 под экран 2.2 с контроллером ILI9341 ?

Заменить библиотеку на Adafruit_ILI9341 и в той части программы, которая называется "ВЫВОД НА ДИСПЛЕЙ", поменять координаты вывода под Ваш дисплей (tft.setCursor). Для начала просто библиотеку подменить, а если запустится, то колдовать с tft.setCursor.

ShAlex13
Offline
Зарегистрирован: 19.01.2018

Про какой кварц речь?

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

Тот, который на 8 МГц

ShAlex13
Offline
Зарегистрирован: 19.01.2018

MAG-N пишет:

Заменить библиотеку на Adafruit_ILI9341 и в той части программы, которая называется "ВЫВОД НА ДИСПЛЕЙ", поменять координаты вывода под Ваш дисплей (tft.setCursor). Для начала просто библиотеку подменить, а если запустится, то колдовать с tft.setCursor.

Простой подменой библиотеки видимо не получится, посыпались ошибки:

C:\Users\Alex\AppData\Local\Temp\arduino_modified_sketch_181033\gen_3.6.ino: In function 'void setup()':
gen_3.6:45:13: error: 'class Adafruit_ILI9341' has no member named 'initR'
         tft.initR(INITR_BLACKTAB);
             ^
gen_3.6:45:19: error: 'INITR_BLACKTAB' was not declared in this scope
         tft.initR(INITR_BLACKTAB);
                   ^
C:\Users\Alex\AppData\Local\Temp\arduino_modified_sketch_181033\gen_3.6.ino: In function 'void mon_out()':
gen_3.6:131:21: error: 'ST7735_GREEN' was not declared in this scope
    tft.setTextColor(ST7735_GREEN, paper);
                     ^
gen_3.6:150:18: error: 'ST7735_WHITE' was not declared in this scope
 tft.setTextColor(ST7735_WHITE, paper);
                  ^
gen_3.6:165:98: error: 'ST7735_BLACK' was not declared in this scope
 if (mode==3) { sprintf(mybuf,"   %3ld   ", freq/10 );  if (imp_mode_menu == 0) {tft.setTextColor(ST7735_BLACK,ST7735_WHITE);} }
                                                                                                  ^
gen_3.6:171:33: error: 'ST7735_RED' was not declared in this scope
                tft.setTextColor(ST7735_RED,paper); //красный цет строки для всех вариантов              
                                 ^
gen_3.6:187:70: error: 'ST7735_WHITE' was not declared in this scope
                 if (imp_mode_menu == 1) {tft.setTextColor(ST7735_RED,ST7735_WHITE);}
                                                                      ^
gen_3.6:205:32: error: 'ST7735_MAGENTA' was not declared in this scope
      tft.drawRect(0,67, 160,61,ST7735_MAGENTA);//рамка: вправо, вниз, ширина вправо, длина вниз
                                ^
gen_3.6:207:38: error: 'ST7735_CYAN' was not declared in this scope
         tft.drawFastVLine(5, 90, 30, ST7735_CYAN); // восход фронта статическая вер линия
                                      ^
gen_3.6:208:41: error: 'ST7735_YELLOW' was not declared in this scope
          tft.drawFastHLine(5, 91, duty, ST7735_YELLOW);//длина единицы
                                         ^
gen_3.6:221:53: error: 'ST7735_YELLOW' was not declared in this scope
                          tft.drawFastHLine(5,123,28,ST7735_YELLOW);// смещ вправо, смещ вниз, длина вправо                           
                                                     ^
gen_3.6:235:86: error: 'ST7735_YELLOW' was not declared in this scope
                     for(uint8_t n=0; n<100; n++){tft.drawPixel(5+n, 78+ sine_logo[n],ST7735_YELLOW);
                                                                                      ^
gen_3.6:239:47: error: 'ST7735_YELLOW' was not declared in this scope
                       tft.drawLine(5,98,30,73,ST7735_YELLOW);
                                               ^
gen_3.6:244:54: error: 'ST7735_YELLOW' was not declared in this scope
                            tft.drawLine(5,123,105,73,ST7735_YELLOW);
                                                      ^
gen_3.6:248:59: error: 'ST7735_YELLOW' was not declared in this scope
                              tft.drawFastVLine(5, 73, 50, ST7735_YELLOW); // восход фронта статическая вер линия
                                                           ^
gen_3.6:252:61: error: 'ST7735_YELLOW' was not declared in this scope
                                   tft.drawFastVLine(5,73,25,ST7735_YELLOW);
                                                             ^
gen_3.6:261:54: error: 'ST7735_YELLOW' was not declared in this scope
                       tft.drawFastVLine(5+n,123-y,y ,ST7735_YELLOW);
                                                      ^
gen_3.6:271:35: error: 'ST7735_WHITE' was not declared in this scope
                  tft.setTextColor(ST7735_WHITE, paper);
                                   ^
gen_3.6:288:72: error: 'ST7735_BLACK' was not declared in this scope
                               if (imp_mode_menu==2) { tft.setTextColor(ST7735_BLACK,ST7735_WHITE);}                     
                                                                        ^
gen_3.6:323:33: error: 'ST7735_YELLOW' was not declared in this scope
      tft.setTextColor(modevolt? ST7735_YELLOW : ST7735_WHITE , paper);//выбрать жёлтый цвет если активен
                                 ^
Несколько библиотек найдено для "Wire.h"
 Используется: D:\Arduino_gen3_6\Arduino\hardware\Arduino_STM32\STM32F1\libraries\Wire
Не используется: D:\Arduino_gen3_6\Arduino\hardware\Arduino_STM32\STM32F1\libraries\WireSlave
exit status 1
'class Adafruit_ILI9341' has no member named 'initR'

 

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

Строку инициализации

Adafruit_ST7735 tft = Adafruit_ST7735(-1, PB11,PB10);

tft.initR(INITR_BLACKTAB); тоже надо изменить,

ну и названия цвета в соответствии с новой библиотекой

ShAlex13
Offline
Зарегистрирован: 19.01.2018

MAG-N пишет:

Строку инициализации

Adafruit_ST7735 tft = Adafruit_ST7735(-1, PB11,PB10);

tft.initR(INITR_BLACKTAB); тоже надо изменить,

ну и названия цвета в соответствии с новой библиотекой

Конечно сразу поменял

Adafruit_ILI9341 tft = Adafruit_ILI9341(-1, PB11,PB10);

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

В сетапе tft.initR(INITR_BLACKTAB); надо изменить на

tft.begin();
tft.fillScreen(ILI9341_BLACK);

и есть еще одна библиотека - Adafruit_ILI9341_STM

ShAlex13
Offline
Зарегистрирован: 19.01.2018

MAG-N пишет:

В сетапе tft.initR(INITR_BLACKTAB); надо изменить на

tft.begin();
tft.fillScreen(ILI9341_BLACK);

и есть еще одна библиотека - Adafruit_ILI9341_STM

Компиляция завершена! P.S. Еще все заменил в "ВЫВОД НА ДИСПЛЕЙ"

ShAlex13
Offline
Зарегистрирован: 19.01.2018

Спасибо, буду пока пробовать на версии 3.5, т.к. пока нет СИ-шки

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

Дисплей заработал?

ShAlex13
Offline
Зарегистрирован: 19.01.2018

MAG-N пишет:

Дисплей заработал?

Завтра уже буду проверять...STM-ка на работе

ShAlex13
Offline
Зарегистрирован: 19.01.2018

На схеме вывод дисплея А0, это что за вывод? SDA-это я так понимаю MOSI.

P/S нашел, это вывод на дисплее DC/RS

ShAlex13
Offline
Зарегистрирован: 19.01.2018

Еще вопрос, при нормальной заливке прошивки, как ведет себя зеленый сидик на плате STM-ки ?

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

ShAlex13 пишет:

Еще вопрос, при нормальной заливке прошивки, как ведет себя зеленый сидик на плате STM-ки ?

никак, его никто не трогает.

ShAlex13
Offline
Зарегистрирован: 19.01.2018

venus пишет:

никак, его никто не трогает.

Значит что-то залилось не правильно, мыргает у меня

ShAlex13
Offline
Зарегистрирован: 19.01.2018

попробую через ST-Link hex залить. Перемычки в каком положении надо ставить при заливке?

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

ShAlex13 пишет:

попробую через ST-Link hex залить. Перемычки в каком положении надо ставить при заливке?

стлинк на перемычки не смотрит

ShAlex13
Offline
Зарегистрирован: 19.01.2018

После прошивки ST-Link уже больше не видит STM-ку, как вернуть в исходное состояние чтобы еще раз прошить?

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

Нажать "Ресет" и быстренько кликнуть "Коннект". Может не с первого раза, но прокатывает.

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

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

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

Если я правильно понял, в самой программе запрещается использование JTAG, соответственно СТ-Линк не работает. После нажатия на пумпочку Ресет на плате надо успеть включить Коннект, пока эта команда не прошла.

 

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

да можно и заранее нажать, отпустив сразу после запуска коннекта.

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

Из под Ардуино ИДЕ без проблем прошивается, а вот при прошивке бинарника из STM32 ST-LINK Utility такое бывает. Система - ВИН7

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

так там наверное включен режим "connect under reset" в отличие от ide, который гоняет экзешник из hardware\Arduino_STM32\tools\win\

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

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

Установлен Software System Reset, Из 3-4 раз разок коннектится только после ресета на плате. Да и не люблю я эти бинарники шить, в скетче что-то под себя подправить можно. Ну это дело вкуса :-)

ShAlex13
Offline
Зарегистрирован: 19.01.2018

MAG-N пишет:

Из под Ардуино ИДЕ без проблем прошивается. Система - ВИН7

Из по Ардуины пишет: maple_loader v0.1 Resetting to bootloader via DTR pulse Searching for DFU device [1EAF:0003]... dfu-util - (C) 2007-2008 by OpenMoko Inc. Couldn't find the DFU device: [1EAF:0003] This program is Free Software and has ABSOLUTELY NO WARRANTY

Хотя пишет "Загрузка завершена"

Ресет топтал.

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

Из-под Ардуины через СТ-Линк надо шить

ShAlex13
Offline
Зарегистрирован: 19.01.2018

Получилось следующее:

С родной библиотекой Adafruit_ST7735 картинка такая

С библиотекой Adafruit_ILI9341 такая

чистый экран и мигает зеленый сидик на плате

оба видео тут:

https://cloud.mail.ru/public/C7ia/y2YhKMBTs

https://cloud.mail.ru/public/3P2u/5bbktYZGH

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

Попробуйте библиотеку Adafruit_ILI9341_STM, она под этот контроллер подзаточена

ShAlex13
Offline
Зарегистрирован: 19.01.2018

MAG-N пишет:

Попробуйте библиотеку Adafruit_ILI9341_STM, она под этот контроллер подзаточена

С ней вообще не компилируется, пишет "Ошибка компиляции для платы Generic STM32F103C series."

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

хотел проверить, как шьет виндовая утилита stlink, если прошит gen36. под рукой была одна плата с клоном stm32/64kb. сдул с нее чип, взял новый заведомо оригинальный stm32f103c8t6 с производства, впаял. и обломался, на нем 64kb. :) значит, бывает и такое, не обязательно перемаркированный cbt6. разве что от долгого лежания в упаковке у него половина отсохла. есть еще чипы, возможно из других партий, но паять уже нет желания.

шьется из винды без ресета, порты в настройках стоят не jtag, а swd.

старый-то явно паленый был.

 

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

наткнулся на такое: "Adafruit ILI9341, в отличие от UTFT, написана специально для модулей производства Adafruit и, похоже, несовместима с тачскринами китайских модулей."

так что, может стоит посмотреть на другую либу или попробовать допилить 7735 либу под зеркальные 320x240, раз она работает.

ShAlex13
Offline
Зарегистрирован: 19.01.2018

venus пишет:

попробовать допилить 7735 либу под зеркальные 320x240, раз она работает.

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

P.S. Добавил библиотеку Adafruit_GFX, но на экране ни чего не появилось, только перестал мигать сидик.

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

вряд ли кто поможет, не имея экрана, pdf на него или даже точного названия. вы бы не начинали мучать скетч с генератором, а определились с экраном. с каждой либой, в том числе с Adafruit_ILI9341, идут примеры, доступны в file->examples. там и отладка есть кое-какая через последовательный порт. запустить, подобрать настройки.. теоретически, контроллер очень похож на st7735, но все же отличается. гугль немало выдает о попытках зеркального вывода на него. но правильнее все же использоваться либу именно для такого дисплея.

а просто купить дисплей на st7735 рублей за 300 - не вариант?

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

Adafruit_GFX используется и с ST7735, и с ILI9341, она есть в дистрибутиве и подгружается сама. Тут дело, скорее всего в самой либе 9341, может ей -1 в ините не нравится, попробуйте туда какой-нибудь неиспользуемый порт подсунуть, РС13 например . (Туда светодиод подключен)

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

должна она понимать -1

Adafruit_ILI9341::Adafruit_ILI9341(int8_t cs, int8_t dc, int8_t rst)

  @param cs Chip select pin # (optional, pass -1 if unused and CS is tied to GND).

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

варианты под st7735 и ili9241 оба компилились самостоятельно в одной программе, или 7735 заливался готовый бинарник?

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

Может с SPI2 она не дружит, попробовать

Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

Adafruit_ILI9341 tft = Adafruit_ILI9341(-1, PB11, PB15, PB13, PB10, -1);

т.е. в лоб прописать софтверный СПИ

ShAlex13
Offline
Зарегистрирован: 19.01.2018

venus пишет:

а просто купить дисплей на st7735 рублей за 300 - не вариант?

Да купить не проблема, просто этот есть в наличии и лежит без дела.

ShAlex13
Offline
Зарегистрирован: 19.01.2018

venus пишет:

варианты под st7735 и ili9241 оба компилились самостоятельно в одной программе, или 7735 заливался готовый бинарник?

Оба варианта компилировались самостоятельно в Ардуино ИДЕ, потом бинарники заливал через ST-Link

ShAlex13
Offline
Зарегистрирован: 19.01.2018

MAG-N пишет:

т.е. в лоб прописать софтверный СПИ

Попробую еще так

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

Провел один эксперимент. Делалось все в Ардуино ИДЕ, архив которой Автор выкладывал.

Подключил к плате СТМ32 дисплей на ST7735, закомментировал проверку наличия Si5351, залил прошивку 3.6 - работает

Заменил библиотеку на ILI9341 - фиг вам. Дисплей даже не стартует, белый экран. Но после замены -1 на РВ12 (PC13 тоже пробовал) все нормально, правда цвета попутаны и изображение зеркальное, но ведь и библиотека не родная для данного дисплея. CS физически к земле подключен, как по схеме.

А почему сразу из ИДЕ не залить?

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

MAG-N пишет:

Может с SPI2 она не дружит, попробовать

А в проекте I2C не используется?

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

andriano пишет:

А в проекте I2C не используется?

Используется для управления Si5351

ShAlex13
Offline
Зарегистрирован: 19.01.2018

ShAlex13 пишет:

MAG-N пишет:

т.е. в лоб прописать софтверный СПИ

Попробую еще так

Прописал так: Adafruit_ILI9341 tft = Adafruit_ILI9341(-1,PB11,PB15,PB13,PB10,-1);

Тишина, экран белый и все. Вместо -1 (CS) ставил РВ12, то же самое

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

MAG-N пишет:

andriano пишет:

А в проекте I2C не используется?

Используется для управления Si5351

В errata описан конфликт между SPI2 и I2C.

https://www.st.com/resource/en/errata_sheet/cd00190234-stm32f101x8-b-stm32f102x8-b-and-stm32f103x8-b-medium-density-device-limitations-stmicroelectronics.pdf

venus
venus аватар
Offline
Зарегистрирован: 08.10.2019

andriano пишет:
В errata описан конфликт между SPI2 и I2C.

там про spi2-i2c2, в скетче spi2 и i2c1, да и st7735 работает.

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

imho, маловероятно, что эта проблема связана именно с использованием spi2, они же все вызывают через свою gfx либу стандартные функции, описанные в spi.h.

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

У меня заработало со строкой

Adafruit_ILI9341 tft = Adafruit_ILI9341(PB12, PB11, PB10);

Дисплей, правда, ST7735. Экран при старте заливается черным - в Сетапе эти строки на первом месте

        SPI.setModule(2);// выбор SPI2
        tft.begin();
        tft.fillScreen(ILI9341_BLACK);

потом пауза секунд 10 и появляется изображение. Все это на голой плате, без Си5351.

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

А я вообще не понял, нафига прикручивать тот дисплей ? Ну допустим  заработает, появиться картинка в 1/4 экрана, а дальше что?  Дизайн рассчитывался под 160x128 точек. Даже для того что-б банально растянуть всё тоже самое на полный экран понадобится целый  день заниматься скучной рутиной , пересчитывая каждую строчку. А загрузив может выясниться, что всё равно что-то не так, и опять сидеть считать точки.  Трудозатраты в итоге выйдут на порядок больше, чем стоимость нужного дисплея. Причём это уже не будет так красиво как было на маленьком дисплее. Вот и подумай ShAlex13, нужен ли тебе этот гемор.