суббота, 9 сентября 2023 г.

Модуль LED&KEY и его применение в Microchip Studio с микроконтроллерами AVR на примере Attiny13

 

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

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

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

 

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

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

            Данная библиотека позволяет:

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

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

- Управлять свечением светодиодов

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

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

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


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

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

// Main Settings
#define	TM1638_DIO_PIN			PB0
#define	TM1638_CLK_PIN			PB1
#define	TM1638_STB_PIN			PB2


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

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

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

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

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


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

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

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


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

Например:

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


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

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

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

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

например:


TM1638_display_digit(0 /*Разряд 0*/, 5 /*вывод числа 5*/, 0 /*точка после числа не светится*/);
TM1638_display_digit(1, 1, 0); 
TM1638_display_digit(2, 2, 0);
TM1638_display_digit(2, 2, 0);



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

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

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

 


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

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

TM1638_display_segments(1/*position 0..7*/, 0b01110111); //A
TM1638_display_segments(2/*position 0..7*/, 0b01111100); //b
TM1638_display_segments(3/*position 0..7*/, 0b00111001); //C



TM1638_clear_segments() – команда отключает все сегменты на дисплее, включая точки (очищает дисплей).


 

TM1638_set_led(position, state) – команда для управления светодиодами. Зажигает или гасит определенный светодиод 

    position – номер светодиода (от 1 до 8)

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

Пример: 

TM1638_set_led(4 /*position 1..8*/,1 /*enable*/);
TM1638_set_led(5, 1);



    TM1638_clear_leds() – погасить все светодиоды

 

TM1638_scan_keys() возвращает восьмибитное число, каждый бит которой соответствует нажатой кнопке. 

            Например, при нажатой кнопке «S1» будет возвращено число 0b00000001(1), при нажатой кнопке «S2» - число 0b00000010(2) и так далее: «S3» - 0b00000100 (4); «S4» - 0b00001000 (8); «S5» - 0b00010000 (16), «S6» - 0b00100000 (32), «S7» - 0b01000000 (64) и «S8» - 0b10000000 (128). 

            Также поддерживается нажатие нескольких кнопок одновременно, т.е. если нажать кнопки «S1», «S2» и «S8» - будет возвращено число 0b10000101 (133). И соответственно, если ничего не нажато, то будет возвращен «0».

Пример:

keys = TM1638_scan_keys() // Опросить клавиатуру и результат присвоить переменной keys


На этом пока все!


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

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