STM32. CMSIS #7. Динамическая индикация
ฝัง
- เผยแพร่เมื่อ 9 ก.พ. 2025
- Купить книгу "Освоение STM32 самостоятельно" по CMSIS:
• При печати на Xprinter...
Скачать PVS-Studio для проверки своего можно бесплатно на:
pvs-studio.com...
Официальная страничка в TH-cam:
/ pvsstudiotool
Официальная страничка ВКонтакте:
pvsstud...
Разбираемся уже в достаточно сложно проекте на библиотеке CMSIS - над динамической индикацией семи-сегментного индикатора. Рассматривается подробнейшая работа, также рекомендации для схем подключения индикатора с общим анодом и катодом.
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам. Подробнее:
/ @nrelectronics
или через Яндекс-деньги:
money.yandex.r...
оооо...подвезли свежачок,налетай))) Очень рад что продолжаете тему CMSIS.Спасибо большое))
Ага, подвожу периодически)) Пока свежие пирожки налетайте)
о, снова cmsis, люблю эту тему)
Я тоже её обожаю)
Огромное спасибо за крайне полезный материал!
Спасибо) Дальше проекты сложнее будут и может не каждую недельку. Добирать будем и халом.
@@NRelectronics HAL в топку
я бы так не сказал, все к месту.
Спасибо за достаточно редкий курс для встраиваемых систем на русскоязычном сегменте!
Вам спасибо за оценку. Рекомендуйте другим.
Есть более продвинутый вариант алгоритма программы. Вместо ручного назначения для каждой цифры - использовать макросы сборки тех самых цифр. При этом привязку делать уже к физическим ногам одного порта, а управлять через регистр BRR.
Получается программа разделённая на слои: железо, драйвер, модуль индикации, и логика пользователя. Можно в любой момент изменить любой слой, например поменять ноги мк под индикатор, или добавить сегментов...
А у вас уровень железа протянут до логики, и если что-то нужно будет менять - проект придётся переписать полностью.
Есть и продвинутый и второй и третий и куча вариантов. Предложенный мной самый доступный по доставаемости и цене, любой студент за 100₽ такой индикатор сможет купить. А от другого железа и реализация другая, и на все сразу не напишешь...
@@NRelectronics В программе разделённой на слои - сегментный индикатор может быть абсолютно любым. На уровне железа нужно будет назначить каждому сегменту ногу мк, и этот момент всегда уникален. А вот всё остальное можно использовать многократно. В этом и прелесть разделения - написать один раз, использовать многократно.
Материал просто супер !особенно для меня после PICов ,, это небо и земля,,, но хотелось бы что бы автор больше о прерываниях рассказал ,,, по настройке ,,, то как они вызываются ,, и тд,, возможно есть такое видео ( но я что то не обратил внимание
Спасибо за высокое мнение о контенте. В следующих видео попробую учесть пожелания.
А как бы вы реализовали управление яркостью индикации по шим?
Изменением скважности Шима, или его обратным коэффициентом - коэффициентом заполнения.
Не могу сообразить с обвязкой. Если индикатор на 5 вольт, как подключить с общим катодом?
Я вроде бы схемку показывал в ролике...
А как точку выводить? в динамической индикации?И разрядность для часов другие? Led print?
Через lead stream, к сожалению в видео это не показал. Вообще планировал сделать видео с реализацией на семисегментике часов с RTC, там это как раз четенько будет показано. Тут тема все же динамическая индикация как сам механизм.
@@NRelectronics Через DMA?А на часах другая разрядность.
@@NRelectronics А какая?
На часах можно и точку как раз же выводить. Какая RTC ещё не решил, у меня их много разных...
@@NRelectronics Лучше ds3231
я бы собрал свитч покомпактнее: кейс, операция присваивания, брейк - все в одной строке. Так читаемость кода гораздо лучше)
switch(segment) {
case 0: r=0xC0; break;
case 1: r=0xF9; break;
...
Так лучше читаемость, согласен, спасибо за пример. Плохо что мало кто примеров приводит.
👍👍👍
Примерно так же на AVR.
Везде оно похоже...
@@NRelectronics У меня ещё один вопрос а как вывести вещественный результат на 7-сегментник
Хочу немного поделиться своими наработками) как число разбить на отдельные цифры что бы не плодить глобальные переменные а сразу работать с массивом
1 объявить глобальный массив в моем случае это uint8_t buffer [4]={0,0,0,0};
2 написать функцию что бы передаваемое число при каждой итерации делилось на саму себя и делилось по модулю
void numer_parser (uint32_t number)
{
uint8_t i = 0;
for(i = 0; iODR |=num[buffer[0]]; 0,,,1,,2,3 и тд
просто перебрать цифры в массиве
Спасибо за код, по свободе посмотрю.
А я не понял зачем было заморачиваться на четыре дискретных транзистора ? Нагрузка у них и так диодная открытый коллектор не обязателен. Не проще ли было использовать например какой нибудь самый дешёвый кмоп аналог к561ла7 ? Один корпус - четыре инвертора.
А затем что таких транзисторов море у каждого, а ставить статически неустойчивую КМОП ЛА7 ни возможности ни желания нет.
Очень прошу сделайте блок схему программы, из описания сложно понять. Пытался вникнуть, но не смог.
Будет времечко, обязательно сделаю для вас.
👍🏼
Тоесть анализатор ругается даже на библиотеку от Cortex? Что-то в нём не так)))
Да вот нет, как раз к библиотеке много вопросов...
@@NRelectronics С недавнего времени осваиваю STM и HALовский кот в мешке дико не нравится, а тут ещё новость, что и с базовой CMSIS не всё красиво.
Ну там не настолько некрасиво как можно подумать. На CMSIS это база, обращения в регистры, наиболее правильный способ программирования. Хал там может что-то вообще не работать.
На редкость замороченная и неудобная реализация динамической индикации. Для учебных целей - сойдет, но в реальном проекте лучше так не делать.
Я ведь говорил способов много разных. Напишите тут более удобный способ пожалуйста, для этого канал и создан.
@@NRelectronics Веселости начнутся, когда во время разводки платы под реальное устройство, придется несколько раз переназначать подключение сегментов к портам (или разрядов), в угоду удобства прокладки дорожек и сокращения числа перемычек. И тогда придется все эти магические 0xC0, 0xF9 и т.д. перевычислять с калькулятором, какой бит какой ножке соответствует. Кроме того, при вашем подходе невозможно что-то отобразить кроме цифр. Буковку, символ "-" или прочее, что вообще можно отображать на семи сегментах.
Почему при моем подходе невозможно что-то кроме цифры обозначить? То что "-" не указаны и символы совершенно не значит что это нельзя)
С разводкой весëлости могут быть такие, но с таким малым МК не отрассировать эти выводы подряд идущие это тоже нужно умудриться)
@@NRelectronics Сколько в таком случае появится case'ов в функции segchar? на каждый доп. символ - еще один case? При этом пропорционально возрастает трудоемкость модифицирования символов в каждом конкретном случае (при разных вариантах подключения сегментов). Вам ниже правильно сказали, символы нужно дефайнить.
что за мания у программистов, в кучу смешивать периферию и логику, логика должена быть аппаратно независима
по всякому бывает. сделаем и отдельно.