Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Помогите разобраться с 7-сегментным индикатором на TM1637

Пт май 17, 2019 15:44:53

Уважаемые коты, здравствуйте.
Пытаюсь подключить к микронтроллеру (atmega16) микросхему TM1637 по программному I2C
Среда разработки - micropascal (Си не владею, щито поделать)
Используется штатная библиотека software i2c
За основу взял код из даташита:
Код:
void SmgDisplay(void) // Write display register   
{     
unsigned char i;   
  I2CStart(); 
  I2CWrByte(0x40); //40H address is automatically incremented by 1 mode, 44H fixed address mode
  I2Cask(); 
  I2CStop(); 
  I2CStart(); 
  I2CWrByte(0xc0);  // Set the first address 
  I2Cask(); 
  for(i=0;i<6;i++)  // Addresses from Canada, do not always write address 

  I2CWrByte(0xff);  // Send data 
  I2Cask(); 

  I2CStop(); 
  I2CStart();   
  I2CWrByte(0x8f); // Open display, maximum brightness 
  I2Cask();   
  I2CStop();   
}


В примере все команды i2c сделаны отдельными процедурами, в то время как я пользуюсь встроенной библиотекой
Изображение[/url]
как видите, в ней есть все те же команды, кроме I2Cask
вот так она сделана в примере:
Код:
void I2Cask (void) // 1637 Answer 
{
clk = 0; 
Delay_us (5); // After the falling edge of the eighth clock delay 5us,
ACK signals the beginning of judgment 
while (dio); 
    clk = 1; 
Delay_us (2); 
    clk = 0; 
}


Без команды I2Cask на данный момент ничего не работает, индикатор молчит
Код:
procedure disp_write();
begin
    SREG_I_bit:=0;  //запретить прерывания
    Soft_I2C_Init();
    Soft_I2C_Start();
    Soft_I2C_Write(%01000000);
    Soft_I2C_Stop();
   
    Soft_I2C_Start();
    Soft_I2C_Write(%11000000);
    Soft_I2C_Write(249);
    Soft_I2C_Write(164);
    Soft_I2C_Write(176);
    Soft_I2C_Write(153);
    Soft_I2C_Write(146);
    Soft_I2C_Write(130);
    Soft_I2C_Stop();
   
    Soft_I2C_Start();
    Soft_I2C_Write(%10001111);
    Soft_I2C_Stop();

    Soft_I2C_Write(%10001111); //разрешить прерывания
 
end;


Вопрос получается такой: объясните на пальцах, что делает процедура I2Cask, чтобы я смог воспроизвести её в паскале и наконец заставить работать эту щайтан-машину на полную катушку. Буду очень рад вашим добрым советам!
Последний раз редактировалось Yamazaki Пт май 17, 2019 20:19:50, всего редактировалось 1 раз.

Re: Помогите разобраться с 7-сегментным индикатором на TM163

Пт май 17, 2019 16:47:13

А разве TM1637 с i2c работает? По моему там своё, попроще.

Re: Помогите разобраться с 7-сегментным индикатором на TM163

Пт май 17, 2019 21:15:25

Протокол i2C-подобный, но упрощен.
Код:
Microprocessor data  realize  the  communication  with  TM1637  by  means  of  two–wire  bus  interface  (Note:  The
communication method is not equal to 12C bus protocol totally because there is no slave address).

>>Протокол не в точности соответствует I2C, поскольку у микросхемы нет slave адреса.

Добавлено after 4 hours 20 minutes 50 seconds:
Re: Помогите разобраться с 7-сегментным индикатором на TM1637
Код:
void I2Cask (void) // 1637 Answer 
{
clk = 0; 
Delay_us (5); // After the falling edge of the eighth clock delay 5us,
ACK signals the beginning of judgment 
while (dio); 
    clk = 1; 
Delay_us (2); 
    clk = 0; 
}


Вот эта строчка что означает?
Код:
while (dio); 

Цикл какой-то?

Re: Помогите разобраться с 7-сегментным индикатором на TM163

Пт май 17, 2019 23:04:35

Дядя, вы меня пугаете!(
О чём можно говорить дальше!

Re: Помогите разобраться с 7-сегментным индикатором на TM163

Сб май 18, 2019 00:22:20

Дядя, вы меня пугаете!(
О чём можно говорить дальше!

Уважаемый, я же описал ситуацию: пример на С, я пишу на паскале.
Если бы я знал язык, сам бы разобрался, не стал никого отвлекать.

Re: Помогите разобраться с 7-сегментным индикатором на TM163

Пн май 20, 2019 22:25:38

А что, в Паскале нет оператора while ? Вроде с утра был. А логика процедуры проста, как грабли.

clk := 0;
Delay_us (5);
while not(dio=0) do ;
clk = 1;
Delay_us (2);
clk := 0;

0 -> clk ; задержка 5мкс; пока dio не = 0, крутить пустой цикл; 1 -> сlk; задержка 2мкс ; 0 -> clk ;

dio меняется во внешнем окружении, скорее всего - в прерывании.

Re: Помогите разобраться с 7-сегментным индикатором на TM163

Пт май 24, 2019 05:59:37

У этого индикатора ещё и порядок бит обратный... (по сравнению с I2C)
Поэтому он ничего не показал.

Re: Помогите разобраться с 7-сегментным индикатором на TM163

Вс июл 21, 2019 20:27:11

dio меняется во внешнем окружении, скорее всего - в прерывании.

Это скорей всего пин SDA...
Ответить