Jump to content

    

MPU-6050 + AVR C

Recommended Posts

mplata

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

Собрал 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 считывается. И устройство не в режиме сна. Но нужных данных нет (

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

Share this post


Link to post
Share on other sites

Zeal0t

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

Share this post


Link to post
Share on other sites

mplata
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);

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

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

Share this post


Link to post
Share on other sites

Zeal0t

быть может режим/обмен 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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.