Здравствуйте уважаемые схемотехники, программисты и конструктора! Работы с микроконтроллером MSP430 и магнитометром LSM303DLHC. Этот магнитометр использует шину I2C для передачи данных. На микроконтроллере я реализовал программный I2C.
Приведу кусок кода. Не удивляйтесь (и не ругайтесь) наличием классов, среда разработки позволяет использовать С++'ные классы и так мне удобнее....
//Определим пины, которые будут играть свои роли - SCL и SDA, порта 11 бит 1 и бит 2. i2c.Set_SDA(&P11OUT, &P11IN, &P11REN, &P11DIR, BIT2); i2c.Set_SCL(&P11OUT, &P11IN, &P11REN, &P11DIR, BIT1);
Проблема заключается в том, что при считывании по этому адресу , TEMP = 0x00. Хотя я перепроверял: Temp = i2c.ReadData(0x00); Temp после этого равен 0х14... значит I2C работает правильно и мы можем записывать и считывать. Получается, что проблема в инициализации... Возможно я не прав. Помогите пожалуйста товарищи!) Заранее спасибо!
Вы привели непонятный (мне) кусочек кода //Настроем магнитометр i2c.WriteData(0x00, 0x14); i2c.WriteData(0x02, 0x00); В библиотеке ардуино для сабжа включение выглядит так:
Код:
#define LSM303_CTRL_REG1_A 0x20 #define LSM303_CTRL_REG4_A 0x23 #define LSM303_MR_REG_M 0x02 ........ // Turns on the LSM303's accelerometer and magnetometers and places them in normal // mode. void LSM303::enableDefault(void) { // Enable Accelerometer // 0x27 = 0b00100111 // Normal power mode, all axes enabled writeAccReg(LSM303_CTRL_REG1_A, 0x27);
if (_device == LSM303DLHC_DEVICE) writeAccReg(LSM303_CTRL_REG4_A, 0x08); // DLHC: enable high resolution mode
Спасибо за ответ, извините, по работе не мог отписться побыстрее....
i2c.WriteData(0x00, 0x14); i2c.WriteData(0x02, 0x00); Передача данных... 0х00 - адресс, 0х14 - значение... так вот если я настраиваю так: i2c.WriteData(0x00, 0x10); i2c.WriteData(0x20, 0x97); То работаент только акселерометр... следовательно... я настроил и2с правильно... значит какие-то недочеты в настройке магнитометра....
По приведенным примерам не понятно, поэтому уточню: Вы в курсе, что акселерометр и магнитометр имеют разные адреса устройстI2C?
Цитата:
For linear acceleration the default (factory) 7-bit slave address is 0011001b. For magnetic sensors the default (factory) 7-bit slave address is 0011110xb
Т.е. это два разных устройства, со своими адресами которые впихнули в один корпус.
_________________ — Не говорите мне что делать и я не скажу куда Вам идти...
Да спасибо! тоже недавно вычитал из даташита....(пропустил, балда... Спасибо за ответ... Вообщем что б писать в магнитометр, адресс утсройства должен быть не 0x32, 0x33, а 0x3C, 03D! Резюме: Нужно внимательней читать даташит!)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения