Обсуждаем цифровые устройства...
Ответить

Re: Темброблок - анализатор спектра на STM32F103

Вс мар 15, 2020 19:07:35

если компилятор не поддерживает такую инициализацию структур, по именам полей (что, вообще-то, странно, это часть стандарта C99), инициализируйте, как умеет. По порядку, например.

А как можно по другому написАть? Для меня это сложновато - С99.

И ещё - Кейл ARM не поддерживает инициализацию переменных кроме как в начале функции, а как с этим у ИАРа ARM?

Re: Темброблок - анализатор спектра на STM32F103

Вс мар 15, 2020 20:16:35

В итоге заработал селектор входов с отключением питания от неработающих в данный момент источников с помощью расширителя портов на шине i2c на базе PCF8574. Преимущество в том, что BT модуль, FM тюнер и KaRadio не находятся одновременно в эфире и, таким образом, не создают помехи друг другу, а при переходе на соответствующий вход запускаются стабильно, без глюков. В общем, как и ожидалось :) , рекомендую. Также спасибо автору за подсказку!

Фотки изделия в работе без верхней крышки и в сборе.

FM.jpg

KaRadio.png

BT.png

Rear.jpg

А когда первый раз включаете у вас остается включенным только один источник?


Да, тот который был включен при выключении.

интересно а у меня при вкл включаются все сразу а после переключения работает как надо :(

Re: Темброблок - анализатор спектра на STM32F103

Вс мар 15, 2020 20:36:28

Frogfot писал(а):А как можно по другому написАть? Для меня это сложновато - С99.
Даже по имени стандарта ясно, что ему уже больше 20 лет...

А по-другому - очевидно же. Раз уж tImage - это структура
Код:
typedef struct {
    const uint8_t *data;
    int16_t width;
    int16_t height;
    uint16_t size;
    uint8_t rle;
} tImage;

То инициализировать её можно как обычно.
Код:
static tImage unRleImg = {NULL, 0, 0, 0, 0};

А можно и вообще не инициализировать, все поля и так будут нулевыми, это же static.
Но всё же лично мне больше нравится всё же вариант типа
Код:
static tImage unRleImg = { .rle = 0, .data = NULL};
, где можно не заботиться о порядке инициализации и несущественных полях.
Думаю, в Keil тоже где-то можно выставить в настройках соответствие стандартам 99-года, а не 89-го.

Недостаток "обычной" инициализации - при добавлении нового поля в середину структуры, нужно лазить по всем инициализациям и править. Тут и до ошибки недалеко.

Re: Темброблок - анализатор спектра на STM32F103

Вс мар 15, 2020 22:06:33

misir, а Вы полностью Ampcontrol отключаете от сети или переходите в режим Standby? Фишка в том, что в режиме Standby я оставляю PCFку запитанной от дежурных +5В, а МК в этом режиме прописывает по всем ее портам нули, т.е. отключает все источники от питания, как указал автор. У меня также отключаются все другие источники (+3,3В, +9В, +15В) по деактивации сигнала STBY от МК через соответствующие реле. Если у Вас была раньше старая прошивка, где сигналы MUTE и STBY находились на разъеме J2 (пины 2 и 3 соответственно), то обратите внимание, что на свежих версиях кода эти сигналы уже находятся на разъеме J6, на пине 1 - STBY (нога РВ11 (22) МК) и на пине 2 - MUTE (нога РВ10 (21) МК). Я сперва тоже не обратил внимание, что порядок пинов поменялся, а это приводило к тому, что питание источников при переходе из режима STBY устанавливалось абсолютно рандомно. Когда исправил эту ошибку (поменял местами пины MUTE и STBY на ответном разъеме) все заработало, как надо.

Re: Темброблок - анализатор спектра на STM32F103

Пн мар 16, 2020 08:31:40

misir, а Вы полностью Ampcontrol отключаете от сети или переходите в режим Standby? Фишка в том, что в режиме Standby я оставляю PCFку запитанной от дежурных +5В, а МК в этом режиме прописывает по всем ее портам нули, т.е. отключает все источники от питания, как указал автор. У меня также отключаются все другие источники (+3,3В, +9В, +15В) по деактивации сигнала STBY от МК через соответствующие реле. Если у Вас была раньше старая прошивка, где сигналы MUTE и STBY находились на разъеме J2 (пины 2 и 3 соответственно), то обратите внимание, что на свежих версиях кода эти сигналы уже находятся на разъеме J6, на пине 1 - STBY (нога РВ11 (22) МК) и на пине 2 - MUTE (нога РВ10 (21) МК). Я сперва тоже не обратил внимание, что порядок пинов поменялся, а это приводило к тому, что питание источников при переходе из режима STBY устанавливалось абсолютно рандомно. Когда исправил эту ошибку (поменял местами пины MUTE и STBY на ответном разъеме) все заработало, как надо.

Спасибо за ответ проверю отпишусь.

Добавлено after 1 hour 11 minutes 34 seconds:
misir, а Вы полностью Ampcontrol отключаете от сети или переходите в режим Standby? Фишка в том, что в режиме Standby я оставляю PCFку запитанной от дежурных +5В, а МК в этом режиме прописывает по всем ее портам нули, т.е. отключает все источники от питания, как указал автор. У меня также отключаются все другие источники (+3,3В, +9В, +15В) по деактивации сигнала STBY от МК через соответствующие реле. Если у Вас была раньше старая прошивка, где сигналы MUTE и STBY находились на разъеме J2 (пины 2 и 3 соответственно), то обратите внимание, что на свежих версиях кода эти сигналы уже находятся на разъеме J6, на пине 1 - STBY (нога РВ11 (22) МК) и на пине 2 - MUTE (нога РВ10 (21) МК). Я сперва тоже не обратил внимание, что порядок пинов поменялся, а это приводило к тому, что питание источников при переходе из режима STBY устанавливалось абсолютно рандомно. Когда исправил эту ошибку (поменял местами пины MUTE и STBY на ответном разъеме) все заработало, как надо.

Спасибо за ответ проверю отпишусь.

Спасибо запитал pcfку от дежурки теперь все как надо :beer:

Re: Темброблок - анализатор спектра на STM32F103

Пн мар 16, 2020 08:37:05

Естественно, PCF-ка должна быть запитана постоянно, она же активно работает (управляет питанием других устройств) даже в ждущем режиме. По-моему, это очевидно, и такой вопрос в принципе не должен был возникнуть.

Правда, можно немного извратиться, и подавать питание через контакты двух последовательных реле - одного, контролируемого pcf-кой, и другого, контролируемого сигналом STBY. Наверное, тоже бы работало.

Re: Темброблок - анализатор спектра на STM32F103

Пн мар 16, 2020 21:12:32

WiseLord, вопросов нет, как и подразумевалось изначально, все работает :) Если будет натхнення (вдохновение по-украински), нельзя ли было бы для полного счастья еще все-таки реализовать принудительное переключение источника на модуле ВТ201 (ВТ-->TF-->USB) с пульта ДУ? Тогда можно было бы сказать, что весь необходимый на сегодня функционал практически осуществлен. Спасибо заранее!

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 03:18:20

Вроде как реализовал. Тестируйте.

Обучается отдельная кнопка пульта, с передней панели - длинное нажатие кнопки 2.

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 11:46:19

Уважаемый WiseLord ,компиляция для 303 не проходит.
Вложения
2020-03-17_104707.png
(23.72 KiB) Скачиваний: 200

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 12:46:22

Код:
static tImage unRleImg = { .rle = 0, .data = NULL};

Попробовал в IAR for STM32 - такая запись прокатила, в Keil не хочет.

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 13:34:35

Вроде как реализовал. Тестируйте.

Обучается отдельная кнопка пульта, с передней панели - длинное нажатие кнопки 2.


Я так понял, это управление модулем ВТ201 будет работать через порты расширителя шины I2C путем имитации нажатия кнопок управления на самом модуле. А нельзя ли было бы сделать это по UART интерфейсу путем подачи соответствующих АТ команд на модуль? Или я не до конца разобрался? Спасибо!

PS Вроде, разобрался, просто не увидел предыдущего коммита с основными изменениями. Таки должно работать и по UART, верно?

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 14:36:06

У меня в 3 ночи вроде как работало ). Это я потом ещё вспомнил, что забыл про обычне BT модули, без AT команд.

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 14:52:00

Супер, вечерком попробую!

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 18:04:09

WiseLord ещё подскажите, что за константы:

#define LETTER_SPACE_CHAR 0x00E28088 // U+2008
#define BLOCK_CHAR 0x00E29688 // U+2588

- это какие-то адреса или что?

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 20:42:57

Это коды двух символов - тонкого пробела (рисуется между буквами в тексте, не давая им слепиться) и символа закрашенного блока, которым рисуется все отсутствующие символы.

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 21:52:36

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

Re: Темброблок - анализатор спектра на STM32F103

Вт мар 17, 2020 22:40:48

Это коды двух символов - тонкого пробела и символа закрашенного блока.

Это в RLE кодировании?

Re: Темброблок - анализатор спектра на STM32F103

Ср мар 18, 2020 00:33:20

Это просто при рисовании символов.

Чтобы нарисовать строку из N символов, нужно ещё и N-1 символов LETTER_SPACE_CHAR между буквами нарисовать.

А если в строке есть неподдерживаемый в шрифте unicode-символ, вместо него рисуется BLOCK_CHAR.

Вот на скриншоте открыт этот участок кода, а рядом - один из шрифтов: обычным текстом и в hex-редакторе. В обоих случаях выделен один и тот же участок - символ "блока". В hex редакторе при этом можно видеть его UTF8 код.

Изображение

А вот он описан в Unicode: https://www.fileformat.info/info/unicod ... /index.htm

Re: Темброблок - анализатор спектра на STM32F103

Ср мар 18, 2020 12:43:41

2 WiseLord подскажите как вывести символ:

Код:
glcdDrawImage(&fontterminus12_0x20, LCD_COLOR_YELLOW, LCD_COLOR_BLACK); // const tImage *img, color_t color, color_t bgColor

компилятор ругается:

Error[Pe020]: identifier "fontterminus12_0x20" is undefined D:\C_IAR\F103_main\main.c 63

Re: Темброблок - анализатор спектра на STM32F103

Ср мар 18, 2020 14:28:55

glcdWriteString(" "); - не подходит?

Ещё вариант

glcdWriteUChar(' ');

fontterminus12_0x20
- статическая структура, видимая только внутри font-terminus-12.c

А вообще, правильная полная последовательность:
Код:
glcdSetFont(&fontterminus12);
glcdSetFontColor(LCD_COLOR_YELLOW);
glcdSetFontBgColor(LCD_COLOR_BLACK);

и т.д, прочие параметры вывода шрифтов.
Теперь, настройки сохранились в структуре glcd, и теперь можно:
Код:
glcdWriteUChar('H');
glcdWriteString("Hello");
Ответить