• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Вопрос HSPI/VSPI GPIO12

unreg

Member
Собрал клавиатуру на сдвиговых регистрах 74HC165. Опрос делаю через SPI, в процессе появились такие вопросы.
Клавиатура подключена на пины 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;
    }
}
 

unreg

Member
Заглянул сейчас в SPI.h и далее в pins_arduino.h так там :
static const uint8_t SS = 5;
static const uint8_t MOSI = 23;
static const uint8_t MISO = 19;
static const uint8_t SCK = 18;
а это вроде как пины VSPI по даташиту... получается у меня в коде программный SPI?
 

unreg

Member
Продолжу пока сам с собой разговаривать)) Переткнул пины согласно VSPI, убрал SPI.begin(14, 13); и раскомментировал SPI.begin(). Все работает нормально. Но вопросы пока остаются
 

nikolz

Well-known member
Продолжу пока сам с собой разговаривать)) Переткнул пины согласно VSPI, убрал SPI.begin(14, 13); и раскомментировал SPI.begin(). Все работает нормально. Но вопросы пока остаются
GPIO15 читается при старте после этого он может использоваться как угодно.
а GPIO12 не используется при программировании
Поясните почему Вы не можете его использовать.
При старте ваша программа не работает и клавиатура тоже.
 

unreg

Member
При старте ваша программа не работает и клавиатура тоже.
в строке 23 опечатка byte keys[chips]; заменить на byte keys[chip_count]; последствия правки на сайте. а так все прекрасно работает вместе с клавиатурой.
По GPIO12 странные дела... сейчас подключил CLK на GPIO12 и действительно работает нормально... вчера ни в какую не хотело заводиться. Ладно спишем на усталость, невнимательность и плохой контакт
 

zbot09

New member
в строке 23 опечатка byte keys[chips]; заменить на byte keys[chip_count]; последствия правки на сайте. а так все прекрасно работает вместе с клавиатурой.
По GPIO12 странные дела... сейчас подключил CLK на GPIO12 и действительно работает нормально... вчера ни в какую не хотело заводиться. Ладно спишем на усталость, невнимательность и плохой контакт
при старте esp уровень сигнала на этой ноге определяет питание встроенной флеш памяти, т.е. может привести к невозможности загрузить esp32
 
Сверху Снизу