Использовать SD-карту, пока контакт 11 используется для ШИМ

На Arduino Uno Rev3 я только что запустил демо-версию speaker_pcm, которая использовала TIMER1 и TIMER2 для генерации ШИМ-сигнала. Однако это означает, что выводы 3, 9, 10 и 11 больше не могут использоваться; согласно документации:

Takes over Timer 1 (16-bit) for the 8000 Hz timer. This breaks PWM
(analogWrite()) for Arduino pins 9 and 10. Takes Timer 2 (8-bit)
for the pulse width modulation, breaking PWM for pins 11 & 3.

Я хотел изменить программу так, чтобы WAV-данные считывались с SD-карты. Однако вот что написано в документации к библиотеке SD.h:

The communication between the microcontroller and the SD card uses SPI,
which takes place on digital pins 11, 12, and 13 (on most Arduino boards)

Это означает, что и SD.h, и speaker_pcm хотят использовать контакт 11, и требование использовать эти контакты диктуется аппаратным обеспечением. Полагаю, что это столкновение создаст проблемы.

Есть ли способ заставить это работать? Можно ли как-то переключаться между чтением SD-карты и воспроизведением звука (по сути, программным мультиплексированием)? Или конфликт использования контактов не будет проблемой?

, 👍0


1 ответ


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

3

Программа, на которую вы ссылаетесь, не занимает контакты 3, 9, 10 и 11, она берет на себя управление таймером 1 и таймером 2, которые используются для обеспечения возможности ШИМ на этих пинах. Это означает, что вы не можете выполнить analogWrite() на этих пинах. больше, но вы все еще можете использовать их для других целей, включая SPI доступ к SD-карте.

Однако обратите внимание на эту строку кода:

int speakerPin = 11; // Может быть 3 или 11, два выхода ШИМ подключены к таймеру 2

Конечно, это приведёт к конфликту с портом SPI, использующим контакт 11 как MOSI. Вы можете исправьте этот конфликт, просто установив speakerPin на 3 вместо 11.

,