Arduino uno spi sck не работает
Я пытаюсь проверить вывод sck на arduino uno. У меня нет осциллографа, поэтому я зациклил мисо на sck и попытался выполнить int rx0=SPI.transfer(5) при печати с использованием Serial.printrx0), он выдает 255.Является ли это ожидаемым результатом?
@manish kumar, 👍1
Обсуждение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
[...]
,
@Edgar Bonet
Смотрите также:
- Как использовать SPI на Arduino?
- OVF в последовательном мониторе вместо данных
- Как отправить строку с подчиненного устройства Arduino с помощью SPI?
- Проблема совместного использования MISO с несколькими RFID-считывателями RC522
- Программирование ведомого SPI для Arduino
- Последовательная связь между несколькими устройствами (или ардуино)
- Максимальная скорость SPI для ведомого Uno/clone?
- SPI.transfer(buffer, size) не отправляет данные из буфера
Я ожидал бы, что вы получите все биты с одинаковым значением. Вы можете попробовать другие SPI_MODES, и вы, вероятно, получите 0x00 для двух из них.. Однако вы можете использовать обратную связь между MOSI и МИСО (вы можете ожидать задержки 1B)., @KIIV
Привет, КИИВ, СПАСИБО, что ответил.. Я перепробовал все режимы SPI и получил на выходе 255, что означает, что весь бит равен 1 в байте. Является ли это правильным результатом?могу ли я сказать, что мой выход sck в норме? Спасибо, @manish kumar
Вместо этого вы можете отправить SCK на T1 (вывод 5), настроить таймер 1 в качестве счетчика и использовать его для подсчета тактовых импульсов., @Edgar Bonet