Arduino due не присваивает значение переменным от шины SPI

Тема в разделе "Arduino & Shields", создана пользователем Renat, 5 окт 2014.

  1. Renat

    Renat Нерд

    Народ, подскажите, может у кого такое было. Возникла необходимость снимать показания с датчика 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]);

    }

     
     

    Вложения:

    • DUE_SPI1.png
      DUE_SPI1.png
      Размер файла:
      24 КБ
      Просмотров:
      683
    • DUE_SPI1.png
      DUE_SPI1.png
      Размер файла:
      24 КБ
      Просмотров:
      884
  2. Unixon

    Unixon Оракул Модератор

    Выглядит так, как будто частота SPI слишком высокая или режим передачи не совпадает.
    Странно, делитель вроде бы выставлен приличный... но вот этот двух-пиковый ответ - это не нормально.
     
  3. Renat

    Renat Нерд

    Может быть такое что сама DUE бракованная? Или библиотека SPI в среде разработки неправильно компилируется?
     
    Последнее редактирование: 6 окт 2014