Собрал клавиатуру на сдвиговых регистрах 74HC165. Опрос делаю через SPI, в процессе появились такие вопросы.
Клавиатура подключена на пины HSPI кроме CLK. По даташиту CLK подключается на GPIO12, но я тогда не могу прошиться, есп постоянно сбрасывается. Подключился к GPIO13 и заработало, но это гибрид какой-то. Планировал использовать аппаратный SPI, а получил хрен пойми что. Прошу внести ясность, аппаратный SPI vs программный. есть ли особые директивы для запуска того или иного SPI. В чем разница между VSPI|HSPI можно ли их использовать одновременно, и как все-таки использовать GPIO12. Спасибо!
Клавиатура подключена на пины HSPI кроме CLK. По даташиту CLK подключается на GPIO12, но я тогда не могу прошиться, есп постоянно сбрасывается. Подключился к GPIO13 и заработало, но это гибрид какой-то. Планировал использовать аппаратный SPI, а получил хрен пойми что. Прошу внести ясность, аппаратный SPI vs программный. есть ли особые директивы для запуска того или иного SPI. В чем разница между VSPI|HSPI можно ли их использовать одновременно, и как все-таки использовать GPIO12. Спасибо!
Код:
#include <SPI.h>
const byte PL = 15;
const byte chip_count = 4;
static unsigned long last_time;
const int sec = 1;
void setup() {
SPI.begin(14, 13);
//SPI.begin();
SPI.beginTransaction(SPISettings(32000000, MSBFIRST, SPI_MODE3));
pinMode(PL, OUTPUT);
digitalWrite(PL, HIGH);
Serial.begin(115200);
}
void loop() {
unsigned long now = millis();
byte keys[chips];
digitalWrite(PL, LOW);
digitalWrite(PL, HIGH);
for (byte i = 0; i<chip_count; i++) {
keys[i] = SPI.transfer(0);
}
if (now - last_time >= sec * 1000) {
for (byte c = 0; c < chip_count; c++)
{
for (byte i = 0; i<8; i++) {
Serial.print((keys[c] & (1 << i)) != 0 ? 1 : 0);
}
Serial.print(" ");
}
Serial.println(" ");
last_time = now;
}
}