Найти тему
DGO шпаргалка

Семисегментный индикатор на китайском CH32V003. Часть1.

Оглавление

Привет! Постоянно что-то забываю. А интернет -ничего. Буду пользоваться.


Итак, что мы наверняка знаем о семисегментных индикаторах? Кроме того, что вытекает из названия.

  1. В основном в качестве сегмента выступает один или несколько светодиодов.
  2. Есть две распространенные схемы включения светодиодов в индикаторе. Это общий анод (слева) и общий катод(справа).

3. Так как сегменты - это светодиоды, то на каждом из них нужно ограничить ток резистором или использовать специальный драйвер.

4. Общий анод или катод подключаются или постоянно к соответствующим цепям питания или через ключ для режима динамической индикации.

5. Для отображения символов на индикаторе используется заранее записанная в память микроконтроллера или заданная комбинацией стандартной логики таблица. Каждый символ в таблице представляет собой последовательность логических нулей и единиц, соответствующих не активным или активным сегментам.

Конструкция индикатора

Существует огромное количество заводских индикаторов любых форм, расцветок и размеров, но нас интересует кастомное решение. Состоящее из отдельных светодиодов, встраиваемых в 3д печатный корпус.

Индикатор температуры для пищевого крана.
Индикатор температуры для пищевого крана.

Вид сзади.
Вид сзади.

Распаивать светодиоды и резисторы по месту будет довольно проблематично, поэтому лучше сделать крепление светодиодов на установочной пластине или печатной плате и установить уже распаянный вариант в посадочное место.

3д модель установочной пластины
3д модель установочной пластины

Подсоединяем аноды к свободным пинам отладочной платы, а объединенные катоды к земле.
Подсоединяем аноды к свободным пинам отладочной платы, а объединенные катоды к земле.

Программирование

Открываем MounRiver Studio и делаем новый проект под свой микроконтроллер. У меня он ch32v003f4u6.

Диалоговое окно нового проекта.
Диалоговое окно нового проекта.

Жмем "Finish".

Открываем в готовой папке файл main.c и удаляем всё. Программу будем составлять так, как предлагает IDE.

-8

Для начала опишем выводы, к которым подключены аноды.

#define LED1_A GPIO_Pin_6 // обозначаем пины, к которым подключены
#define LED1_B GPIO_Pin_5 // соответствующие аноды сегментов
#define LED1_C GPIO_Pin_4
#define LED1_D GPIO_Pin_3
#define LED1_E GPIO_Pin_2
#define LED1_F GPIO_Pin_7
#define LED1_G GPIO_Pin_6

Далее создадим функцию инициализации портов как цифровых выходов.

void GPIO_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
// Структура для инициализации

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE);
// Включение тактирования портов D и C
GPIO_InitStructure.GPIO_Pin = LED1_A;
//пин из "дефайна"
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
// настройка как выход
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //скорость нарастания фронта
GPIO_Init(GPIOD, &GPIO_InitStructure);
// структура для порта D

GPIO_InitStructure.GPIO_Pin = LED1_G; //пин из "дефайна"
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
// настройка как выход
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//скорость нарастания фронта
GPIO_Init(GPIOC, &GPIO_InitStructure);
// структура для порта C

... // далее аналогично для остальных пинов

}

Далее идет функция main

int main(void)
{

SystemCoreClockUpdate();
Delay_Init();
//Инициализация функции Delay_MS()
GPIO_INIT();
//Инициализация портов
while(1)
// бесконечный цикл
{
Delay_Ms(100);
//После короткой задержки
GPIO_WriteBit(GPIOD, LED1_A,1 );
//Зажигаем один светодиод( Порт "D", GPIO_Pin_6)
Delay_Ms(200);
//Немного ждем
GPIO_WriteBit(GPIOD, LED1_A,0 );
//Гасим
Delay_Ms(100);//Немного ждем
GPIO_WriteBit(GPIOD, LED1_B,1 );
//Зажигаем другой
Delay_Ms(200);
//И так далее...
GPIO_WriteBit(GPIOD, LED1_B,0 );
Delay_Ms(100);

... // далее аналогично для остальных светодиодов

}

Последовательность действий.
Последовательность действий.

Жмем "Собрать" и "Загрузить".

Должно получиться как-то так.

В последующих статьях рассмотрим отображение символов и сделаем свою библиотеку для управления такими индикаторами.

Это была моя первая статья. Спасибо, что дочитали!