В данной статье описано подключение платы управления от спутникового тюнера на базе HBS588 к Arduino. Плата управления на базе этой микросхемы очень часто используется в спутниковых и DVB-T2 тюнерах и содержит дисплей, клавиатуру и HBS588 для управления всем этим:
Для работы платы необходимо 4 вывода: +5В, GND, CLK и DIO. После прозвонки было выяснено, что вывод 1 разъема это выход инфракрасного приемника, его работа с Arduino уже достаточно описана, например здесь и останавливаться на нем мы не будем. Выводы 2,3,4,5 разъема в моем случае соответствуют выводам Vcc (5В), DIO, GND, CLK микросхемы HBS588:
Схема подключения модуля к Arduino:
Функционально микросхема HBS588 похожа на TM1637. Они обе поддерживают вывод информации на дисплей и ввод с клавиатуры. Поэтому для работы будем использовать библиотеку ErriezTM1637. Установить ее можно с официального гитхаба автора или с моего облака (устанавливается в Arduino через Скетч/Подключить библиотеку/Добавить .ZIP библиотеку). На текущий момент она единственная, которая поддерживает кроме вывода на дисплей еще и ввод с клавиатуры.
После установки библиотеки ее необходимо выполнить ее инициализацию командой:
tm1637.begin();
Далее для управления используются следующие команды:
tm1637.displayOn() – Включает дисплей. На дисплее засвечиваются сегменты, заданные ранее командой (командами) tm1637.writeData(а, b)
tm1637.displayOff() – Выключает дисплей. Все сегменты гаснут.
tm1637.writeData(а, b) - вывод одной цифры (знака) на дисплей, где
а – порядковый номер разряда на (от 0 до 3), куда будет выведена цифра или знак
b – число указывающее какие сегменты засветить в данном разряде (в двоичной системе исчисления):
Как видно с рисунка чтоб засветилась на дисплее цифра «3» число b должно быть 0b01001111 (оно же 79 в десятичной или же 0x4F в шестнадцатеричной системе исчисления). Пример числа b для разных цифр:
0b00111111, //цифра 0
0b00000110, //цифра 1
0b01011011, //цифра 2
0b01001111, //цифра 3
0b01100110, //цифра 4
0b01101101, //цифра 5
0b01111101, //цифра 6
0b00000111, //цифра 7
0b01111111, //цифра 8
0b01101111, //цифра 9
Чтобы засветить двоеточие (D1, D2), необходимо чтобы в числе b, 8й разряд был 1 (в двоичной системе исчисления). Например, 0b01001111 высветит «3», а 0b11001111 – «3:»
tm1637.getKeys() – выполняет опрос клавиатуры, результатом является код нажатой клавиши в шестнадцатеричной системе.
Далее приведу проверочный скетч, который выводит на экран заданное четырехзначное число. Также производится опрос кнопок. При нажатии первой кнопки – включается-отключается свечение дисплея, второй кнопки - загорается-гаснет двоеточие. Третья кнопка увеличивает значение числа на 1:
/************************************************************* * Управление с контроллером hbs588 * с 7-ми сегментным индикатором и клавиатурой * при помощи Arduino. * Сайт автора: http://mynobook.blogspot.com/ * Библиотека отсюда: https://github.com/Erriez/ErriezTM1637 *************************************************************/ #include <ErriezTM1637.h> // Выводы Arduino к которым подключен HBS588 #define HBS588_CLK_PIN 2 #define HBS588_DIO_PIN 3 TM1637 tm1637(HBS588_CLK_PIN, HBS588_DIO_PIN); static uint8_t keysLast = 0; // Создаем знакогенератор int num[10] = { 0b00111111, //цифра 0 0b00000110, //цифра 1 0b01011011, //цифра 2 0b01001111, //цифра 3 0b01100110, //цифра 4 0b01101101, //цифра 5 0b01111101, //цифра 6 0b00000111, //цифра 7 0b01111111, //цифра 8 0b01101111, //цифра 9 }; int OnDisplay = 1; // Состояние диплея (1-вкл. 0-выкл) int OnColon = 0; // Состояние двоеточия (1-вкл. 0-выкл) int DataD = 1234; //Число выводимое на экран int DataDm[4]; //Массив для числа выводимого на экран по цифрам int tempData; void setup() { Serial.begin(115200); // Инициализация дисплея HBS588 tm1637.begin(); // Включение дисплея tm1637.displayOn(); } void loop() { // Опрос клавиатуры uint8_t keys; // Read 8-bit keys keys = tm1637.getKeys(); // Проверка нажатия кнопок if (keysLast != keys) { keysLast = keys; // При нажатии кнопки 0x4 включить - выключить дисплей if (keys == 0x4) { if (OnDisplay == 1) { tm1637.displayOff(); OnDisplay = 0;} else { tm1637.displayOn(); OnDisplay = 1;} } // При нажатии кнопки 0x2 включить - выключить двоеточие if (keys == 0x2) if (OnColon == 1) OnColon = 0; else OnColon = 1; // При нажатии кнопки 0x5 увеличить число на 1 if (keys == 0x5) DataD++; //DataD++, то же, что и DataD=DataD+1; // Вывод кода нажакой кнопки в порт Serial.print(F("Keys: 0x")); Serial.println(keys, HEX); } // Разбивание числа на цифры и запись в массив tempData = DataD; for (int i = 3; i >= 0; i--) { DataDm[i] = tempData % 10; tempData = tempData / 10; } // Вывод информации for (int i=0; i<=3; i++) { if (OnColon == 0) {tm1637.writeData(i, num[DataDm[i]]);} else {if (i == 1) tm1637.writeData(i, num[DataDm[i]]+128); else tm1637.writeData(i, num[DataDm[i]]);} } }
Спасибо. искал библиотеку на HBS588.Тоже достался индикатор с микросхемой от DVBT тюнера. Все работает и свои символы можно сделать.
ОтветитьУдалить