Arduino uno spi sck не работает

Я пытаюсь проверить вывод sck на arduino uno. У меня нет осциллографа, поэтому я зациклил мисо на sck и попытался выполнить int rx0=SPI.transfer(5) при печати с использованием Serial.printrx0), он выдает 255.Является ли это ожидаемым результатом?

, 👍1

Обсуждение

Я ожидал бы, что вы получите все биты с одинаковым значением. Вы можете попробовать другие SPI_MODES, и вы, вероятно, получите 0x00 для двух из них.. Однако вы можете использовать обратную связь между MOSI и МИСО (вы можете ожидать задержки 1B)., @KIIV

Привет, КИИВ, СПАСИБО, что ответил.. Я перепробовал все режимы SPI и получил на выходе 255, что означает, что весь бит равен 1 в байте. Является ли это правильным результатом?могу ли я сказать, что мой выход sck в норме? Спасибо, @manish kumar

Вместо этого вы можете отправить SCK на T1 (вывод 5), настроить таймер 1 в качестве счетчика и использовать его для подсчета тактовых импульсов., @Edgar Bonet


1 ответ


3

Как было предложено KIIV и мной, вы можете протестировать порт SPI следующим образом:

  • подключение MOSI к MISO и проверка того, получаете ли вы то, что отправляете
  • подключение SCK к входу таймера T1 и подсчет тактовых импульсов.

Ниже приведен скетч, который выполняет оба теста:

/*
 * Test the SPI port.
 *
 * Connect:
 *   MOSI (11) to MISO (12)
 *   SCK (13) to T1 (5)
 */

void setup() {
    Serial.begin(9600);

    // Configure SPI port.
    DDRB |= _BV(PB2)   // SS (digital 10) as output
          | _BV(PB3)   // MOSI (digital 11) as output
          | _BV(PB5);  // SCK (digital 13) as output
    SPCR = _BV(SPE)    // enable port
         | _BV(MSTR);  // master mode

    // Configure Timer 1.
    TCCR1A = 0;          // normal mode
    TCCR1B = _BV(CS10)   // count rising edges of T1 = digital 3
           | _BV(CS11)   // ditto
           | _BV(CS12);  // ditto
}

void loop() {
    TCNT1 = 0;  // clear timer
    uint8_t data = random(256);
    Serial.print(data);
    Serial.print(" -> ");
    SPDR = data;  // send
    delay(1);
    if (bit_is_set(SPSR, SPIF)) {  // transfer complete?
        Serial.println(SPDR);
    } else {
        Serial.println("nothing received");
    }
    Serial.print("    clock pulses: ");
    Serial.println(TCNT1);
    delay(1000);
}

На нем должно быть напечатано:

167 -> 167
    clock pulses: 8
241 -> 241
    clock pulses: 8
217 -> 217
    clock pulses: 8
[...]
,