TM1638 LED&KEY

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

TM1638 LED&KEY

#101

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

edyapd писал(а):
04.10.2019{, 05:49}
Labu559 писал(а):
04.10.2019{, 00:16}
Автор сделал перезапись уровня яркости только при его изменении по сравнению с предыдущим значением, а не в каждом цикле.
Можете показать в каких строчках это реализовано?
Не могу, я ошибся". Хотел исправиться, но больше нет зачёркнутого текста и изменение цвета шрифта на светлее 2 раза не сработал, хотя при просмотре изменялся.
Вообще то нужно смотреть на весь код первоисточника, а не на избранные куски. В комплексе там есть ф-и увеличения и уменьшения яркости на 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 04.10.2019{, 14:35}, всего редактировалось 3 раза.

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

TM1638 LED&KEY

#102

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

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

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

TM1638 LED&KEY

#103

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

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

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

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

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
Полковник
Сообщения: 3048
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 383
Откуда: Ярославль.
Имя: Александр
Контактная информация:

TM1638 LED&KEY

#105

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

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

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

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 КБ) 73 просмотра
Второй проект- на первых 4 разряда выводит состояние кнопок (одна кнопка- один сегмент, причём в довольно хаотичном порядке), остальные разряды- число 4567:
0124.png
0124.png (4.59 КБ) 73 просмотра
Из описания блока: Блок для 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 КБ) 5 скачиваний
Последний раз редактировалось seri0shka 07.10.2019{, 16:50}, всего редактировалось 2 раза.

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

TM1638 LED&KEY

#107

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

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

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

TM1638 LED&KEY

#108

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

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

Ответить

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

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость