4 Bit Led Digital Tube Module

4 Bit Led Digital Tube Module



🔞 ALL INFORMATION CLICK HERE 👈🏻👈🏻👈🏻


































 
#define SCLK 7  // пины ардуины
#define RCLK 6     
#define DIO 5    
 
byte digitBuffer[4];
  
void setup(){
  pinMode(RCLK, OUTPUT);
  pinMode(SCLK, OUTPUT);
  pinMode(DIO, OUTPUT);
}


void loop(){
  // заполняем массив
  digitBuffer[0] = 1; 
  digitBuffer[1] = 2;
  digitBuffer[2] = 3;
  digitBuffer[3] = 4;
  
  // однократно выводим данные из массива на 7сигмент
  // тоесть функция должна постоянно крутится.
  showDisplay(); 
  
}

void showDisplay(){
  
  const byte digit[10] = { // маска для 7 сигментного индикатора
      0b11000000, // 0
      0b11111001, // 1
      0b10100100, // 2
      0b10110000, // 3
      0b10011001, // 4
      0b10010010, // 5
      0b10000010, // 6
      0b11111000, // 7
      0b10000000, // 8
      0b10010000, // 9
  };

  const byte chr[4] = { // маска для разряда
      0b00001000,  
      0b00000100,  
      0b00000010,  
      0b00000001  
  };

  // отправляем в цикле по два байта в сдвиговые регистры
  for(byte i = 0; i <= 3; i++){
    digitalWrite(RCLK, LOW); // открываем защелку
      shiftOut(DIO, SCLK, MSBFIRST, digit[digitBuffer[i]]); // отправляем байт с "числом"
      shiftOut(DIO, SCLK, MSBFIRST, chr[i]); // включаем разряд
    digitalWrite(RCLK, HIGH); // защелкиваем регистры
    delay(1); // ждем немного перед отправкой следующего "числа"
  }  
}



4bit Digital Tube LED Display Module — Обзор модуля с семисегментным индикатором и двумя сдвиговыми регистрами 74HC595. разберем работу с динамической индикацией.
Модуль базируется на двух сдвиговых регистрах TM74HC595 к которым подключен 4х разрядный 7 сегментный индикатор ZS3641BS. Схема похожего модуля, с двумя индикаторами ZS3641BS и 8 сегментами ниже, отличие только в дополнительном индикаторе.
Один TM74HC595 управляет сегментами, причем всеми разом, ибо они все параллельны, а второй управляет разрядами. Если на один регистр отправить байт, в котором будет символ, он будет на всех четырех разрядах, но отобразится на том, который будет включен вторым регистром, и соответственно для этого, на него нужно отправить второй байт.
Для отображения всех разрядов применяется динамическая индикация, что это и как работает показано в видео ниже.
Подключать индикатор можно на любые свободные выходы Arduino, питание у модуля 5 вольт.
Для работы с модулем можно использовать код выше, можно использовать библиотеки, например эту .
Модуль был приобретен на али, тут .


45 ответов

[ Последнее сообщение ]



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


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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



Материалы по программированию Arduino переведены с официального сайта проекта Ардуино — http://arduino.cc
и представлены по лицензии Creative Commons Attribution-ShareAlike 3.0 License .
Электропочта для связи: electropochta@arduino.ru
Официальный сайт компании Arduino по адресу arduino.cc
дисплей сделан на 2 сдвиговых регистрах TM74HC595
что то как то не хочется самому перебирать биты для сдвигового регистра, мош кто знает где есть библиотека для этой штуки?
код привел для другого модуля (не заметил с первого раза)
да, такой модуль тоже скоро приедет и для него я уже нашёл библиотеку, а вот для этого что в ссылке указал найти не  могу.
Короче пришли мне 2 индикатора из китая, покопался я по форумам, разобрался в принципе работы, нашёл пару работающих кусков кода и написал библиотеку для ардуинки.
"4-Bit LED Digital Tube Module" на двух чипах TM74HC595
А можно пожайлуйста по подробней))) как пользоваться новичку? Что куда подключать и какая функция выводит на дисплей?
Написал по этому модулю небольшую статью
Разрешите немного поработать капитаном очевидность, прежде всего для valerk88.
1.  Приведенные по ссылке 7-ми сегментные сборки действительно разные. Одни подключаются через пару сдвиговых регистров 74HC595 (где два чипа на обороте платы модуля, маркируются <что-то там>595) и подразумевают _динамическую_  индикацию, т.е. непрерывное обновление со стороны микроконтроллера, чтобы там что-то светилось (выводилось).
2.  Другие (сборки 7-ми сегментных индикаторов) подключаются через микросхему TM1637, которая сама может поддерживать динамическую индикацию, т.е. не требует вмешательства микроконтроллера для отображения данных. Это там, где на обороте модуля виден один чип (маркируется TM1637), а на индикаторах (модуля, обычно) присутствует двоеточие.
3. Соответственно софт различается. Там, где присутствует TM1637, обычно используют библиотеку, которую можно найти в поисковике как "TM1637.h". По моему IMHO не самая удачная библиотека, но она работает. Кому было нужно, написали свой софт. В случае двух 74HC595 используют софт для динамической индикации (который проще написать, чем найти, IMHO).
4. В случае приведенной valerik88 "библиотеке" для 7-ми сегментной сборки на сдвиговых регистрах 74HC595 динамической индикации обнаружить не удалось.
4. В случае приведенной valerik88 "библиотеке" для 7-ми сегментной сборки на сдвиговых регистрах 74HC595 динамической индикации обнаружить не удалось.
Вот этот пункт не очень понял.  Сможете перефразировать?
В случае приведенной valerik88 "библиотеке" для 7-ми сегментной сборки на сдвиговых регистрах 74HC595 динамическая индикация отсутствует от слова совсем. Автор не разобрался в вопросе и путает других.
Объясняю, если проще прочитать здесь, а не найти в Инете кучу толковых статей по запросу "динамическая индикация".
Принцип ДИ - гарантированное высвечивание разряда (в поразрядной индикации, есть и посегментная, для большого количества разрядов) втечение определенного времени. Нижней границей инерции человеческого зрения принято считать 50 Гц, допустим у нас 4 разряда. Следовательно, характерная частота обновления разряда 200 Гц (4 х 50) или 5 мс. Один раз в 5 мс нужно зажечь разряд, через 5 мс погасить его и зажечь следующий и т.д. Делать это нужно тупо и регулярно.
Если вы поместите выполняющую такую работу функцию в loop, добиться регулярности будет трудно. Кроме мигания разрядами еще температуру померить хочется или клешню роботу поднять, кнопку в титановом велосипеде прокрутить.
Второе и более досадное. Вот чем занимается ваша функция digit4? Она зачем-то с энтузиазмом параметра replay крутит все разряды индикатора (replay раз) и потом сдыхает. Вместо того, чтобы сдохнуть сразу, предварительно высветив нужный разряд. И не дожидаться пинка где-то в loop'е, а быть регулярно вызываемой, гарантированно раз в 5 мс., например.
Управление ДИ семисегментников на паре сдвиговых регистров отработано до блеска и в прямом смысле сводится к программистскому жаргону - "как два байта переслать". Первый для сегментов, второй для разрядов сборки индикаторов. В пару сдвиговых регистров переслать. По прерыванию таймера. И это все, что надо.
Ну, я не такой уж и программист, сделал как смог.
Проблему то я и до вас понимал, что на индикатор нужно непрерывно посылать сигнал, а то потухнет, а как сделать иначе не понял и с учётом вашех комментариев.
Ну не обиделись (или не показали этого), и хорошо. Тут код не критикуют, ворчат на неправильное понимание. Чтобы закрыть тему, коротко.
1. Настраиваете любой таймер на прерывание по переполнению. Характерное время счета - не более 5 мс. Ну это время регенерации разряда индикатора.
2. В теле прерывания таймера по переполнению пишете очень короткий код, те самые два байта переслать. Вы уже делаете это в своем коде. Один байт - уже протранслированный по таблице сегментов код цифры, второй - номер разряда. Обычно объявляют глобальный массив из 8-ми байт (4 разряда х 2 байта) (в примере _data[]), и глобальный указатель на текущую позицию этого массива (_idx). Код в теле прерывания выглядит как-то так:
Теперь все что в буфере _data[] будет отправляться куда надо само по себе.
3. Пишете функцию вроде indicator_write(int nbr), которая принимает то, что нужно вывести, разбирает число на десятичные цифры, транслирует каждую в сегментный код и пишет в буфер _data[], два байта на одну цифру.
4. Как бы это все с динамической индикацией. Тему можно закрыть.
5. Если кто это читает. Приобретая недорогие сборки 7-ми сегментников, которые китайские товарищи называют digital tube, следует выбирать common catode (общий катод) версии. В этом случае драйверы вроде MAX7219 (max 8 разрядов) или TM1637 (max 6 разрядов) позволят обходиться без всякой ДИ в своих кодах, сами все сделают. Что делать счастливым обладателям сборок с общим анодом - не знаю (кроме ДИ). Понятно, что ДИ не очень дружит с измерениями и некоторыми протоколами.
Для этого используй массив символов.   LED_0F, добавь в него любые свои символы и выводи их аналогично примеру.
Например ты хочешь вывести такой символ:
Смотришь какие сегменты тебе нужно зажечь, и сооветвствующий бит выставляешь в 0, те сегменты, которые не должны гореть, выставляешь в 1.(Тут могу напутать, возможно наоборот, но принцип тот же)
Если вы поместите выполняющую такую работу функцию в loop, добиться регулярности будет трудно. Кроме мигания разрядами еще температуру померить хочется или клешню роботу поднять, кнопку в титановом велосипеде прокрутить.
Вот пример регулятора температуры с выводом на семисигментный индикатор посредством ДИ. В регуляторе задействован детектор перехода сетевого напряжения через 0 (повешен на прерывание), ведется расчет температуры по сопротивлению датчика температуры, ПИ регулирования и воздействия на нагрузку по алгоритму брезенхема. На глаз мерцание не заметно (на видео это эффект от камеры телефона). Если найду код выложу (давно это было). Ни каких прямых записей в порты не применял, всё на стандартных функциях.
Полностью код не нашел, только секция индикации
Обычно бред не комментирую, но тут сослались на меня в непонятном контексте, а за слова привык отвечать.
Не тот ли это yul-i-an, которого на потеху всему форуму учат "классу переключения пина"? И, судя по времени, пока не научили.
Или, освоив пины, yul-i-an решил поучить (меня в том числе) динамической индикации семисегментников? Он, правда, не стал "чистить", а оставил "как есть".
Ну можно прикупить поп-корна, если yul-i-an захочет феерического продолжения "на нагрузку по алгоритму брезенхема".
Как регулируется яркость индикаторов ? У меня один блок ярче трех других.
Попробуй задать другое значение в таймере прерываний
Поэкспериментируй с разными задержками
При задержке (1000) яркость стала одинаковая. Респект ! 
А для 3 -х разрядного индикатора можно использовать?
Не знаю что за трех разрядный индикатор, но сомневаюсь что эту библиотеку можно на что-то другое использовать без переделок
Добавил функцию dispFloat(float f) для вывода чисел с точкой и отрицательных чисел с минусом.
за ранее извиняюсь что немного не по теме .
хочу похвастаться моей поделкой на базе такого дисплея.
все исходники прилагаються https://www.youtube.com/watch?v=APHAS2nvHLw
Не по теме в первую очередь потому, что дисплей не тот, который в этой теме обсуждается, просто очень похожий, но управляется другим драйвером
Пришлось зарегистрироваться, чтоб процитировать  Dallyla . Та статья, на которую Вы,  Dallyla , ссылаетесь, написана пользователем  valerik88.  Он сам об этом пишет в начале дискусии. Забавно)))
Сударь, библиотека супер! но! с отображение всех выводимых данных растянуто по времени оооочень сильно. на float отдельное спасибо. появилась необходимость отображать точки не пользуя float. как это организовать на данном дисплее?
Копаю аналогичную тему, но для STM32. Нашел вот такую статью
По сути - это дискретно разбросанный тот же модуль с 595-ми сдвиговыми регистрами.  Возможно, будет полезно...
Вопрос для тех, кто курил библиотеку TM1637.h
Описания не нашел. Только отрывки кода.
Есть функции как, например, writeByte и coding. Что они должны выполнять?
.init(D4056A) вызывает ошибку, без параметра работает.
.display("1.234") не работает. Работает .display(номер разряда, значение) или .display(массив).
Вообщем может есть у кого наводки на описание всего этого?
А самому прочитать код слабо TM1637.h
ПС: Скоро будут спрашивать , а кто нибудь читал учебник русского языка, вместо того что бы самому прочитать.
Для тех кому нужна библиотека то она тут  https://yadi.sk/d/Ci5aiYzsqo7qk
А самому прочитать код слабо TM1637.h
Снова задам вопрос: что делают функции writeByte и coding.
Вопрос для тех, кто курил библиотеку TM1637.h
эта ветка форума для сдвигового регистра TM74HC595
вопрос для тех кто курил такую библиотеку для TM1637 нужно задавать в соответствующей ветке форума, и тогда будешь получать адекватные ответы. учись пользоваться поиском по форуму
За наводки спасибо. Данного pdf не находил.
Как считаете, при использовании RTOS нужна ли динамическая индикация? Или подойдет и первый вариант библиотеки?
Как считаете, при использовании RTOS нужна ли динамическая индикация? Или подойдет и первый вариант библиотеки?
тебе что нужно сделать с динамической индикацией?
Прошу удалить это и предыдущее мое сообщение. Спасибо
Уважаемые форумчане, знающие TM1637. У меня библиотека, как бы, "вешает" скетч...
Залил скетч и все заработало как надо, удачи всем
Залил скетч и все заработало как надо, удачи всем
Спасибо. Сохраню себе в архив. Еще отлично работает пример  https://alexgyver.ru/tm74hc595_display/
пробовал, именно на этих индикаторах по моей ссылке--не работают!!"
Значит есть отличия в схемотехнике. Должны были работать.
disp. set (5); //BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7; яркость дисплея
disp.display( "1.234" ); // выводит на дисплей
     _RELOAD_TIMER;                  // загрузить таймер начальным значением, если считает не с нуля
     _idx %= sizeof (_data);           // индекс крутится по кругу
void indicator_write( int num) {    // это демо. Учет знака, всякие ведущие нули
                                    // или пробелы - опущено, чтобы не загромождать
unsigned char i, j = 0;            // Смысл - поместить число в пригодном для вывода на индикатор виде
unsigned char digs[4];             // в буфер, откуда самим выводом занимается код прерывания таймера
     if (num < 0) { j = 1; num *= -1; };   // знак, если нужно
         digs[i++] = num % 10; num /= 10;    // разобрали по цифрам и сложили в
     } while (num);                          // массив digs[] в обратном порядке; i - кол-во цифр
                                             // где-то глобально таблица кодов сегментов digitToSegment
                                             // транслируем
     for (j = 0; j < i; j++) digs[j] = *(digitToSegment+digs[j]);
                                         // тонкое место - перенос результатов в буфер. Порядок переноса
                                         // зависит от порядка подключения 74HC595 (кто сегментный, кто разрядный)
                                         // и логики - общий катод индикаторов или общий анод
     for (j = 0; j < i; j++) {           // переносим в буфер, откуда код прерывания по переполнению         
         _data[2*j] = ~digs[j];          // таймера будет отправлят
4 бит светодиодный цифровой модуль трубка на АлиЭкспресс — купить онлайн...
Динамическая индикация и 7 сегментный индикатор, модуль на... | arduinoLab
Где можно скачать библиотеку для " 4 - Bit LED Digital Tube Module "? | Форум
Блок для управления индикатором на 2-х микросхемах 74Н595 4 - bit led ...
Подключение дисплея 4 - Bit LED Digital Tube Module (TM74HC595) - YouTube
Czech Nudist Family Kids
Sharing My Wife Swingers
Mom Vs Young
4 Bit Led Digital Tube Module

Report Page