arduino due + 74hc595

Тема в разделе "Arduino & Shields", создана пользователем Михаил Тищенко, 3 июл 2014.

  1. Помогите разобраться что не так с SPI. Собрал схему управления семисегментным индикатором, через shiftOut всё работает,а SPItransfer ни в какую.
    Код (Text):
    #include <SPI.h> // подключаем библиотеку SPI


    enum { reg = 10 }; // провод CS подсоединяем к 8-му пину Arduino


    void setup()
    {
      SPI.begin();  // инициализируем SPI
      pinMode(reg, OUTPUT); // настраиваем 8-й пин как выход
    }


    void loop()
    {
      // храним в массиве все цифры
      static uint8_t digit[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
      // выводим цифры по одной
      for (int i=0;i<16;i++){
        digitalWrite(reg, LOW); // притягиваем CS к земле - начало передачи
        SPI.transfer(digit[i]); // передаем байт
        digitalWrite(reg, HIGH); // отпускаем  CS - конец передачи
        delay(1000); // ждем секунду
      }
      //очистим дисплей на секунду
      digitalWrite(reg, LOW);
      SPI.transfer(0xFF);
      digitalWrite(reg, HIGH);
      delay(1000);
    }
     

    Вложения:

  2. ANV

    ANV Гуру

  3. Unixon

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

    Попробуйте добавить в скетч

    Код (Text):
    pinMode(reg, OUTPUT);
    SPI.begin(reg);
    SPI.setDataMode(reg,SPI_MODE0);
    SPI.setBitOrder(reg,LSBFIRST);
    SPI.setClockDivider(reg,84);
     
    Михаил Тищенко нравится это.
  4. Если я правильно Вас понял код должен выглядеть так.
    Код (Text):
    void setup()
    {
     
      // инициализируем SPI
      pinMode(reg, OUTPUT); // настраиваем 8-й пин как выход
      SPI.begin(reg);
      SPI.setDataMode(reg,SPI_MODE0);
      SPI.setBitOrder(reg,LSBFIRST);
      SPI.setClockDivider(reg,84);
    }


    void loop()
    {
      // храним в массиве все цифры
      static uint8_t digit[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
      // выводим цифры по одной
      //for (int i=0;i<16;i++){
    //    digitalWrite(reg, LOW); // притягиваем CS к земле - начало передачи
        SPI.transfer(reg,digit[i]); // передаем байт
        //digitalWrite(reg, HIGH); // закоментировал  в DUE библиотека сама выполняет управление                                                                                                                     передачей
        delay(1000); // ждем секунду
     
  5. Разобрался, оказалось нужно подключать к системному SPI расположение пинов здесь http://arduino.ua/ru/prog/SPI