пятница, 15 сентября 2023 г.

Дисплей на tm1637 и его применение в Microchip Studio с микроконтроллерами AVR на примере Attiny13



            В данной статье я расскажу о дисплее на основе микросхемы TM1637 и библиотеки для его использования в среде Microchip Studio.

            Данный модуль включает в себя микросхему TM1637 к которой подключен четырехразрядный семисегментный индикатор с двоеточием без точек после каждого из разрядов:

            Принципиальная электрическая схема модуля представлена ниже. Для подключения к микроконтроллеру или Arduino используются 4 вывода: VCC, GND для подключения питания и CLK, DIO для управления микросхемой TM1637:



            Теперь перейдем к программной части. Для управления модулем на основе микросхемы TM1637 в среде Microchip Studio я рекомендую использовать библиотеку, разработанную Łukasz Marcin Podkalicki. Вот ссылка на его Github.


            На всякий случай сохранил библиотеку себе на google диск.


            ДАННАЯ БИБЛИОТЕКА ПОЗВОЛЯЕТ:

- отображать цифры и управлять двоеточием на семисегментном индикаторе

- управлять определенными сегментами в пределах одного знака на индикаторе

- включать/выключать свечение семисегментного индикатора 

- регулировать яркость семисегментного индикатора


            Библиотека отлично работает с микроконтроллерами семейства attiny (как заявляет автор библиотеки ATtiny13, ATtiny25, ATtiny45, ATtiny85) и как и предыдущая библиотека этого автора с atmega (при условии подключения TM1638 к порту B микроконтроллера)


            Как подключить библиотеку я подробно описал в статье «Как подключить к Microchip/Atmel Studio библиотеку», но перед этим в файле tm1637.h в строках, которые после «// Main Settings» необходимо задать выводы микроконтроллера к которым подключены пины, или же подключить их так, как прописано в программе: 

// Main Settings
#define	TM1637_DIO_PIN			PB0
#define	TM1637_CLK_PIN			PB1


         Перед тем как начать использовать устройство на TM1638 его нужно инициализировать. Инициализация выполняется командой TM1637_init(state, brightness_value)

где state – состояние дисплея после инициализации (1 или 0) 1 – включено, 0 – выключено

       brightness_value – яркость свечения дисплея (от 0 до 7) 0 – минимальная, 7 – максимальная

Пример использования:

TM1638_init(1/*enable*/, 6 /*brighness*/);
//или TM1638_init(1, 6);


            После инициализации TM1638 для управления модулем используются следующие команды:

TM1637_clear() - Очистка (выключение) всех сегментов дисплея, включая двоеточие.

Пример:

TM1637_clear(); //Очистить дисплей


TM1637_enable(state) – включение/отключение свечения дисплея, где state управляет свечением дисплея (1 или 0) 1 – включено, 0 – выключено, например:

TM1638_enable(0); //Выключить свечение семисегментных индикаторов
TM1638_enable(1); //Включить свечение семисегментных индикаторов


TM1637_set_brightness(brightness_value) – задание яркости свечения светодиодного семисегментного дисплея, где brightness_value значение яркости от 0(минимум) до 7(максимум)

Например:

TM1638_set_brightness(4); // установить яркость дисплея на 4 из 7


TM1637_display_digit(position, digit) – вывод цифры в определенный разряд на семисегментный дисплей, где

    position – разряд на дисплее (от 0 до 3), куда будет выведена цифра.

    digit – цифра, которая будет выведена в разряд(от 0 до 9)

например:

TM1637_display_digit(0,2); // Высести цифру "2" в разряд 0
TM1637_display_digit(1,0); // Высести цифру "0" в разряд 1
TM1637_display_digit(2,2); // Высести цифру "2" в разряд 2
TM1637_display_digit(3,3); // Высести цифру "3" в разряд 3



TM1637_display_colon() – управление свечением двоеточия на дисплее (1 или 0) 1 – включено, 0 – выключено

    Заметил, что данная команда более-менее корректно работает только совместно с TM1637_display_digit. При использовании ее без этой во втором разряде зажигается «8»:

 

Хотя в идеале должно быть так:

  


 Пример использования команды:

TM1637_display_colon(1); //включить двоеточие


TM1637_display_segments(position, segments) – включение определенных сегментов на определенном разряде семисегментного дисплея, где 

    position – разряд на дисплее (от 1 до 8), на котором будут включаться сегменты.

    segments – число, каждый бит которого в двоичном виде соответствует определенному сегменту дисплея. Если бит установлен в 1 – сегмент светится, в 0 – не светится: 


                Т.е. если нужно засветить символ «H», то segments=0b01110110, если нужен символ «-», то segments=0b01000000.


                Двоеточием управляет восьмой бит в разряде, после которого оно идет (т.е. во втором разряде из четырех или первом, если считать с нуля) – 0b10000000. Если он установлен в 1 – сегмент светится, в 0 – не светится. По причине описанной в предыдущем пункте не рекомендую совместно с TM1638_display_segments использовать команду включения двоеточия - TM1637_display_colon

Примеры использования данной команды:

TM1637_display_segments(0, 0b01110011); //Буква "Р"
TM1637_display_segments(1, 0b00111111); //Буква "О"
TM1637_display_segments(2, 0b00111001);  //Буква "С"
TM1637_display_segments(3, 0b01110111);  //Буква "А"


На этом пока все. До новых встреч!


Комментариев нет:

Отправить комментарий