WDT ISR не вызывается при инициализации модуля SPI ST7789

Использование функции .init для TFT-экрана ST7789 предотвращает срабатывание моего WDT ISR. Чем объясняется такое поведение, и есть ли что-то, что я могу сделать? Любой другой таймер ISR я мог бы использовать вместо этого?

#include <Adafruit_ST7789.h>    // Includes Adafruit_GFX.h

#define TFT_CS 10 // define chip select pin
#define TFT_DC 9  // define data/command pin
#define TFT_RST 8 // define reset pin, или установите значение -1 и подключитесь к Arduino RESET pin

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);

void setup()
{
    //Serial.begin(9600);
    pinMode(13, OUTPUT);

    WDTCSR = (24); // Изменение enable и WDE - также сбрасывается
    //только прескалеры - избавьтесь от битов WDE и WDCE.
    WDTCSR = (6); // 1 sec
    WDTCSR |= (1 << 6); //enable interrupt mode - WDT as an interrupt is useful to wake up from sleep
    sei();

    tft.init(240, 240, SPI_MODE2); // прокомментируйте это, и WDT прекрасно работает
    tft.setRotation(0);
    tft.setTextWrap(true);
}


void loop()
{
    
}


ISR(WDT_vect)
{
  digitalWrite(13, (digitalRead(13) ^ 1));   // переключающий светодиодный штифт
}

- Спасибо!

, 👍1

Обсуждение

Чтобы быть ясным, вы говорите, что вывод 13 мигает тогда и только тогда, когда вызов tft.init закомментирован?, @timemage

@timemage да, точно, @JCSB


1 ответ


2

Вы не можете использовать светодиод на выводе 13 на Uno, Nano или Nano Every, если вы используете SPI . Это часовой штифт SPI.

Функция init дисплея инициализирует SPI, который выделяет ПИН для SPI периферии и отключает его от PIN IO периферии.

,

Хорошая мысль. Возможно, я заметил бы это, если бы он упомянул об используемых контактах, таких как "использование 8 - RST; 9 - DC; 10 - CS; 11 - MOSI; 12 - MISO; 13 - SCLK; 13 - LED_BUILTIN", @KIIV