gamma (03.03.2009 14:32, просмотров: 409) ответил Andreas на Вопрос к господам из Гаммы: как подключать TIC107. Если по TIC32 есть апнота, то что такое Vdd123.. в тике107 и что с ними делать совершенно непонятно и из даташита на контроллер.
Что-то вроде application note еще не оформлено, но в теле сообщения пример, который поможет. Схема включения TIC107:
Вывод
1 - SCL - i2c
2 - POR - сброс драйвера, сброс высоким уровнем
3 - SDA - i2c
4 - VDD1 - +5В
5 - VDD2/VDD3 - +5В
6 - VSS - земля
7 - VLCD - керамический конденсатор ~1мкФ на землю
/* -------------------------------------------------------------------------
*/
#define TIC107_RESET (RC5)
#define TIC107_RESET_TRIS (TRISC5)
#define TIC107_ADDR (0x74)
#define CON1 (0b10000000)
#define CON2 (0b01000000)
void tic107_init(void)
{
TIC107_RESET = HIGH; // external reset active HIGH
TIC107_RESET_TRIS = OUT;
delay_ms(5);
TIC107_RESET = LOW;
delay_ms(5); // at least 2ms for initialisation
i2c_start(TIC107_ADDR);
i2c_write(0x00); // Co=0, RS=0
i2c_write(0b00110100); // DL=1, M=1, SL=0, H=0
i2c_write(0b00001100); // D=1, C=0, B=0
i2c_write(0b00000110); // I/D=1, S=0
i2c_write(0b00110101); // DL=1, M=1, SL=0, H=1
i2c_write(0b00000011); // L=1
i2c_write(0b00000100); // P=0, Q=0
i2c_write(0b00001000); // IM=0, IB=0
i2c_write(0b00010000); // TC1=0, TC2=0
i2c_write(0b01000010); // S1=1, S0=0 (4x)
i2c_write(0b10000000 | 23); // V=0 (Va)
i2c_stop();
}
/* -------------------------------------------------------------------------
*/
void tic107_contrast(uint8 val)
{
i2c_start(TIC107_ADDR);
i2c_write(0x00); // Co=0, RS=0
i2c_write(0b00110101); // DL=1, M=1, SL=0, H=1
i2c_write(0b10000000 | val); // V=0 (Va)
i2c_stop();
}
/* -------------------------------------------------------------------------
*/
// Гамма СПб - ЖКИ
const byte str1[] = { 0x45, 0xE1, 0x6C, 0x6C, 0xE1, 0x20, 0xC3, 0x96,
0x54, 0x20, 0xAD, 0x20, 0x47, 0xCB, 0x49, 0x20 };
// COG 16x2 PCF2119
const byte str2[] = { 0xC3, 0xCF, 0xC7, 0x20, 0xB1, 0xB6, 0xF8, 0xB2,
0x20, 0xD0, 0xC3, 0xC6, 0xB2, 0xB1, 0xB1, 0xB9 };
void main(void)
{
// ...
tic107_init();
// вывод str1 в первую строку
i2c_start(TIC107_ADDR);
i2c_write(0b01000000); // Co=0, RS=1
for(tmp = 0; tmp < 16; tmp++)
i2c_write(str1[tmp]);
i2c_stop();
// смещаем указатель на вторую строку
i2c_start(TIC107_ADDR);
i2c_write(0b00000000); // Co=0, RS=0
i2c_write(0b00110100); // DL=1, M=1, SL=0, H=0
i2c_write(0b10000000 | 0x40); // set DDRAM address
i2c_stop();
// вывод str2 по указателю (вторая строка)
i2c_start(TIC107_ADDR);
i2c_write(0b01000000); // Co=0, RS=1
for(tmp = 0; tmp < 16; tmp++)
i2c_write(str2[tmp]);
i2c_stop();
// зеркалирование право-лево, верх-низ (биты P, Q)
i2c_start(TIC107_ADDR);
i2c_write(0x00); // Co=0, RS=0
i2c_write(0b00110101); // DL=1, M=1, SL=0, H=1
i2c_write(0b00000100); // P=0, Q=0
i2c_stop();
delay_ms(2000);
i2c_start(TIC107_ADDR);
i2c_write(0x00); // Co=0, RS=0
i2c_write(0b00110101); // DL=1, M=1, SL=0, H=1
i2c_write(0b00000101); // P=0, Q=1
i2c_stop();
delay_ms(2000);
i2c_start(TIC107_ADDR);
i2c_write(0x00); // Co=0, RS=0
i2c_write(0b00110101); // DL=1, M=1, SL=0, H=1
i2c_write(0b00000110); // P=1, Q=0
i2c_stop();
delay_ms(2000);
i2c_start(TIC107_ADDR);
i2c_write(0x00); // Co=0, RS=0
i2c_write(0b00110101); // DL=1, M=1, SL=0, H=1
i2c_write(0b00000111); // P=1, Q=1
i2c_stop();
delay_ms(2000);
// изменение контраста
for(tmp = 0; tmp < 64; tmp++)
{
delay_ms(100);
tic107_contrast(tmp);
}
tic107_contrast(23);
// ...
}
/* ===================================================================== */