Здравствуйте! Имею микроконтроллер мега16 и модуль гироскоп MPU-6050. Пытаюсь с ним пообщаться по шине TWI.
Общение построил по протоколу из даташита и вроде бы модуль отсылает мне бит подтверждения ACK но как дело доходит до чтения данных из регистра TWDR там одни нули! Подскажите что неправильно.
Вот протокол общения:
unsigned char MPU_I2C_R(unsigned char w,unsigned char x, unsigned char r)
{
char a;
I2C_start();//отправляем условие СТАРТ
I2C_tranciv_byte(w);//отправляем адрес модуля на запись
I2C_tranciv_byte(x);//отправляем адрес регистра откуда будем читать данные
I2C_start();//отправляем повторный СТАРТ
I2C_tranciv_byte(r);//отправляем адрес модуля на чтение
a = I2C_receiver_last_byte();//читаем данные из регистра
I2C_stop();//отправляем условие СТОП
return a;
}
Вот функция чтения чтения данных
unsigned char I2C_receiver_last_byte()
{
TWCR = (1<<TWINT)|(1<<TWEN);// включили прием данных <--вот после этого в отладке регистр TWDR обнуляется
while(!(TWCR&(1<<TWINT))); //ждем установку бита TWIN
return TWDR;
}