Народ, подскажите, может у кого такое было. Возникла необходимость снимать показания с датчика UM7-LT Orientation Sensor (http://www.chrobotics.com/shop/um7-lt-orientation-sensor , даташит http://www.chrobotics.com/docs/UM7_Datasheet.pdf) по SPI на Arduino DUE. Для начала накидал программку чтобы считать регистры и посмотреть на их значения, но по какой-то причине переменным DUE присваивается значение 255 (11111111) а не те данные которые идут по шине SPI. Осциллограф показывает что вроде как по MOSI данные отправляются на датчик , по шине MISO отдаются данные с регистров датчика на DUE (на осциллографе данные регистров изменяются если датчик пошевелить), но переменным hold[0]-hold[3] значения с шины SPI не присваиваются . Что может быть ума не приложу. Помогите пожалуйста кто знает. Рисунок с осциллографа в прицепе. Вот скетч: Код (Text): #include <SPI.h> int16_t hold[4]; void setup() { Serial.begin(115200); SPI.begin(4); SPI.setBitOrder(4, MSBFIRST); SPI.setDataMode(4, SPI_MODE0); SPI.setClockDivider(4, 21); } void loop() { SPI.transfer(4, 0x00, SPI_CONTINUE); SPI.transfer(4, 0x70, SPI_CONTINUE); SPI.transfer(4, 0x00,SPI_CONTINUE); // в даташите не описан, но без него нет последнего регистра B0 hold[0] = SPI.transfer(4, 0x00,SPI_CONTINUE); hold[1] = SPI.transfer(4, 0x00,SPI_CONTINUE); hold[2] = SPI.transfer(4, 0x00,SPI_CONTINUE); hold[3] = SPI.transfer(4, 0x00); Serial.println(hold[0]); Serial.println(hold[1]); Serial.println(hold[2]); Serial.println(hold[3]); }
Выглядит так, как будто частота SPI слишком высокая или режим передачи не совпадает. Странно, делитель вроде бы выставлен приличный... но вот этот двух-пиковый ответ - это не нормально.
Может быть такое что сама DUE бракованная? Или библиотека SPI в среде разработки неправильно компилируется?