Уважаемые коты, здравствуйте.
Пытаюсь подключить к микронтроллеру (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, чтобы я смог воспроизвести её в паскале и наконец заставить работать эту щайтан-машину на полную катушку. Буду очень рад вашим добрым советам!