Как изменить контакт выбора ведомого устройства по умолчанию (цифровой контакт 10) на Arduino UNO R3 для связи по SPI?

В настоящее время я работаю над проектом на базе Arduino. Мой проект требует сопряжения 6 серводвигателей и модуля SD-карты с моим Arduino UNO. Проблема в том, что мне нужны все шесть контактов PWM для шести сервоприводов (включая контакт 10), которые по умолчанию являются контактом выбора ведомого для связи SPI. Я не хочу использовать программный ШИМ на цифровом выводе. Я не смог найти никаких ресурсов о том, как изменить вывод SS по умолчанию на любой другой вывод. Любая помощь в этом отношении будет высоко оценена. Спасибо!

, 👍0

Обсуждение

Кроме передачи другого аргумента в SD::begin()?, @Ignacio Vazquez-Abrams

Хм, я думал, что любые выводы GPIO можно использовать для выбора ведомого., @Long Pham

контакт 10 - это CS, если Atmega 328 является ведомым устройством SPI. если Atmega является ведущим, контакт 10 должен быть выведен, иначе чип переключается на подчиненный. ШИМ выводится, @Juraj


1 ответ


1

Просто объявите его и используйте:

byte ssPin = 7; // или любой другой вывод, избегайте 0,1, оставьте их для Serial()
byte defaultSS = 10; // 53 на 2560

pinMode (ssPin, OUTPUT);
digitalWrite (ssPIN, HIGH); // типичное выключенное состояние выбора ведомого устройства
pinMode (defaultSS, OUTPUT);  // 10 ДОЛЖЕН быть выходом, чтобы устройство было ведущим SPI (328P)
SPI.begin(); // по умолчанию скорость 4 МГц, MSBFIRST
// заботится о SCK, MISO, MOSI, не нужно определять/объявлять их

digitalWrite (ssPin, LOW);
SPI.transfer (ledData, 0xAA); // пример данных, поступающих на устройство
digitalWrite (ssPin,  HIGH);
,

«Проблема в том, что мне нужны все шесть выводов ШИМ для шести сервоприводов». Библиотека Servo.h может управлять 12 сервоприводами на Uno и любым выводом, а не только выводом ШИМ. Проверьте это. Сервоприводам нужен импульс шириной 1-2 мс (от 1000 до 2000 мкс), возникающий каждые 20 мс (50 Гц), что на самом деле не является ШИМ. (1 мс = полный оборот в одном направлении, 1,5 мс = полный оборот в другом направлении, плюс-минус несколько мкс). Бьюсь об заклад, это можно было бы создать даже с помощью техники Blink без задержки, 50 Гц довольно медленно., @CrossRoads