TM 1638

_tatarin_
Offline
Зарегистрирован: 22.04.2012

 Доброго времени суток. Помогите пожалуйста набросать простейший Hello World с использованием Arduino Nano и сегментного LCD(контроллер TM1638). Вот ссылка на библиотеку http://code.google.com/p/tm1638-library/

 

 

_tatarin_
Offline
Зарегистрирован: 22.04.2012

 Ни один пример из библиотеки(ссылка выше) не работает. Последовательность действий для примера ниже следующая:

1. Соединяю GND ардуины и GND модуля.

2. Соединяю выход +5v ардуины и VCC пин модуля

3. Соединяю 2 digital pin с CLK пином модуля

4. Соединяю 3 digital pin с DIO пином модуля.

5. Цепляю ардуину к компу заливаю скетч.

6. ?????

7. PROFIT'a не наблюдаю=(

#include <TM1638.h> // required because the way arduino deals with libraries
#include <TM1640.h>

// define a module on data pin 3, clock pin 2
TM1640 module(3, 2);

void setup()
{
  // nothing to do here
}

void loop()
{
  char text[17];

  sprintf(text, "testing %u", millis());

  module.setDisplayToString(text);
}

 

leshak
Offline
Зарегистрирован: 29.09.2011

 Первое что бросается в глаза - нессотвествие между "сегментного LCD(контроллер TM1638)" и "TM1640 module(3, 2);"

Может они и совместимы, но...

Тем более что в http://code.google.com/p/tm1638-library/wiki/Reference

видим

Basic usage is (after including "TM1638.h"):

TM1638 module(8, 9, 7);

Мало того, что "другой класс" используется, так еще и три пина для конфигурации.

 

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

 Вообщем похоже, как миимум, вам нужно еще strobePin модуля подключить.

Возможно, что-бы съекономить ногу, заработает и если его просто, подтянуть к питанию. Но, вначале, все-таки поробуйте подключить его к арудуине и рулить им библиотекой (как задуманно автором), а уж потом "выкаблучиватся".

Если я правильно догадался (но не уверен), то назначение этого пина такое: на линии может висеть несколько модулей. И вот тому модулю который должны сейчас слушать команды - он устанавливается в HIGH, остальным в LOW (и они игнорируют команды). Если модуль "один", то можно попробовать навсегда притянуть его к питанию и съекономить ногу ардуины.

 

mixail844
Offline
Зарегистрирован: 30.04.2012

у самого такой дисплейчик.уже удачно показывал на нем счетчик и посылал строчку через blutooth с андроида.

во первых char text[17] я бы обьявил как глобальную переменную.

во вторых в функции module.setDisplayToString(text); тоже обязателен параметр с какого места начинать отоброжать срочку.

void setDisplayToString(String string, const byte dots, const byte pos, const byte font[]);

проверил в reference,обязателен его значение (0-7) или (1-8)

_tatarin_
Offline
Зарегистрирован: 22.04.2012

 Всем спасибо. Разобрался с библиотекой. Следующая задача наваять часики с использованием все того же дисплея. Нашел пример на форуме с использованием библотеки LiquidCrystal. Вот тут. Возможно ли заточить этот пример под TM1638?

_tatarin_
Offline
Зарегистрирован: 22.04.2012

Да кстати кажется наткнулся на ваше видео на ютубе. Здорово! 

mixail844
Offline
Зарегистрирован: 30.04.2012

_tatarin_ пишет:

Да кстати кажется наткнулся на ваше видео на ютубе. Здорово! 

та нет,я никакие видо на ютуб не выкладывал.это скорее всего автор библиотеки  выложил.

_tatarin_
Offline
Зарегистрирован: 22.04.2012

 Всем спасибо. Разобрался с библиотекой. Следующая задача наваять часики с использованием все того же дисплея. Нашел пример на форуме с использованием библотеки LiquidCrystal. Вот тут. Возможно ли заточить этот пример под TM1638?

mixail844
Offline
Зарегистрирован: 30.04.2012

вот код :самых примитивных часов,сам писал,все работало :
 

 

#include <TM1638.h>
TM1638 module(7, 6, 8);//настройки пинов,отличаються от оригинальных
byte time[9]; 

void setup()
{

}
void loop()
{
char *separator = "-";
for(time[0]=0;time[0]<3;time[0]++)
{
  for(time[1]=0;time[1]<10;time[1]++)
  {
    for(time[3]=0;time[3]<6;time[3]++)
    {
      for(time[4]=0;time[4]<10;time[4]++)
      {
        for(time[6]=0;time[6]<6;time[6]++)
        {
          for(time[7]=0;time[7]<10;time[7]++)
         {
          delay(1000); 
          module.setDisplayDigit(time[0],0, false);//tens hours
          module.setDisplayDigit(time[1],1, false);//hours
          module.setDisplayToString(separator, false,2);//separator "-"
          module.setDisplayDigit(time[3],3, false);//tens mins
          module.setDisplayDigit(time[4],4, false);//mins
          module.setDisplayToString(separator, false,5);//separator "-"
          module.setDisplayDigit(time[6],6, false);//tens secs
          module.setDisplayDigit(time[7],7, false);//secs
          
        }
       }
      }
    }
  }
}

}

 как видно из кода,для продвижения часов используеться  delay,а еще потому что этот код можно написать минимум раза в 2 короче и эффективней,поэтому часы просты и примитивны

_tatarin_
Offline
Зарегистрирован: 22.04.2012

спасибо, уже набыдлокодил нечто похожее)) тоже работает но жутко отстает) попробую ваш пример

_tatarin_
Offline
Зарегистрирован: 22.04.2012

А не подскажите как можно их настроить с помощь getButtons? А то не пойму куда проверку засунуть, выношу в отдельную функцию типа:

void settime()
{
  while (module.getButtons()==0b00000001)
  {
    time[3]++;
  }
}

не работает, ставлю этот цикл в loop тоже не работает. Подскажите куда копать?

Borland
Offline
Зарегистрирован: 17.05.2012

Чтонибудь вроде

------------------------------------

void settime () {

uint_8t  c;

//тут вывести чтонибудь на сегменты нестандартное чтобы было ясно что ты устанавливаешь время

 
 

  while (c!=0b10000000) { /типа кнопки ESC

      c=module.getButtons();
       switch (c) {

          case 0b01000000: 

                     time[1]++;

                   break;

          case 0b02000000:

                    time[2]++;

                  break;

          case: // ну и тд

      }

  }

}

loop {

.......

if (module.getButtons()==0b00000001) {

 settime();

}

.........

}

------------------------------------------

тут с листа написалнаверное с ошибками,  смысл что надо прервать выполнение кнопкой  выставить часы минуты секунды

выйти и продолжить ваш цикл

 

Borland
Offline
Зарегистрирован: 17.05.2012

а вообще если не для баловства а точные часы, то нужно на прерывание от таймера повесить короткую функцию которая будет считать тики

а уже в loop обрабатывать эти тики не спеша,

ну а еще проще ds1307 с кварцем

 

 

_tatarin_
Offline
Зарегистрирован: 22.04.2012

 ds1307 у нас как то не завалялось) А про прерываени можно попоробнее?

Borland
Offline
Зарегистрирован: 17.05.2012

http://arduino.ru/Tutorial/Arduino_Interrupts

 

ну собственно millis() уже берет тики с 0-го таймера ардуины

 

часы будут работать 50 дней

дальше надо будет наращивать какуюто переменную

при выключении питания или ресет, все умирает

часами я бы это не назвал

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

 >часы будут работать 50 дней

49-ть дней с копейкой.  И не шибко точно. Без внешней микрухи часовой - не обойтись. Да еще желательно термостабилизированной.

_tatarin_
Offline
Зарегистрирован: 22.04.2012

В общем как то странно получается. Вот пример:

#include <TM1638.h>
TM1638 module(3, 2, 4);
byte time[9]; 
char *separator = "-";
void setup()
{

}
void loop()
{
  if (module.getButtons()==0b00000001)
  {
    settime();
  }
for(time[0]=0;time[0]<3;time[0]++)
{
  for(time[1]=0;time[1]<10;time[1]++)
  {
    for(time[3]=0;time[3]<6;time[3]++)
    {
      for(time[4]=0;time[4]<10;time[4]++)
      {
        for(time[6]=0;time[6]<6;time[6]++)
        {
          for(time[7]=0;time[7]<10;time[7]++)
         {
          delay(1000); 
          module.setDisplayDigit(time[0],0, false);
          module.setDisplayDigit(time[1],1, false);
          module.setDisplayToString(separator, false,2);
          module.setDisplayDigit(time[3],3, false);
          module.setDisplayDigit(time[4],4, false);
          module.setDisplayToString(separator, false,5);
          module.setDisplayDigit(time[6],6, false);
          module.setDisplayDigit(time[7],7, false);
          
        }
       }
      }
    }
  }
}
}
void settime () {

uint8_t  c; 

module.setDisplayToString("set");

  while (c!=0b10000000) {

      c=module.getButtons();
       switch (c) {

          case 0b01000000: 

                     time[1]++;

                   break;

          case 0b00100000:

                    time[4]++;

                  break;

          
      }

  }

}

Если закоментировать в loop строки которые отвечают за отсчет времени, то проверка этого условия if (module.getButtons()==0b00000001) выполняется. Если оставляем как есть то проверки нет. То есть жмем кнопку и ничего не происходит. Не подскажите в чем может быть проблема? Прошу простить за назойливость и уродливый код)

Borland
Offline
Зарегистрирован: 17.05.2012

Эти строки :?

15	for(time[0]=0;time[0]<3;time[0]++)
16	{
17	  for(time[1]=0;time[1]<10;time[1]++)
18	  {
19	    for(time[3]=0;time[3]<6;time[3]++)
20	    {
21	      for(time[4]=0;time[4]<10;time[4]++)
22	      {
23	        for(time[6]=0;time[6]<6;time[6]++)
24	        {
25	          for(time[7]=0;time[7]<10;time[7]++)
26	         {
27	          delay(1000);
28	          module.setDisplayDigit(time[0],0, false);
29	          module.setDisplayDigit(time[1],1, false);
30	          module.setDisplayToString(separator, false,2);
31	          module.setDisplayDigit(time[3],3, false);
32	          module.setDisplayDigit(time[4],4, false);
33	          module.setDisplayToString(separator, false,5);
34	          module.setDisplayDigit(time[6],6, false);
35	          module.setDisplayDigit(time[7],7, false);
36	           
37	        }
38	       }
39	      }
40	    }
41	  }
42	}

Могу только предположить , что во первых

кнопку или что там, надо держать. поскольку удет непрерывный опрос

во - вторых при проваливании в функцию установки времени

надо это както трассировать на дисплее или в Serial.print;

возможно по значению нажатой кнопки

module.getButtons()==0b00000001 , она вылетает из функции

Хотя скорее , если это весь текст программы при получении module.getButtons()==0b00000001 из loop

управление идет в функцию и крутится там тихо с этим значением, и чтобы выпасть оттуда надо получить (0b10000000)

либо значениями из case-ов (которые не обеспечивают выход из цикла , но хоть меняют переменные)

 

В общем нет никакой трассировки выполнения программы

Наставте там Serial.print  разных, и увидите где крутица программа .

 

_tatarin_
Offline
Зарегистрирован: 22.04.2012

Блин 14 числа уже защита а я даже элементарного сделать не могу.. ошибся я в выборе темы...

leshak
Offline
Зарегистрирован: 29.09.2011

 Ну до 14-надцатого еще далеко :) Настоящий студенты все делают в последнюю ночь :)

Я бы все делал по другому: 

1. Отказался от функции delay()

2. Завел отдельные переменные h,m,s

3. Сделал функцию которая отображает их значение на экран

4. Сделал функцию которая меняет их значение с помощью кнопок модуля

5. В loop смотрет бы на функцию millis(), и раз в секунду вызывал-бы функцию из пункта 3

6. Проапдейтил-бы функцию из пункта 3, что-бы она выводила h+mh,m+mm,s+ms,  где mh, mm, ms - часы, минуты и секунды - пересчитаныне из текущего значения millis()

-----------

Ну или, если совсем руки опустились, и хочется что-бы "кто-то сделал за меня". Заявляем, тут, о своей готовности обсудить оплату и предоставляем какие-то контакты. Может и найдутся желающие на подработку ;)

_tatarin_
Offline
Зарегистрирован: 22.04.2012

 Подскажите как организовать вход/выход из функции по нажатию кнопки?

Например есть у меня функция set().

Пишем в loop то нибудь типа:

if (module.getButtons()==0b10000000)
{
set()
}

Со входом более менее ясно.

Соответственно в set() что то подобное. 

А как быть с выходом?

leshak
Offline
Зарегистрирован: 29.09.2011

 А что с выходом? Как закончится фунция, отработает все что вы в ней написали - так и выйдет. Ну или, если где-то посреди тела функции хотите выйти - return.

_tatarin_
Offline
Зарегистрирован: 22.04.2012

 Накорябал какую то жесть))

Прошу сильно не ругаться)

#include <TM1638.h>

int h1=0;
int h2=0;
int m1=0;
int m2=0;
int s1=0;
int s2=0;
int flag=0;
TM1638 module(3,2,4);



void setup()
{
}

void loop()
{
if (flag==0)
  {
  timing();  
  show();
  tick();
  module.setLED(0,0);
  }
else
  set();
  if (module.getButtons()==0b10000000){flag=1; delay(200);}
}

void set()
{
module.setLED(TM1638_COLOR_RED,0);
show();
timing();
byte btn= module.getButtons();
  switch (btn)
  {
  case 1: h2--;
  delay(300);
  break;
  
  case 2: h2++;
  delay(300);
  //show();
  break;

  case 4: m2--;
  delay(300);
  //show();
  break;

  case 8: m2++;
  delay(300);
  //show();
  break;

  case 64: flag=0;
  break;
  }
}

void show()
{
module.setDisplayDigit(h1,0,false);
module.setDisplayDigit(h2,1,false);
module.setDisplayDigit(m1,3,false);
module.setDisplayDigit(m2,4,false);
module.setDisplayDigit(s1,6,false);
module.setDisplayDigit(s2,7,false);
module.setDisplayToString("-",false,2);
module.setDisplayToString("-",false,5);
}

void tick()
{
  s2++;
  delay(1000);
}

void timing()
{
  if (m2<0)
  {
    m2=0;
  }
  if (h2==10)
  {
  h1++;
  h2=0;
  }

if (h1==2 && h2==4)
  {
  h1=0;
  h2=0;
  }

if (m2==10)
  {
  m1++;
  m2=0;
  }

if (m1==6 && m2==0)
  {
  m1=0;
  m2=0;
  h2++;
  }

if (s2==10)
  {
  s1++;
  s2=0;
  }

if (s1==6 && s2==0)
  {
  s1=0;
  s2=0;
  m2++;
  }

}

Как бы теперь сюда еще и датчик температуры прикрутить))

dimwap
Offline
Зарегистрирован: 29.09.2012

_tatarin_ пишет:

Ни один пример из библиотеки(ссылка выше) не работает. Последовательность действий для примера ниже 

3. Соединяю 2 digital pin с CLK пином модуля

4. Соединяю 3 digital pin с DIO пином модуля.

TM1640 module(3, 2);


Без подключения третьего пина (STB) TM1638 не работает.
Если пин отключить во время работы - на индикаторе остается последнее отображенное значение.
Обновления значений прекращаются. Проверено.
Comar
Offline
Зарегистрирован: 15.12.2012

я позволил себе наглость немного допилить скетч tatarin'а

теперь нажатия кнопки обрабатываются))

 


// modified scetch for using TM1638 as the clock indicator
#include <TM1638.h>
int h1=0;
int h2=0;
int m1=0;
int m2=0;
int s1=0;
int s2=0;
int flag=0;
TM1638 module(3,2,4); //(X,Y,Z) where X is the pin on Arduino plate that connected with DIO on TM1638, Y - ...with CLK, Z- ...STB0
void setup()
{
}
void loop()
{
{  
if (module.getButtons()==0b00000001){flag=1; module.setLED(TM1638_COLOR_GREEN,0);} //press left button and clock will be stoped, LED will be ON
if (module.getButtons()==0b00000010){flag=1; module.setLED(TM1638_COLOR_GREEN,1);} //the same for next button
if (module.getButtons()==0b00000100){flag=1; module.setLED(TM1638_COLOR_GREEN,2);} //...and next
if (module.getButtons()==0b00001000){flag=1; module.setLED(TM1638_COLOR_GREEN,3);} //...and next (you can reduce q-ty of buttons in this part, ya)
}
if (flag==0) // checking of press button condition
  {
  timing(); // calculating of time
  show(); // displaying of time
  tick(); //delay
  module.setLED(0,0); //LEDs becomes OFF. or you prefer to have them ON??
  }
else
  adjust(); //declaring of "adj" function for set the time
}
void adjust()
{
show();
timing();
byte btn= module.getButtons(); //we must define No of pressed button
  switch (btn)
  {
  case 1: h2--; //if button has No1 (leftmost) - HOURS are decreasing
  delay(300);
  break;
  case 2: h2++; //...increasing for pressing botton No2
  delay(300);
  //show();
  break;
  case 4: m2--; //...the same but for MINUTES
  delay(300);
  //show();
  break;
  case 8: m2++; //...you know...increasing
  delay(300);
  //show();
  break;
  case 16: flag=0; module.setLED(0,0); module.setLED(0,1); module.setLED(0,2); module.setLED(0,3); // press button S5 and all LEDs becomes OFF and clock will start
  break;
  }
}
void show()
{
module.setDisplayDigit(h1,0,false);
module.setDisplayDigit(h2,1,false);
module.setDisplayDigit(m1,3,false);
module.setDisplayDigit(m2,4,false);
module.setDisplayDigit(s1,6,false);
module.setDisplayDigit(s2,7,false);
module.setDisplayToString("-",false,2);
module.setDisplayToString("-",false,5);
}
void tick()
{
  s2++;
  delay(1000);
}
void timing()
{
  if (m2<0)
  {
    m2=0;
  }
  if (h2==10)
  {
  h1++;
  h2=0;
  }
if (h1==2 && h2==4)
  {
  h1=0;
  h2=0;
  }
if (m2==10)
  {
  m1++;
  m2=0;
  }
if (m1==6 && m2==0)
  {
  m1=0;
  m2=0;
  h2++;
  }
if (s2==10)
  {
  s1++;
  s2=0;
  }
if (s1==6 && s2==0)
  {
  s1=0;
  s2=0;
  m2++;
  }
}

 

wgaint
Offline
Зарегистрирован: 15.03.2015

А вот таймер в обратную сторону. Библиотеку брал у гуглакода.



#include <TM1638.h>

// define a module on data pin 8, clock pin 9 and strobe pin 7
TM1638 module(8, 9, 7);
unsigned long startTime; //время начала
unsigned long loopTime; //время прошло
unsigned long LimitTime = 0; //таймер
int ledin = 0; //флаг лампочки
//часы минуту секунды и какой-то Х
int h=0;
int m=0;
int s=0;
int x;
 
boolean running = false; //Флаг Запуска отсчета
//инициализация сброса
void(* resetFunc) (void) = 0;

void setup() {
  startTime = millis();
  module.setupDisplay(true, 1);
  module.clearDisplay();
  //приветствие на 3 сек
  module.setDisplayToString("HELLO");
  delay(3000);
  //выводим нули
  module.setDisplayToString("00-00-00");
  
}

void loop() {
  
if (running == true) {	 //таймер запущен
  startTime = millis();
  
  while(loopTime < LimitTime){      // сравниваем время прошло с вр окончания
  module.setLEDs(0x0000);  // тушим свет
   s = (LimitTime - loopTime)/1000;
   timing();
   show();
   
   if (module.getButtons()==0b00000001){ //кнопка прервать первая слева
      LimitTime = 0; 
      module.setLEDs(0xFFFF); //зажигаем свет
      module.clearDisplay();
      module.setDisplayToString("ABOPT");  //пишим прервано
      delay (3000);
      module.setDisplayToString("00-00-00");
      module.setLEDs(0x0000);
      h = 0;
      m = 0;
      s = 0; 
      }
  
   // моргаем лампочками поочередно для визуализации процесса
   ledin++;
   if (ledin == 8){
   ledin = 0;}
   module.setLEDs(0x0000);
   module.setLED(TM1638_COLOR_GREEN + TM1638_COLOR_RED, ledin);
   
   
   delay(500); 
   loopTime = millis() - startTime; //вычисляем сколько времени прошло
      
  }
   //окончание работы таймера
    running = false;
    module.clearDisplay();
    module.setDisplayToString("BOOH");
    module.setLEDs(0xFFFF); 
    delay (10000);
   resetFunc(); //сбрасываем для ввода нового значения таймера   
 
  }
  else{
  module.setLEDs(0xFFFF);
  byte btn= module.getButtons(); //опрашиваем кнопки
  switch (btn)
  {
  case 1: h++; // крайняя левая добавить часов
  if (h > 23){
  h = 0;}
  delay(300);
  show();
  break;
    
  case 2: h--; //2 - убавить часов
  if (h < 0){
    h = 23;}
  delay(300);
  show();
  break;
  
 case 4: m++; //3-я добавить минут
  if (m > 59 ){
  m = 0;}
  delay(300);
  show();
  break;
  
  case 8: m--; //4-я...догадайся 
  if (m < 0 ){
  m = 59;}
  delay(300);
  show();
  break;
 
  case 64: //7-я предпоследняя запускае процесс
  s =0;
  LimitTime = (h*60 + m)*60000;
  running = true;
  break;
  }
  }
  
}
 //вывод на экран
 void show()
{
x = h/10;
module.setDisplayDigit(x,0,0);
x = h - x*10; 
module.setDisplayDigit(x,1,0);
x = m/10;
module.setDisplayDigit(x,3,0);
x = m - x*10; 
module.setDisplayDigit(x,4,0);
x = s/10;
module.setDisplayDigit(x,6,0);
x = s - x*10; 
module.setDisplayDigit(x,7,0);
module.setDisplayToString("-",false,2);
module.setDisplayToString("-",false,5);
}

//переводим секунды в часы минуты секунды
void timing(){
h = s/3600;
s = s - h*3600;
m = s/60;
s = s - m*60;
}  


 

 

ticher
Offline
Зарегистрирован: 31.08.2016

Всем привет.

У меня такой вопрос: можно ли, используя микросхему TM1638, управлять светодиодной матрицей для того чтобы выводить бегущую строку?

Подскажите как!

pavel747123
Offline
Зарегистрирован: 10.01.2017

Ребята подскажите пожалуйста собираю термометр на TM1638 LED&KEY температуру получилось вывести на индикаторы а точку не могу вытащить из массива работаю на ардуино мега 2560.

Не судите строга новичёк

#include <InvertedTM1638.h>
#include <TM1638.h>
#include <TM16XXFonts.h>


int stb=5;
int clk=6;
int dio=7;
TM1638 display(dio,clk,stb);
int temp=A7;
int reading;
float temperatura;
char temP[4];

void setup() 
{
  Serial.begin(9600);
  display.setupDisplay(true, 2);
 
}

void loop() 
{
  reading=analogRead(temp);
  temperatura=reading/1.982;
   Serial.println(temP);
  delay(1500);
  dtostrf(temperatura,2,1,temP);
  display.setDisplayDigit(temP[0],0,false);
  display.setDisplayDigit(temP[1],1,false);а вот как её сюда поместить мозгов маловата да так чтобы вмести с цыфрой показывала три дня промучился
  display.setDisplayDigit(temP[2]-4,7,false); вот эта точка
  display.setDisplayDigit(temP[3],2,false);
   
}

 

0259
0259 аватар
Offline
Зарегистрирован: 30.03.2014

А можно и мне вопрос есть у меня куча дисплеев на похожей микросхема сделанные косоглазыми братьями так вот они раскидали ножки по-другому не по стандартной схеме включения в датащите
так вот сам вопрос как включит данную микросхему без библиотек
По графику её работы перед передачей данных дергается stb идёт передача по dio и тактируется по clk мог перепутать буквы в у последнего.
Вот и сам вопрос : Как подати сигнал передовая данные так тировать ? Как реализовать это без lib

0259
0259 аватар
Offline
Зарегистрирован: 30.03.2014

Микросхема tl1628

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

откройте либу - и посмотрите код - она фактически и выполняет все нужные вам действия - просто выберите что вам надо без остальной кучи дополнительных функций )

0259
0259 аватар
Offline
Зарегистрирован: 30.03.2014

ELITE пишет:

откройте либу - и посмотрите код - она фактически и выполняет все нужные вам действия - просто выберите что вам надо без остальной кучи дополнительных функций )


Ответ хорош об этом думал но не понимаю как работает библиотека :-( буду благодарен если кто-нибудь поможет понять ?

ELITE
ELITE аватар
Offline
Зарегистрирован: 11.01.2018

библиотека - это просто часть кода, которая вынесена в отдельный файл

по сути - это набор функций

вам нужна функция отправки на дисплей - там будет какраз отправка тактирования и данных, всего строк 5-7 кода

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

0259 пишет:
Как подати сигнал передовая данные так тировать ? Как реализовать это без lib

Посмотрите, как я это делаю. Микросхема на самом деле такая же - программа подойдёт.

Altarga
Offline
Зарегистрирован: 04.09.2018

Поздновато конечно для ответа скорее всего но.. В общем попался мне модуль индикации из DVD плеера дешевого, он был выполнен на микросхеме CS1694 и светодиодном индикаторе. Кое как найдя даташит на нее (разумеется он на китайском), понял что микруха по функционалу практически та же ТМ1638, с некоторыми отличаями в количестве разрядов и кнопок. Пробовал запустить с библиотекой для ТМ1638, долго колдовал и в итоге получил от нее признаки жизни. В общем оказалось что к ней был подключен индикатор не по даташиту. Разряды на нем не по порядку распологаются и вместо индикатора с ОК, как указано в даташите, к ней был подключен индикатор с ОА, сегменты к выходам разрядов, а разряды к выходам сегментов. Собрал 6-ти разрядный индикатор из завалявшихся АЛС324А на макетке и подключил в соответствии с даташитом. В плане индикации прекрасно работает с библиотекой от ТМ1638, просто нужно учитывать что у ТМ1638 на два разряда больше и все.