TM1638 LED&KEY

Использование дисплеев и обсуждение пользовательских блоков к ним
Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 92
Откуда: Bukovyna
Имя: Василий

TM1638 LED&KEY

#101

Сообщение Labu559 » 04.10.2019{, 08:40}

edyapd писал(а):
04.10.2019{, 05:49}
Labu559 писал(а):
04.10.2019{, 00:16}
Автор сделал перезапись уровня яркости только при его изменении по сравнению с предыдущим значением, а не в каждом цикле.
Можете показать в каких строчках это реализовано?
Не могу, я ошибся, это в моей библиотеке так реализовано. Исправил сообщение (убрали кнопку зачёркнутого текста? :smile37: ), извините.
Вообще то нужно смотреть на весь код первоисточника, а не на избранные куски. В комплексе там есть ф-и увеличения и уменьшения яркости на 1 кнопками. :smile44:
По Батисте можно так:

Код: Выделить всё

void loop() {
  if (currentBrightness != newBrightness){
	currentBrightness = newBrightness ;
	 setBright(currentBrightness);}
}

void TM16xx::setBright(byte newBrightness)
  {
    byte intensity = 0x80;  // display OFF mode, 0x88- ON mode
    if (newBrightness) intensity += (newBrightness + 7); 
    // или то же с защитой от превышения диапазона (отсекаем 4,5,6 биты)
    // if (newBrightness) intensity += ((newBrightness&0xF)+ 7);
    send(intensity);
// ф-я от Батисты
void TM16XX::send(byte data)
{
  for (byte i = 0; i < 8; i++) {
    CLK_LOW;
    digitalWrite(dataPin, data & 1 ? HIGH : LOW);
    data >>= 1;
    CLK_HIGH;
  }
}
Последний раз редактировалось Labu559 13.05.2021{, 08:07}, всего редактировалось 4 раза.

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 64
Имя: Эдуард

TM1638 LED&KEY

#102

Сообщение edyapd » 04.10.2019{, 09:23}

Labu559, хотя ваша идея, изменять яркость только тогда когда она отличается от текущей, думаю очень даже правильная. Лишний раз не надо дёргать дисплей.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

TM1638 LED&KEY

#103

Сообщение pan » 04.10.2019{, 10:49}

Labu559 писал(а):
04.10.2019{, 00:16}
только при его изменении по сравнению с предыдущим значением,
там просто запоминается текущее значение яркости, которое функция и возвращает.
хотя не вижу в этом смысла.
edyapd писал(а):
04.10.2019{, 09:23}
изменять яркость только тогда когда она отличается от текущей
это должно реализовываться в коде. функция должна выполнить свое дело.

хотя ни кто не мешает сделать как самому удобно...

seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 21
Откуда: Кременчуг
Имя: Сергей

TM1638 LED&KEY

#104

Сообщение seri0shka » 04.10.2019{, 23:40}

edyapd писал(а):
04.10.2019{, 05:49}
в каких строчках это реализовано?
Я тоже не нашёл. Хотя это бы не помешало. Зато узнал, что строка

Код: Выделить всё

currentBrightness = (newBrighness > 8) ? 8 : newBrighness;
эквивалентна строкам

Код: Выделить всё

  if (newBrighness > 8) {
    currentBrightness = 8;
  } else {
    currentBrightness = newBrighness;
  }
Отправлено спустя 4 минуты 47 секунд:
Почему-то только после отправки сообщения увидел страницу 6 форума. До этого только 5 отображало.

Аватара пользователя
Sancho
Полковник
Сообщения: 3991
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 567
Откуда: Ярославль.
Имя: Александр
Контактная информация:

TM1638 LED&KEY

#105

Сообщение Sancho » 05.10.2019{, 09:05}

seri0shka писал(а):
04.10.2019{, 23:45}
Зато узнал, что строка
называется тернарная условная операция :)
Если не получится на контроллере - сделаю на тразисторах и 155/176...Научился, немного.
Поможем проекту вместе!

seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 21
Откуда: Кременчуг
Имя: Сергей

TM1638 LED&KEY

#106

Сообщение seri0shka » 05.10.2019{, 21:41}

Не уверен, что кому-то понадобится, но выкладываю. Мои потребности полностью удовлетворяет.
Выкладываю именно в виде блока и скринов пректов, чтобы открылось у всех в любой версии программы. Для меня актуальная на сегодня FLProg_2-3-2, более новые в ближайшее время устанавливать не буду, хватит экспериментов.
Исправленный блок в посте 108. viewtopic.php?p=77291#p77291
Первый тестовый проект выводит на семисегментный индикатор число 01234567 с минимальной яркостью:
0123.png
0123.png (6.47 КБ) 855 просмотров
Второй проект- на первых 4 разряда выводит состояние кнопок (одна кнопка- один сегмент, причём в довольно хаотичном порядке), остальные разряды- число 4567:
0124.png
0124.png (4.59 КБ) 855 просмотров
Из описания блока: Блок для TM1638.
Работает без библиотек. Выводит на индикацию 8 символов согласно байтовых переменных на входе блока (8 бит каждого байта- соответственно состояние сегментов соответствующего разряда). Разрабатывался для уравления матрицей из 64 одиночных светодиодов.
На выходах блока 4 неполных байта состояния кнопок (2 бита в байтах всегда обнулены). Поддерживает любое количество одновременно замкнутых кнопок/тумблеров (без ущерба для индикации при наличии диодов согласно стандартной схемы).
Для вывода на 8-разрядный семисегментный индикатор с общим катодом цифр от 0 до 9 на входы нужно соответственно подать коды 63, 6, 91, 79, 102, 109, 125, 7, 127, 111 в десятичной системе.
Для индикатора с общим анодом логика другая- любой входной байт будет соответствовать комбинации одного из сегментов во всех 8 разрядах.
Работает также с ТМ1628 (проверено частично, потому как она у меня распаяна с индикатором с ОА), и должен работать с ТМ1668, нет у меня для проверки.
Вопрос к знатокам: как в пользовательском блоке добавить функцию типа

Код: Выделить всё

void updateDisplay(void)
Программа не принимает, пришлось делать с фиктивной переменной:

Код: Выделить всё

void updateDisplay(bool a)
Вложения
TM1638_28_T_R_01_(CODE).ubi
(105.29 КБ) 56 скачиваний
Последний раз редактировалось seri0shka 07.10.2019{, 16:50}, всего редактировалось 2 раза.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

TM1638 LED&KEY

#107

Сообщение pan » 07.10.2019{, 08:22}

seri0shka писал(а):
05.10.2019{, 21:41}
как в пользовательском блоке добавить функцию типа
уберите в скобках void
оно там не нужно

seri0shka
Лейтенант
Сообщения: 391
Зарегистрирован: 09.04.2016{, 12:17}
Репутация: 21
Откуда: Кременчуг
Имя: Сергей

TM1638 LED&KEY

#108

Сообщение seri0shka » 07.10.2019{, 16:46}

Спасибо! Поправил блок:
TM1638_28_T_R_01_(CODE).ubi
(104.61 КБ) 114 скачиваний

kipsa
Рядовой
Сообщения: 24
Зарегистрирован: 25.02.2019{, 17:11}
Репутация: 2
Имя: Игорь

TM1638 LED&KEY

#109

Сообщение kipsa » 09.05.2021{, 06:43}

Скачал где-то в этой ветке ( автору респект, долго мучался чтобы простучаться к этому шилду) но есть одно НО - не работают кнопки с 9 по 16. Подскажите пожалуйста где и что дописать?
Вложения
QYF-TM1638_(CODE).ubi
(381.92 КБ) 31 скачивание

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 92
Откуда: Bukovyna
Имя: Василий

TM1638 LED&KEY

#110

Сообщение Labu559 » 09.05.2021{, 10:18}

kipsa писал(а):
09.05.2021{, 06:43}
но есть одно НО - не работают кнопки с 9 по 16. Подскажите пожалуйста где и что дописать?
Это "НО" есть следствием заявленой в то далёкое время поддержки в программе типа данных беззнакового 16-битного word (unsigned int, uint16_t), а по факту её отсутствия до сих пор. Всё надеялся, что вот-вот и исправлю, так как принципиально считаю "костылить", тем более со СТАНДАРТНЫМИ типами данных, дурным методом обучения программированию, тем более если FLProg являлась начальным, закладывающим основы, этапом этого обучения (лично у меня). Библиотечная (оригинальная от с. Батисты) функция сканирования кнопок сохраняет результат именно в переменную типа word. А так как всё сказанное до слова "НО" в реальной жизни не имеет никакого значения, то попробуйте этот
Проект/блок на костылях.Показать
QYF-TM1638_Test16Keys.flp
(971.05 КБ) 26 скачиваний
Оговорюсь сразу, не имею желания устанавливать в системе биб-ку Батисты, на которую матерится компилятор, потому делал по-памяти/склерозу и тестирование за Вами. Если Вы не отпишитесь о результатах- эти проект/сообщение будут удалены, как блок не прошедший проверку и недостоверная информация. Извините, но другого способа борьбы с "мусором" на форуме не вижу. "Чисто там, где не сорят, а не где убирают!". Если не трудно, проверьте пожалуйста нет ли ошибки на опубликованой мной в #83 схеме относительно Вашего модуля QYF-TM1638, в плане наличия диодов IN4148 на кнопках. Спасибо! Кстати, Вам удалось победить SC6928B, в этом драйвере очень похожая система команд с ТМ1638 ?
Удачи!
Начал перечитывать эту ветку, просто удивительно как изменилось за 4 года сообщество форума, и как тогда дружно мы сообща "рожали" блок. :)

kipsa
Рядовой
Сообщения: 24
Зарегистрирован: 25.02.2019{, 17:11}
Репутация: 2
Имя: Игорь

TM1638 LED&KEY

#111

Сообщение kipsa » 09.05.2021{, 19:33}

огромное Вам спасибо за помощь!!!!!!!! кнопки наконец-то заработали все 16 штук. Но сначала я скачал Ваш блок и при компиляции он мне выдал ошибку ( скрин ниже ). После чего я в заголовок добавил подключение библиотеки вот этой " #include <TM1638.h>" и всё отлично скомпилилось и залилось. Работает отлично. ( ниже пример Flprog ). Одна просьба - нет ли у Вас времени чуток допилить блок? Было бы идиально, если бы на входах на каждую точку был бы свой булевский вход.

Отправлено спустя 3 минуты 26 секунд:
Кстати, Вам удалось победить SC6928B, в этом драйвере очень похожая система команд с ТМ1638 ?
К сожалению нет, победить не удалось - не получалось долго, забросил в долгий ящик. Потом как нить попробую опять


По поводу схемы №3 с 16-ю кнопками, у меня вроде всё как на схеме
Вложения
Новый точечный рисунок.bmp
Новый точечный рисунок.bmp (3 МБ) 336 просмотров
QYF-TM1638_Test16Keys.flp
(954.96 КБ) 27 скачиваний

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 92
Откуда: Bukovyna
Имя: Василий

TM1638 LED&KEY

#112

Сообщение Labu559 » 09.05.2021{, 22:24}

kipsa писал(а):
09.05.2021{, 19:37}
... сначала я скачал Ваш блок и при компиляции он мне выдал ошибку ( скрин ниже ). После чего я в заголовок добавил подключение библиотеки вот этой " #include <TM1638.h>" и всё отлично скомпилилось и залилось.
Это странно, потому как Вы же раньше его не добавляли, блок работал и
в новом блоке остался со старого include:Показать
QTY-TM1638_Batista.png
#include как в старом блоке
kipsa писал(а):
09.05.2021{, 19:37}
...нет ли у Вас времени чуток допилить блок? Было бы идеально, если бы на входах на каждую точку был бы свой булевский вход.
Нет, не нужно ничего "пилить"- всё распилено до нас :) , всего лишь разобраться в работе демо-проекта, сделал описание в блок. А также учтите, что байтовая переменная занимают ровно столько же памяти как и булевая- один байт и соответственно экономней собрать в одну байтовую 8 булевых переменных (точек) и тратить 1 байт против 8-ми. Если Вы обратите внимание на входные данные блока- сроку Lab.U55 (я специально вставил точку для лучшего понимания), то узнаете, что точка изъята из входящей строки блоком ParseString с детектором изменения и находится в положеном месте (бите) байта на входе div_pos (позиции разрядов/дробных точек).Таким образом решаются все возможные задачи наименее ресурсозатратным способом, ведь с поддержкой структур/битовых полей в блоках программы такая-же грустная ситуация, как и с word. В итоге, Вы вполне можете перед входом div_pos поставить штатный блок из папки "Операции с битами" Bits->Byte получив привычные Вам
"на каждую точку свой булевский вход"Показать
Dots_Position.png
QYF-TM1638_16Keys.flp
Добавил include TM1638.h и описание в блок
(969.4 КБ) 17 скачиваний
Именно экономией памяти/оптимизацией кода мотивируются изменения и с выходами кнопок блока. Для сравнения:
Комбайн-монстр 11-й версии.Показать
TM1638_LED&KEY(version11.x.x).png
TM1638_LED&KEY(version11.x.x).png (13.15 КБ) 260 просмотров
Осталось ещё добавить все 24 кнопки, которые поддерживает микросхема и ещё 8 светодиодов, чтобы на рабочем поле программы не осталось свободного места :no:
Ведь ничего не потерялось с переходом с булевых 16-ти выходов кнопок на 2-а байтовых.
kipsa писал(а):
09.05.2021{, 19:37}
По поводу схемы №3 с 16-ю кнопками, у меня вроде всё как на схеме,
Значит ли это, что диоды спрятаны под индикаторами? Когда нажимаете кнопки отдельные сегменты не гасятся или мерцают? Этого модуля никогда не имел, а фото тыльной стороны только сегодня нашёл в интернете:
Окочательная схема (исправленная) QYF-TM1638Показать
Module_QYF-TM1638.jpg
Спасибо за тестирование и отзыв!
Последний раз редактировалось Labu559 11.05.2021{, 11:16}, всего редактировалось 2 раза.

kipsa
Рядовой
Сообщения: 24
Зарегистрирован: 25.02.2019{, 17:11}
Репутация: 2
Имя: Игорь

TM1638 LED&KEY

#113

Сообщение kipsa » 10.05.2021{, 19:45}

у меня плата как на фото выше. Никаких диодов, нигде нет. Схема подключения кнопок вообще другая. На фото с 5-й ноги ( по даташиту это SEG1) и у меня меня идет напрямую на кнопку S1 затем на S2 и дальше куда-то уходит.

Когда нажимаешь одну кнопку - нет, не гаснет не мерцает. А вот если нажать 2 кнопки ( любых ) то зажигаются некоторые сегменты ( не хаотично, а фиксированно, в зависимости от нажатых кнопок. Например 20 раз нажимаем кнопку S1 и S9 - то всегда будут ещё зажигаться 2 одних и тех же сегментов на индикаторах )

Labu559
Лейтенант
Сообщения: 359
Зарегистрирован: 25.01.2018{, 22:23}
Репутация: 92
Откуда: Bukovyna
Имя: Василий

TM1638 LED&KEY

#114

Сообщение Labu559 » 11.05.2021{, 07:33}

kipsa писал(а):
10.05.2021{, 19:45}
у меня плата как на фото выше. Никаких диодов, нигде нет... с 5-й ноги ( по даташиту это SEG1) и у меня идет напрямую на кнопку S1 затем на S2 и дальше куда-то уходит.
...если нажать 2 кнопки ( любых ) то зажигаются некоторые сегменты...
Очень хорошо, в том плане, что Вы придя за помощью, сами помогли форуму обнаружив этот аппаратный недостаток платы QYF-TM1638. Это следствие отсутствия диодов, потому как замыкая две/несколько разных кнопок на разных сегментах драйвера ес-но накоротко замыкаются соответствующие аноды (разряды) индикатора. Схему поправил (см.выше) с учётом информации от Вас, вот только S1 и S2 уходят на К1, K2 или K3? Уж, извините за надоедливость, платы у меня нет, и как-бы мне не особо нужно, но информация должна быть достоверной, а без Вас мне схему не поправить никак. В качестве благодарности предоставлю Вам свою биб-ку, если хотите конечно. С библиотекой для именно этой платы от с. Батисты тоже не всё в порядке (с точки зрения компилятора), а другие биб-ки на гитхабе есть по сути репликацией первой. Спасибо!

kipsa
Рядовой
Сообщения: 24
Зарегистрирован: 25.02.2019{, 17:11}
Репутация: 2
Имя: Игорь

TM1638 LED&KEY

#115

Сообщение kipsa » 11.05.2021{, 10:10}

Labu559 писал(а):
11.05.2021{, 07:33}
Уж, извините за надоедливость, платы у меня нет,
ничё ничё, вы ж мне помогли, и не только мне. Я думаю если мы не будем помогать друг другу если есть возможность, то и смысла в форумах нет.
Labu559 писал(а):
11.05.2021{, 07:33}
обнаружив этот аппаратный недостаток
у меня вообще схема кнопок другая. Щас мультиков вызвонил ( фото ниже)
Labu559 писал(а):
11.05.2021{, 07:33}
В качестве благодарности предоставлю Вам свою биб-ку
вы и так мне очень помогли - ваш блок отлично подходит для моих потребностей

Отправлено спустя 37 минут 47 секунд:
https://disk.yandex.ru/i/Z3bPqvO3LcKqgQ - вот что получилось на основе Вашего блока. Ещё раз спасибо вам за помощь

Отправлено спустя 1 минуту 45 секунд:
а это тест с Вашим блоком
Вложения
QYF-TM1638_Test16Keys.flp
(1.03 МБ) 31 скачивание
TM1638_16_knopok.jpg

Ответить

Вернуться в «Дисплеи и индикаторы»