Arduino UNO и пользовательский csPin для SD-карт
Я подключил модуль SD-карты к Arduino UNO
. Я хочу использовать PIN 10
для PWM DC motor control
и поэтому я подключил CS pin
напрямую к другому pin (A3).
SD-карта работает правильно, но после вызова SD.begin(A3)
она устанавливает PIN 10
в значение HIGH
!
Сразу после SD.begin(A3)
и установите этот вывод в LOW
, но в это время двигатель сделал небольшой оборот.
Я покопался в SD.cpp
и Sd2Card.cpp
, но не смог найти, где возникла эта проблема!
Любая помощь приветствуется...
Решение:
Просто вызовите SD.begin(-1)
и это не коснется PIN10
. Надеюсь, это поможет кому-то еще!
@Khalil Laleh, 👍0
1 ответ
Лучший ответ:
Вывод 10 является специальным. Это аппаратный вывод выбора микросхемы для SPI. Он является неотъемлемой частью периферийного устройства SPI в микросхеме.
Этот вывод должен быть ВЫХОДОМ для SPI, чтобы он работал как ведущий, или ВХОДОМ для того, чтобы он работал как ведомый.
Если вы меня спросите, это глупое решение Atmel, но вот так. Так что, по сути, попытка использовать SPI одновременно с ШИМ на выводе 10 «не определена» и ее следует избегать.
Используйте другой вывод для ШИМ или, если вам нужно больше выводов ШИМ, чем доступно, рассмотрите возможность использования внешней микросхемы управления ШИМ.
Просто покопавшись, чтобы узнать больше подробностей о том, как все это работает, вот что я обнаружил:
digitalWrite()
явно отключает ШИМ на выводе.- Направление контакта 10 определяет работу SPI как ведущего или ведомого.
analogWrite()
устанавливаетpinMode(OUTPUT)
.- Библиотека SD вызывает
pinMode(OUTPUT)
иdigitalWrite(HIGH)
на выводе 10.
Это означает, что:
SD.begin()
завершит любой существующий ШИМ на выводе 10.- Использование ШИМ на выводе 10 заставит вывод работать в режиме вывода, что сделает режим ведомого устройства SPI невозможным
Вы должны иметь возможность использовать ШИМ на выводе 10, если и только если:
- Вы используете
analogWrite()
после использованияSD.begin()
, и - Вам никогда не следует использовать подчиненный режим SPI.
- Режимы открытия файлов на SD-карте Arduino добавление/перезапись
- Сохранение файла .txt на SD-карту и чтение данных каждого содержимого в файл txt, а затем сохранение его в переменной
- Использование SD-адаптера 5 В в системе 3,3 В
- Проблема с открытием нескольких текстовых файлов одновременно/по порядку с использованием <SD.h>
- DFPlayer для записи на SD-карту
- STM32 и SdFat - Не удается создать файл в каталоге на SD-карте
- Как **получить** атрибуты для файлов SD?
- Попытка прочитать случайную строку с SD-карты