Задать вопрос
@Kopranych

Как считать данные с гироскопа MPU-6050?

Здравствуйте! Имею микроконтроллер мега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;
}
  • Вопрос задан
  • 1030 просмотров
Подписаться 2 Оценить 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@Syzd
Ардуинщик
Вы пишите код без использования библиотек? Может это чем то поможет? https://www.cl.cam.ac.uk/teaching/1011/P31/lib/i2c.c
Вот подробно - www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/18_5.htm
Ответ написан
Комментировать
@Kopranych Автор вопроса
Спасибо всем за ответы, у меня все заработало! дело было в том что я ни как не проинициализировал регистр PWR_MGMT_1 который как я понял если не записать в него НОЛЬ постоянно сбрасывает значения всех измерительных регистров. Поэтому то и выдавались нули...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы