Перейти к содержанию
    

MPU-6050 + AVR C

Опять из дома и не по работе.

Собрал mpu-6050 (GY-521) + avr Mega2560. Подружил их (то есть получаю ответ WHO_AM_I)

могу писать в регистры и затем читать оттуда данные, но к сожалению по осям акселерометра, гироскопа и температуры читаю нули.

Уже не знаю куда копать, казалось бы простая задача, но не получается, перерыл документацию, перечитал форумы, пробовал примерять чужие алгоритмы инициализации - бесполезно.

Скачал стек памяти MPU-6050:

000001 00:23:15.952  F9 03 85 02 4E 31 FC 28 00 77 02 B8 28 50 4E B7 щ.….N1ь(.w.ё(PN·
000002 00:23:15.952  D6 00 00 00 00 00 00 00 00 07 00 18 00 00 00 00 Ц...............
000003 00:23:16.681  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000004 00:23:16.681  00 00 00 00 00 00 00 00 00 00 01 00 00 00 00 00 ................
000005 00:23:17.410  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000006 00:23:17.410  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
000007 00:23:18.138  00 00 00 00 00 00 00 00 00 00 00 02 00 00 0F 77 ...............w
000008 00:23:18.138  00 00 00 00 00 68 00 00 00 00 00 00 00 00 00 00 .....h..........

Как видно 68 считывается. И устройство не в режиме сна. Но нужных данных нет (

Может кто сталкивался?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

попробуйте ему послать несколько команд перед чтением данных с него.
в частности записать нужные значения в регистры 0x6B, 0x1A,0x19,0x1B,0x1C
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

mpu6050_writeByte(MPU6050_RA_PWR_MGMT_1, 0x01);
mpu6050_writeByte(MPU6050_RA_CONFIG, 0x00);
mpu6050_writeByte(MPU6050_RA_SMPLRT_DIV, 0x07);  //  200 Hz 
mpu6050_writeByte(MPU6050_RA_GYRO_CONFIG, 0x18);
mpu6050_writeByte(MPU6050_RA_ACCEL_CONFIG,00);

Вот такая настройка у меня указанных вами регистров.

После чего я пробую прочитать значения и получаю все регистры как указано выше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

быть может режим/обмен I2C не соблюдается до конца? быть может адрес не тот используется? хотя по дампу видно что он отдал данные..

вот с таким DEFAULT ADDRESS он у меня в свое время отвечал и корректно работал

  // MPU6050 7-bit adress = 0x68, 8-bit adress = 0xD0;

  #define MPU6050_ADDRESS_AD0_LOW                   0x68
  #define MPU6050_ADDRESS_AD0_HIGH                  0x69
  #define MPU6050_ADDRESS_DEFAULT                   (MPU6050_ADDRESS_AD0_LOW << 1)

могу кинуть свои исходники. в свое время пока не перешел на другой датчик - успешно работали. там С но только под STM32. процессоро зависимый кусок там получается при работе с I2C

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В итоге я нашел процедуру обмена, которая заработала. Почему не работала моя не знаю, но видимо и не узнаю )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...