Вопрос по I2C. Не инициализирует LCD

denis_n73
Offline
Зарегистрирован: 24.07.2015

Помогите разобраться с I2C в ардуино. Пытаюсь инициализировать LCD TIC149 на базе PCF8535 и библиотечными функциями <Wire.h> и ничего не выходит.

У индикатора адрес 8bit : 0x78 = 01111000, где последний бит RW

Библиотека ардуины сама добавляет этит бит RW, поэтому к индикатору обращаюсь по адресу 0х78>>1 = 00111100 = 0x3C. При этом индикатор откликается на запрос по адресу.

Далее последовательно формирую команды в байтовом виде и отправляю их. И как раз тут что-то идет не так, на экране множество точек, как буд-то байты не правильно формируются командой write();

Индикатор полностью исправен, прекрассно все воспринимает если работаю с ним собственными функциями для работы i2c. (инициализация, старт, запись, стоп) , но мне надо именно ардуиновской библиотекой отправлять ему команды.

В чем может быть причины отказа индикатора воспринимать команды библиотеки wire???

Мой рабочий код функций для работы с I2C:

 
// ИНИЦИАЛИЗАЦИЯ ШИНЫ I2C //
void I2C_init() {
  pinMode(A4,OUTPUT); digitalWrite(A4,HIGH); // пин SDA
  pinMode(A5,OUTPUT); digitalWrite(A5,HIGH); // пин SCL
  TWBR=1;                                                      // настройка частоты
  TWSR=1;                                                      // настройка предделителя
}
 
// НАЧАЛО ПЕРЕДАЧИ ДАННЫХ ПО I2C //
void i2c_start(void) {
  TWCR|=0x24;      
  while (!(TWCR & (1<<TWINT))) asm("nop "); 
}
 
// ПЕРЕДАЧА ДАННЫХ ПО I2C //
void i2c_write(unsigned char data) {         
  TWDR=data;   
  TWCR=0x84;    
  while (!(TWCR & (1<<TWINT))) asm("nop ");  
}
 
// КОНЕЦ ПЕРЕДАЧИ ДАННЫХ ПО I2C //
void i2c_stop(void) {
  TWCR=0x00;
}
Radjah
Offline
Зарегистрирован: 06.08.2014

На пинах аппаратного TWI делаешь программный? o_0