Arduino UNO и пользовательский csPin для SD-карт

sd-card sd custom

Я подключил модуль 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. Надеюсь, это поможет кому-то еще!

, 👍0


1 ответ


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

3

Вывод 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.
,