На днях портировал поддержку PT2322/PT2323. Если кто-то имеет в наличии и планирует подключать этот вариант, большая просьба проверить в железе.
Итого на данный момент поддерживаются: Тюнеры (пока без RDS) в режиме автосканирования: - RDA5807 - Si4703 - TEA5767 Аудиопроцессоры: - TDA7439 - TDA7313 - PT2322/PT2323
проект перестал компилиться Makefile: DISPLAY = ILI9341 DISPVAR = SPI
Код:
In file included from display/dispdrv.c:7:0: display/dispdrv.c: In function 'dispdrvInit': display/dispdrv.c:143:9: error: 'DISP_DC_Port' undeclared (first use in this function); did you mean 'DISP_I2C_Port'? SET(DISP_DC); ^ display/../pins.h:11:33: note: in definition of macro 'CONCAT' #define CONCAT(x,y) x ## y ^ display/dispdrv.c:143:5: note: in expansion of macro 'SET' SET(DISP_DC); ^~~ display/dispdrv.c:143:9: note: each undeclared identifier is reported only once for each function it appears in SET(DISP_DC); ^ display/../pins.h:11:33: note: in definition of macro 'CONCAT' #define CONCAT(x,y) x ## y ^ display/dispdrv.c:143:5: note: in expansion of macro 'SET' SET(DISP_DC); ^~~ display/dispdrv.c:143:9: error: 'DISP_DC_Pin' undeclared (first use in this function); did you mean 'DISP_RD_Pin'? SET(DISP_DC); ^ display/../pins.h:11:33: note: in definition of macro 'CONCAT' #define CONCAT(x,y) x ## y ^ display/dispdrv.c:143:5: note: in expansion of macro 'SET' SET(DISP_DC); ^~~ make: *** [makefile:206: build/dispdrv.o] Error 1
под DISPVAR = 8BIT собирается нормально где палочкой потыкать?
проект перестал компилиться Makefile: DISPLAY = ILI9341 DISPVAR = SPI
Код:
In file included from display/dispdrv.c:7:0: display/dispdrv.c: In function 'dispdrvInit': display/dispdrv.c:143:9: error: 'DISP_DC_Port' undeclared (first use in this function); did you mean 'DISP_I2C_Port'? SET(DISP_DC); ^ display/../pins.h:11:33: note: in definition of macro 'CONCAT' #define CONCAT(x,y) x ## y ^ display/dispdrv.c:143:5: note: in expansion of macro 'SET' SET(DISP_DC); ^~~ display/dispdrv.c:143:9: note: each undeclared identifier is reported only once for each function it appears in SET(DISP_DC); ^ display/../pins.h:11:33: note: in definition of macro 'CONCAT' #define CONCAT(x,y) x ## y ^ display/dispdrv.c:143:5: note: in expansion of macro 'SET' SET(DISP_DC); ^~~ display/dispdrv.c:143:9: error: 'DISP_DC_Pin' undeclared (first use in this function); did you mean 'DISP_RD_Pin'? SET(DISP_DC); ^ display/../pins.h:11:33: note: in definition of macro 'CONCAT' #define CONCAT(x,y) x ## y ^ display/dispdrv.c:143:5: note: in expansion of macro 'SET' SET(DISP_DC); ^~~ make: *** [makefile:206: build/dispdrv.o] Error 1
под DISPVAR = 8BIT собирается нормально где палочкой потыкать?
В 143 строке ошибка. Вместо SET(DISP_DC); надо SET(DISP_RS);
Добавлено after 8 hours 18 minutes 44 seconds: DC и RS типа одно и тоже в дисплеях (команды/данные). Вот автор и напутал.
До конца ещё не уверен. В текущей разводке не устраивает то, что только один аппаратный UART доступен. Хотелось бы, чтобы их было хотя бы два. Но толком придумать, как такого добиться, пока не могу.
Возможно, будет "глобальная" замена портов кнопок PA0..7 на PB0..7. Так без проблем можно будет освободить UART2. А если убрать поддержку SSD1306 (да и вообще монохромных дисплеев) и попытаться не пользоваться ножками дисплея CS/RST/RD (по идее, должно работать и без этого), то ещё и UART3 можно освободить. Теоретически в будущем это может позволить управлять по разным UART разными устройствами (ранее обсуждались всякие mp3-плееры и интернет-радио, управляемые по UART).
понял, не спешу, спасибо. на SPI ILI 9341 точно работает без управления CS/RST/RD, RST можно совместить с резетом контроллера, или свою RC линию задержки навесить, но работает и так. была идея кнопочный блок на 6 пиновую кнопку джойстик переобуть, остались такие от пачки сгоревших камер видеонаблюдения, но если покупать, то дорого и не везде есть. можно еще количество кнопок попробовать сократить, но придется переписывать софт и продумывать юзабельность интерфейса. если перейти на систему вложенных меню и экранные контекстные кнопки, то реально и до 2-3 кнопок сократить плюс энкодер с кнопкой. присел на тему с карадио, очень интересно интерфейс пользователя реализован, можно подсмотреть идею реализации.
по управлению других модулей одной дистанкой тоже идея посетила. в некоторых есть своя система IR, предлагаю сделать транслятор IR пакетов, команды для темброблока обрабатываем, всё что мимо повторяем на выход через UART на смежный блок, на нем вместо IR приемника припаиваем TX от темброблока через резюк 100-220 Ом.
так можно и платами мп3 плееров рулить с радио и блютусом, ихними же дистанками!
Добавлено after 18 minutes: по монохромным OLED дисплеям. они удобны своими габаритами и простотой подключения. кто собирает микро системы в компактных корпусах, оценят все плюсы и минусы. многоканальный усилок по размерам 2х пачек сигарет выглядит весьма достойно, если над корпусом хорошо поработать и продумать дизайн.
До конца ещё не уверен. В текущей разводке не устраивает то, что только один аппаратный UART доступен. Хотелось бы, чтобы их было хотя бы два. Но толком придумать, как такого добиться, пока не могу.
Возможно, будет "глобальная" замена портов кнопок PA0..7 на PB0..7. Так без проблем можно будет освободить UART2. А если убрать поддержку SSD1306 (да и вообще монохромных дисплеев) и попытаться не пользоваться ножками дисплея CS/RST/RD (по идее, должно работать и без этого).
пытался завести ILI9225 без CS ... но увы))... работает только без RST)
Сегодня попробовал отключить RST и RD. Оба подтянул к питанию через резистор. На всех моих тестовых дисплеях (ILI9341_SPI, ILI9341_8BIT, ILI9320_8BIT, KS0108B_8BIT, R61581_8BIT) заработало без проблем. CS решил не отключать, да и с ним можно тот же SPI интерфейс и к чему-то ещё подключить, используя дополнительные CS линии.
Так что, две ножки вполне себе освободились. Правда, не для варианта на KS0108.
И ещё не совсем уверен, что аппаратный SPI можно настроить так, чтобы MISO линия (READ) была свободна как GPIO. Т.е. задействовать только режим передачи. Надо посмотреть даташит.
MISO от аппаратной шины возможно и не получится заюзать, а посадить на шину еще девайсов типа SPI SRAM кеша или SD CARD с софтовым кодеком MP3 с неё вполне реально, проект был на BluePill c мостовым выходом на ключи (D Class). но пинов и так в обрез, если дисплеи с параллельным интерфейсом.
по CS надо смотреть по даташитам на дисплеи, бывают с обычным входом и инверсным, по схемотехнике инверсный обозначен с подчеркиванием сверху CS. иногда даже удобно, когда на шине 2 приемника SPI, один с прямым, второй с инверсным CS, выбирается по любому один из Slave из одного и того-же пина master(STM32). я про то, что вывод на дисплее не всегда можно оставлять в воздухе, надо создать устойчивый 0 или 1 резистором подтяжки на 1 кОм к шине питания модуля. ну и спецификацию на чип полистать, иногда CS принимает участие в инициализации чипа.
В общем, и так и сяк крутил - ну никак не получается нормально поиметь несколько UART интерфейсов. Есть один вариант, когда можно UART2 освободить, но это вынуждает использовать PB2, который на BluePill не выведен на гребёнку.
В общем, сейчас вижу такие варианты:
1. Ничего не трогать, оставить разводку как есть. В этом случае есть только UART1, по которому и прошить можно, и что-то полезное делать. Скорее всего, это будет такое же дистанционное управление, как в проекте на ATmega, типа через HC-05 модуль. Плюсы - без проблем подключается BluePill платка. Минусы - никакой возможность и в будущем подключить что-то ещё, управляемое по UART - Bluetooth модули, Karadio и т.п., что так живо обсуждалось, да вдруг заглохло.
2. Альтернативная разводка (см. pins.ods последних версий). Выводы кнопок "переползают" с PA0..PA7 на PB0..PB7, при этом освобождается UART2. То есть, дисплей подключается совершенно иначе (в случае SPI - с SPI1 на SPI2), разводка, видимо, получится не такая красивая (PB0..PB7 "разрбросаны" по кристаллу). Минус - у платы BluePill не выведен PB2, нужно будет играть с проводками. При разводке на "чистом" МК этот минус не так важен.
Если отказаться от дисплея на I2C (SSD1306) (либо повесить его на основной "медленный" интерфейс), появляются ещё варианты (модификации этих двух), когда можно ещё и UART3 потенциально задействовать.
В общем, всё сложно, и я в полнейшем затруднении, на чём же остановиться. Работа стоит.
Жду идей и вариантов.
Лично я склоняюсь к следующему: - Вариант на базе первого, освобождающий UART3. - SPI2 для дисплея - Забить на монохромные дисплеи (KS0108, ST7920, SSD1306). Размер маленький, толком ничего не выведешь, "цветные" фишки не покажешь. Плюс не нужен ещё один I2C интерфейс.
P.S. Блин, на базе первого варианта освободить UART3 никак не получается...
WR я так понимаю тоже можно пересадить с процессора на резистор, как и CS + RST, это чтение из дисплея или запись в него. остается припарковать RS на лругой пин (Команды\данные GRAM).
второй момент, у STM32F103C8 кроме PA[0-15] PB[0-15] есть еще PC[0-15], которые в BluePill на гребенки не поместились а вывели только PC[13-15]. тестить и отлаживать дёшево на BluePill похоже уже не получится, банально не хватает пинов, остается вариант с бордой чуть дороже но с полной разводкой чипа. в финале проекта всё равно будет разведено на плате всё что заюзано. ради прикола в кубе включил все 1-3UART, 1-2 I2C,1-2 SPI и USB с кварцами, остается жменя незаюзаных пинов. если бы не параллельный интерфейс дисплеев и целых 8 кнопок, очень всё изящно вписывается. если SSD1306 пересадить на шину 100 кгц, насколько он начнет тупить на прорисовках? кому очень нужно, можно оставить такой вариант: без спектрограммы, но с микродисплейчиком на одной шине с темброблоком и тюнером. KS0108, ST7920 да, и 8 бит порт занимают, и толку с них мало в плане ништяков и красивостей интерфейса. у кого пылятся, можно запилить на AVR. UART3 это ремап с PC[10-11] на разведенные по гребенкам пины вместо I2C-2(PB[10-11]). давайте может так и оставим на PC[10-11] для энтузиастов с Ка-радио и другими плюхами? как только тестить вопрос.. кто в состоянии подпаяться на борде прямо к ногам проца, тот и тестировщик, получается, или борда по шире.