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

Обсуждаем цифровые устройства...
Ответить
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3812529#p3812529"]если компилятор не поддерживает такую инициализацию структур, по именам полей (что, вообще-то, странно, это часть стандарта C99), инициализируйте, как умеет. По порядку, например.[/uquote]
А как можно по другому написАть? Для меня это сложновато - С99.

И ещё - Кейл ARM не поддерживает инициализацию переменных кроме как в начале функции, а как с этим у ИАРа ARM?
Хорошему коту и в декабре - март :)
Реклама
Встал на лапы
Сообщения: 125
Зарегистрирован: Ср янв 20, 2016 15:29:12

Сообщение misir »

[uquote="Duke",url="/forum/viewtopic.php?p=3812543#p3812543"][uquote="misir",url="/forum/viewtopic.php?p=3812473#p3812473"][uquote="Duke",url="/forum/viewtopic.php?p=3812303#p3812303"]В итоге заработал селектор входов с отключением питания от неработающих в данный момент источников с помощью расширителя портов на шине i2c на базе PCF8574. Преимущество в том, что BT модуль, FM тюнер и KaRadio не находятся одновременно в эфире и, таким образом, не создают помехи друг другу, а при переходе на соответствующий вход запускаются стабильно, без глюков. В общем, как и ожидалось :) , рекомендую. Также спасибо автору за подсказку!

Фотки изделия в работе без верхней крышки и в сборе.
FM.jpg
KaRadio.png
BT.png
Rear.jpg
[/uquote]
А когда первый раз включаете у вас остается включенным только один источник?[/uquote]

Да, тот который был включен при выключении.[/uquote]
интересно а у меня при вкл включаются все сразу а после переключения работает как надо :(
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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-го.

Недостаток "обычной" инициализации - при добавлении нового поля в середину структуры, нужно лазить по всем инициализациям и править. Тут и до ошибки недалеко.
Контактная информация:
Открыл глаза
Сообщения: 62
Зарегистрирован: Пт фев 21, 2020 17:14:54

Сообщение Duke »

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 на ответном разъеме) все заработало, как надо.
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 125
Зарегистрирован: Ср янв 20, 2016 15:29:12

Сообщение misir »

[uquote="Duke",url="/forum/viewtopic.php?p=3812707#p3812707"]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 на ответном разъеме) все заработало, как надо.[/uquote]
Спасибо за ответ проверю отпишусь.

Добавлено after 1 hour 11 minutes 34 seconds:
[uquote="misir",url="/forum/viewtopic.php?p=3812849#p3812849"][uquote="Duke",url="/forum/viewtopic.php?p=3812707#p3812707"]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 на ответном разъеме) все заработало, как надо.[/uquote]
Спасибо за ответ проверю отпишусь.[/uquote]
Спасибо запитал pcfку от дежурки теперь все как надо :beer:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

Правда, можно немного извратиться, и подавать питание через контакты двух последовательных реле - одного, контролируемого pcf-кой, и другого, контролируемого сигналом STBY. Наверное, тоже бы работало.
Контактная информация:
Реклама
Открыл глаза
Сообщения: 62
Зарегистрирован: Пт фев 21, 2020 17:14:54

Сообщение Duke »

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

Сообщение WiseLord »

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

Обучается отдельная кнопка пульта, с передней панели - длинное нажатие кнопки 2.
Контактная информация:
Потрогал лапой паяльник
Сообщения: 344
Зарегистрирован: Вт окт 22, 2013 23:09:06

Сообщение koka5555 »

Уважаемый WiseLord ,компиляция для 303 не проходит.
Вложения
2020-03-17_104707.png
(23.72 КБ) 231 скачивание
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3812622#p3812622"]

Код: Выделить всё

static tImage unRleImg = { .rle = 0, .data = NULL};
[/uquote]
Попробовал в IAR for STM32 - такая запись прокатила, в Keil не хочет.
Хорошему коту и в декабре - март :)
Открыл глаза
Сообщения: 62
Зарегистрирован: Пт фев 21, 2020 17:14:54

Сообщение Duke »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3813374#p3813374"]Вроде как реализовал. Тестируйте.

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

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

PS Вроде, разобрался, просто не увидел предыдущего коммита с основными изменениями. Таки должно работать и по UART, верно?
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

У меня в 3 ночи вроде как работало ). Это я потом ещё вспомнил, что забыл про обычне BT модули, без AT команд.
Контактная информация:
Открыл глаза
Сообщения: 62
Зарегистрирован: Пт фев 21, 2020 17:14:54

Сообщение Duke »

Супер, вечерком попробую!
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

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

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

- это какие-то адреса или что?
Хорошему коту и в декабре - март :)
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Это коды двух символов - тонкого пробела (рисуется между буквами в тексте, не давая им слепиться) и символа закрашенного блока, которым рисуется все отсутствующие символы.
Контактная информация:
Открыл глаза
Сообщения: 62
Зарегистрирован: Пт фев 21, 2020 17:14:54

Сообщение Duke »

WiseLord, прошился свежей сборкой от сегодня, все супер! Пульт обучился, источники на модуле BT201 переключаются! Можно считать миссию выполненной! Огромное спасибо за постоянную поддержку проекта!
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

[uquote="WiseLord",url="/forum/viewtopic.php?p=3813822#p3813822"]Это коды двух символов - тонкого пробела и символа закрашенного блока.[/uquote]
Это в RLE кодировании?
Хорошему коту и в декабре - март :)
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

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

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

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

Изображение

А вот он описан в Unicode: https://www.fileformat.info/info/unicod ... /index.htm
Контактная информация:
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

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
Хорошему коту и в декабре - март :)
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

Ещё вариант

glcdWriteUChar(' ');

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

А вообще, правильная полная последовательность:

Код: Выделить всё

glcdSetFont(&fontterminus12);
glcdSetFontColor(LCD_COLOR_YELLOW);
glcdSetFontBgColor(LCD_COLOR_BLACK);
и т.д, прочие параметры вывода шрифтов.
Теперь, настройки сохранились в структуре glcd, и теперь можно:

Код: Выделить всё

glcdWriteUChar('H');
glcdWriteString("Hello");
Контактная информация:
Ответить

Вернуться в «Цифровая техника»