Светодиодный индикатор на базе ТМ1637

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5723
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение >TEHb< »

Можно можно через И2Ц. Через задницу, конечно, но возможно. Как минимум, компьютерная шина способна выводить цифры. А уж у микроконтроллера и подавно ноги развязаны.
"Привет!" - соврал он.
Аватара пользователя
DetSimen
Родился
Сообщения: 9
Зарегистрирован: Пн окт 07, 2019 10:14:37
Откуда: СФО, уездный город Н-ск

Re: Светодиодный индикатор на базе ТМ1637

Сообщение DetSimen »

Мошт, пригодицца кому
https://github.com/DetSimen/TM1637
Праграмный кот. Хожу по цыкалу кругом.
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Светодиодный индикатор на базе ТМ1637

Сообщение OKF »

[uquote="DetSimen",url="/forum/viewtopic.php?p=4487269#p4487269"]Мошт, пригодицца кому[/uquote]
Да, дед, тебя тут склоняли и в пример ставили, по всякому.)
Аватара пользователя
DetSimen
Родился
Сообщения: 9
Зарегистрирован: Пн окт 07, 2019 10:14:37
Откуда: СФО, уездный город Н-ск

Re: Светодиодный индикатор на базе ТМ1637

Сообщение DetSimen »

Бывает.
З.ы Ох, блин, прочитал всю тему, а тут эта ссылка уже была. Я очень извиняюсь, что опять влез.
Праграмный кот. Хожу по цыкалу кругом.
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Vlad_RK »

Starichok51, очень непросто понять чужие мысли, потому буду спрашивать.

1. Зачем используется таймер2 на 0.1 сек и на 1 сек? Как я понял, 0.1 сек - период опроса клавиатуры. А 1 сек?

2. Зачем здесь еще 3 раза писать "минус" в память (в блоке, где вы переписываете коды символов в ОЗУ)?

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

ldi R26, _m
st Z+, R26
st Z+, R26
st Z+, R26
st Z+, R26
3. Зачем здесь разделять принятый с клавиатуры байт на 2 части и сохранять эти 2 байта в ОЗУ и еще дописывать следом 2 пробела? Чтоб узнать код нажатой кнопки? Только это приходит на ум.

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

rcall bin_to_2hex_and_vyvod
ldi R26, _x
st Z+, R26
st Z+, R26
Аватара пользователя
Starichok51
Модератор
Сообщения: 19040
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

1. таймер2 в том тексте идет по 4 мс..
да, 0.1 сек - период опроса клавиатуры. ты можешь сделать этот период, как тебе удобно или как тебе нравится.
1 сек. - последовательный вывод на индикацию бегущей строки. для "бег" строки через 1 сек. кажется удобным.

2. не 3, а 4 раза.
если ты запускал симуляцию, то должен был видеть, что после "F" в бегущей строке выводятся эти 4 минуса.
бегущая строка - 16 цифр и 4 минуса.
а пишу в ОЗУ потому, что бегущая строка берется из ОЗУ.

3. да, байт кода кнопки делится на 2 шестнадцатеричные цифры, которые сохраняются в ОЗУ. потом из ОЗУ выводятся.
да, чтобы посмотреть код кнопки. а как я увижу код кнопки без вывода на индикатор?
вывод пробелов можешь удалить, если тебе это хочется.

и вообще, этот текст - тестовый, из которого можно в рабочие программы брать отлаженный код работы с этой микрой.
а для теста я сделал так, как мне было удобно.

и ты тоже можешь брать отсюда отлаженный код в свои разработки.
в реальном проекте код кнопки выводить не надо - просто выполнить действия в соответствии с нажатой кнопкой.

вот тебе еще вариант проекта в Протеусе.
тут поочередно, через 0,5 сек., выводится код кнопки и бегущая строка.
когда нет нажатых кнопок, выводится код "FF." и выводятся 2 пробела.
когда кнопка нажата, выводится код кнопки и её номер.
опять-таки, это только тест.
здесь уже цифры кода кнопки не пишутся в ОЗУ, а сразу обрабатываются и выводятся на индикатор.
опять будут вопросы - опять спрашивай.
Вложения
TM1637 sourse1 4x7s.zip
(23.66 КБ) 113 скачиваний
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Vlad_RK »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4486600#p4486600"]я там в проекте забыл нарисовать резисторы подтяжки на входах[/uquote]Резисторы по 10 кОм между плюсом питания и каждым из выводов CLK и DIO на плате TM1637 уже есть. Только конденсаторы по 10 нФ на CLK и DIO я убрал. Проверил, все работает без доп. задержек. :)

Изображение
Аватара пользователя
Starichok51
Модератор
Сообщения: 19040
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

да, на модуле резисторы подтяжки уже есть. конденсаторы я тоже удалил.
на модулях, которые я купил, резисторы и конденсаторы расположены по другому. но это не принципиально.
а по моему тестовому проекту у тебя вопросов больше нет?
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Vlad_RK
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Чт июл 11, 2013 12:37:39

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Vlad_RK »

Пока нет, все нормуль. Спасибо!
Аватара пользователя
Starichok51
Модератор
Сообщения: 19040
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

это хорошо.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
electroget
Друг Кота
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Re: Светодиодный индикатор на базе ТМ1637

Сообщение electroget »

Доброго времени суток.

Собрал макетную схему из Ардуины, энкодера и дисплея TM1637.
Состряпал вот такой код:

#include "GyverTM1637.h"
#define CLK SCL
#define DIO SDA
GyverTM1637 tm1637(CLK,DIO);
#define pin_CLK 2
#define pin_DT 3
#define pin_Btn 13


unsigned long CurrentTime, LastTime;
enum eEncoderState {eNone, eLeft, eRight, eButton};
int EncoderA, EncoderB, EncoderAPrev, counter;
bool ButtonPrev;


eEncoderState GetEncoderState() {
// Считываем состояние энкодера
eEncoderState Result = eNone;
CurrentTime = millis();
if (CurrentTime >= (LastTime + 10)) {
// Считываем не чаще 1 раза в 10мс для уменьшения ложных срабатываний
LastTime = CurrentTime;
if (digitalRead(pin_Btn) == LOW ) {
if (ButtonPrev) {
Result = eButton; // Нажата кнопка
ButtonPrev = 0;
}
}
else {
ButtonPrev = 1;
EncoderA = digitalRead(pin_CLK);
EncoderB = digitalRead(pin_DT);
if ((!EncoderA) && (EncoderAPrev)) { // Сигнал A изменился с 1 на 0
if (EncoderB) Result = eRight; // B=1 => энкодер вращается по часовой
else Result = eLeft; // B=0 => энкодер вращается против часовой
}
EncoderAPrev = EncoderA; // запомним текущее состояние
}
}
return Result;
}

void setup() {
pinMode (CLK, OUTPUT);
pinMode (DIO, OUTPUT);
pinMode(pin_DT, INPUT);
pinMode(pin_CLK, INPUT);
pinMode(pin_Btn, INPUT_PULLUP); // Кнопка не подтянута к +5 поэтому задействуем внутренний pull-up резистор
Serial.begin(115200);
counter =0;

tm1637.clear();
tm1637.brightness(6);
tm1637.clear();
}

void loop() {

switch (GetEncoderState()) {
case eNone: return;
case eLeft: {
counter--;
if(counter == -1)
{counter =255;}
break;
}
case eRight: {
counter++;
if(counter > 255)
{counter =0;}
break;
}
case eButton: {
counter = 0;
break;
}
}
Serial.println(counter);
tm1637.display(2,counter/10);
tm1637.display(3,counter%10);
}

При вращении энкодера индикация должна отображать числа от 1 до 255, а по факту отображает только до 99 (то есть индикатор только на 2 знака работает), а потом начинает с начала. При этом монитор порта показывает, что если крутить энкодер дальше, то счётчик продолжает увеличивать значение. Почему с индикацией на TM1637 так происходит?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Светодиодный индикатор на базе ТМ1637

Сообщение BOB51 »

Смотреть в библиотеке дисплея надо.
(GyverTM1637)
и у Вас в программе всего два знакомества задействовано да с обычной десятичной обработкой:

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

tm1637.display(2,counter/10);
tm1637.display(3,counter%10);
Что задали - то и получили.
8)
Аватара пользователя
electroget
Друг Кота
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Re: Светодиодный индикатор на базе ТМ1637

Сообщение electroget »

[uquote="BOB51",url="/forum/viewtopic.php?p=4604635#p4604635"]у Вас в программе всего два знакомества задействовано да с обычной десятичной обработкой[/uquote]

А как надо сделать чтоб использовались 3 знака на дисплее TM1637?
Аватара пользователя
>TEHb<
Друг Кота
Сообщения: 5723
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Откуда: Воронеж
Контактная информация:

Re: Светодиодный индикатор на базе ТМ1637

Сообщение >TEHb< »

Микросхема позволяет отображать до 6 знаков, а реально цифр 4. От индикатора к индикатору может меняться смещение.
Последний раз редактировалось >TEHb< Сб июл 20, 2024 20:14:08, всего редактировалось 1 раз.
"Привет!" - соврал он.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Светодиодный индикатор на базе ТМ1637

Сообщение BOB51 »

Вывести на старшее знакомств сотни или пробел при отсутствии таковых.
8)
Аватара пользователя
electroget
Друг Кота
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Re: Светодиодный индикатор на базе ТМ1637

Сообщение electroget »

Вот так сделал:

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

Serial.println(counter);
  tm1637.display(1,counter/100%10);
  tm1637.display(2,counter/10%10);
  tm1637.display(3,counter%10);
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Светодиодный индикатор на базе ТМ1637

Сообщение BOB51 »

относительно знакомест возможно и верно...
Относительно данных... Там ведь исходно и 0 может иметь место...
0/100 =?
...
:roll:
Аватара пользователя
Starichok51
Модератор
Сообщения: 19040
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Светодиодный индикатор на базе ТМ1637

Сообщение Starichok51 »

BOB51, 0/100 = 0.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
OKF
Это не хвост, это антенна
Сообщения: 1385
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Светодиодный индикатор на базе ТМ1637

Сообщение OKF »

Ну деда же вроде как отмечали. Вы что ребята? Толчёте воду в ступе.
Всё что хочешь у него сделано. Ни о чём не думай! Или будем изобретать велосипед? Ужос(.
Аватара пользователя
electroget
Друг Кота
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Re: Светодиодный индикатор на базе ТМ1637

Сообщение electroget »

[uquote="OKF",url="/forum/viewtopic.php?p=4604749#p4604749"]Ну деда же вроде как отмечали. (.[/uquote]
В смысле?
Ответить

Вернуться в «Периферия»