I am trying to verify sck output on my arduino uno. I don't have oscilloscope so I loopbacked miso to sck and tried Executing int rx0=SPI.transfer(5) while printing this using Serial.printrx0) it is giving 255.Whether this is expected output?
-
I'd expect you'll get all bit with the same value. You can try other SPI_MODES and you probably get 0x00 for two of them.. However you could use loopback between MOSI a MISO (you can expect 1B delay)– KIIVCommented Nov 28, 2021 at 6:47
-
Hi KIIV, THANKS for responding.. I tried all the SPI mode and I got 255 as output, means all the bit as 1 in the byte. Whether it is right result?whether I can say my sck output is normal? Thanks– manish kumarCommented Nov 28, 2021 at 7:13
-
1You could instead send SCK to T1 (pin 5), configure Timer 1 as a counter, and use it to count the clock pulses.– Edgar BonetCommented Nov 28, 2021 at 9:04
Add a comment
|
1 Answer
As suggested by KIIV and myself, you can test the SPI port by:
- connecting MOSI to MISO and checking if you receive what you send
- connecting SCK to the timer input T1 and counting the clock pulses.
Below is a sketch that performs both tests:
/*
* 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);
}
It should print:
167 -> 167
clock pulses: 8
241 -> 241
clock pulses: 8
217 -> 217
clock pulses: 8
[...]