Использование TFT с аппаратным SPI и динамиком с tone()

Я хочу создать устройство с TFT-экраном и динамиком, использующим встроенную функцию tone(). Однако, согласно документации, использование tone() мешает ШИМ на контактах 3 и 11. В Arduino Uno вывод MOSI по умолчанию установлен на контакте 11, и похоже, что определение другого контакта для MOSI отключает аппаратный SPI, что, согласно странице модуля, замедляет работу устройства. Кроме того, примеры написаны для аппаратного SPI, а SD-карта доступна только с аппаратным SPI. Что мне здесь делать? Есть ли способ переопределить вывод MOSI по умолчанию без отключения аппаратного SPI?

, 👍0

Обсуждение

Это не проблема. Функция тона использует таймер 2, который является тем же таймером, что и при использовании ШИМ для контактов 3 и 11. Функция тона не влияет на контакты 3 и 11, она использует таймер 2 только для программного прерывания для создания тонального сигнала на любом выводе. Функция тона не использует возможности ШИМ микроконтроллера., @Jot

короткая версия: «помехи в ШИМ», а не в SPI, @Juraj


1 ответ


Лучший ответ:

1

Вы перекрещиваете провода в своем мозгу и представляете проблему там, где ее нет.

Оба ШИМ на контактах 3 и amp; 11 и tone(), используйте устройство Timer2. Только один из них может использовать Timer2 одновременно, и они оба хотят использовать его по-разному, поэтому между ними возникает конфликт.

Timer2 не имеет ничего общего с SPI. Таким образом, tone() не влияет на SPI, а PWM не оказывает никакого влияния на SPI (за исключением того факта, что из контакта 11 в любой момент может выйти только один), поскольку нет внутреннего конфликт ресурсов.

,