Автор Тема: LED_Display_Dinamic STM32  (Прочетена 2963 пъти)

Неактивен EDM electronics

  • Global Moderator
  • Много Напреднал
  • *****
  • Публикации: 4 529
  • Z - Оркестър Вагнер
LED_Display_Dinamic STM32
« -: Февруари 25, 2023, 12:04:00 am »
Вчера докато си почивах, написах една библиотека за LED-динамична индикация с 3 бр. 7-сегментни индикатора за STM32. Използват се 11 пина - 7 за сегментите и 1 за точката и 3 за анодите.
Има готови дисплеи с последователни регистри тип SPI, но целта на занятието е, когато се пести от към излишни елементи и има доста свободни изводи на контролера. Индикатора се връзва директно на пиновете на контролера.

Примера на видеото е с най-малкия учебен контролер STM32F103C8T6, който има над 32 използваеми пина. Индикацията е динамична, т.е. 3-те индикатора бягат с  около 5 mS. Добре светят и при 1 mS.
Кръговия брояч е направен със софтуерен таймер на библиотека HAL с функцията HAL_GetTick(), която е еквивалента на millis() при Ардуино, не съм ползвал апаратен, защото е много по-лесно и универсално.
Библиотеката е универсална и може да се ползва на абсолютно всички контролери STM32, като единствено се запишат в хедер-файла кои пинове и кои портове се ползват - никакви други настройки не са нужни. Във видеото е видно как се наименуват пиновете.
Всички комутации на изходите са направени с битова маска за всеки отделен пин, не порт и по този начин е достатъчно да се именува който и да е пин на контролера, да се разменят места за удобство, това няма да има нужда на преправяне на библиотеката.

Основните функции са две: 1. за изписване на число int до 999 с ограничител и 2. изписване на масив от 3 отделни символа.

Ако има интерес, мога да споделя и библиотеката.

<a href="https://www.youtube.com/v/FrRY-pifbtM" target="_blank" class="new_win">https://www.youtube.com/v/FrRY-pifbtM</a>


//Функции за използване в main()  loop
//================================================================


void LED_Display_Init(void);    //функция за иницииране на дисплея в satup


void LED_brightness(uint16_t value);   //функция яркост на дисплея от 1-10


void LED_Clear(void);     //функция за изчистване на дисплея - не свети


void LED_Display_int(uint16_t IntVal, uint8_t point);    //функция за изписване на  число uint16_t


void LED_Display_masiv(uint8_t mas3, uint8_t mas2, uint8_t mas1);  //функция за масив от 3 символа

//================================================================

Неактивен Ksurnev

  • Експериментатор
  • Много Напреднал
  • ***
  • Публикации: 1 371
  • Пол: Мъж
  • Ужасно саркастичен
Re: LED_Display_Dinamic STM32
« Отговор #1 -: Февруари 25, 2023, 10:28:28 am »
ЕДМ, тук се вижда по-добре.

https://www.youtube.com/watch?v=FrRY-pifbtM