Сегодня реализовал идею по использованию трехсегментного индикатора эмулятора дисковода Gotek, который никак не используется после подключения 2.42" OLED-экрана.
Решил использовать этот индикатор для отображения режима Turbo. Для начала нашел спецификацию на этот индикатор. Это оказалось не трудно.
https://github.com/coopzone-dc/GotekLEDC68
Индикатор управляется по протоколу I2C. Поэтому, для простоты реализации взял дешевую плату Arduino NANO. Тем более, уже есть готовые библиотеки для работы Ардуино с индикатором.
Итак, подключаем индикатор к выходам SCL и SDA. На плате это контакты А5 (19) и А4 (18) соответственно.
Установил в Arduino IDE библиотеку GotekLEDC68. Это два файла TM1651.h, TM1651.cpp
Запустил тестовый скетч DemoCounter - индикатор заработал.
Мне надо организовать вывод двух надписей - nor и tur. Таких символов в драйвере индикатора нет. Поэтому, решил поступить просто. Изменить рисунок цифр в драйвере.
Таким образом 123 - это будет nor, а 456 - это будет tur
Рисунок символов лежит в секции static int8_t NumTab[] = файла TM1651.cpp (перед изменением сохраняем оригинальный файл!)
Это коды рисунка цифр и сиволов от 0 до 9 и от A до F. Плюс еще какие-то символы.Код:static int8_t NumTab[] = { 0x3f, 0x54, 0x5c, 0x50, 0x78, 0x1c, 0x50, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00, 0x63, 0x5c, 0x01, 0x40, 0x08 }; //numbers 0-9, A-F, special chars
Нам надо поменять коды для цифр от 1 до 6
Для этого удобно использовать готовые онлайн инстументы. Например, такой https://vip-cxema.org/index.php/onli...ed-kalkulyator
Мышкой рисуем нужный символ и получаем HEX-код, который надо прописать на нужное место в секции static int8_t NumTab[] =.
Изменил, проверил на тестовом скетче. Символы поменялись и выводятся корректно.
Теперь, надо написать обработчик события. В нашем случае надо мониторить сигнал Turbo и, в зависимости от его уровня, выводить на индикатор надпись nor или tur.
На плате есть выход для светодиода "Turbo". Вот к этому разъему удобно подключать плату Ардуино и отслеживать его уровень.
Сигнал Turbo со Спектрума подключил к входу D2.
Хочу сразу сказать, что я в Ардуино полный ноль. Пришлось посмотреть уроки.
После этого написал простой скетч.
Проверил на реальном Скорпионе - переключение работает корректно.Код:/***********************************************************/ //Turbo-Mode indicator for Gotek 3 digit LED //Hardware: Re-Used Gotek 3 digit LED //Board: Arduino NANO //Autor: Froggy //Date: 14.12.2024 /***************************************************************/ #include "TM1651.h" #define CLK 19 //pins definitions for TM1651 and can be changed to other ports #define DIO 18 TM1651 Display(CLK,DIO); void setup() { pinMode(2, INPUT_PULLUP); //pin definition for INPUT signal (turbo-mode) Display.displaySet(2);//BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7; } void loop() { boolean turbo = digitalRead(2); // Read turbo status Scorpion 256 if (turbo == 0) { uint16_t num = 123; // Normal-mode Display.displayInteger(num); delay(100); } else { if (turbo == 1) { uint16_t num = 456; // Turbo-mode Display.displayInteger(num); delay(100); } } }
Возможно, надписи nor и tur не самые информативные, но что-то лучшее придумать не смог. Были разные варианты, в т.ч. и по написанию букв.
Еще можно подумать об загрузочном приветствии, которое будет отображаться на индикаторе только один раз при подаче на Спектрум питания. Но пока интересных идей у меня нет.












Ответить с цитированием