Может ли вывод быть нейтральным, а не высоким или низким?

Я пытаюсь найти способ управления мини-mp3-плеером DFplayer с помощью ADkeys.
Поскольку у меня есть только два или три файла для воспроизведения с фиксированной громкостью, мне проще использовать ADkeys. https://wiki.dfrobot.com/DFPlayer_Mini_SKU_DFR0299#target_4

Допустим, я хочу использовать сегмент 1 — сегмент 3 (файл MP3 1 — файл MP3 3). Затем я подключал резистор (или не подключал его в сегменте 1) между ними и к трем контактам на Arduino.
Но как сделать пин нейтральным, чтобы он не срабатывал все сразу?
Насколько я могу прочитать, контакты заземлены в Arduino, если не «высоко».

, 👍0

Обсуждение

Вы имеете в виду "высокий импеданс"?, @Edgar Bonet

@EdgarBonet Я думал, что максимум 5 вольт, а минимум заземлен. Извините за путаницу., @Andreas


2 ответа


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

3

В данном случае вы говорите об «открытом сливе». Обычно, как вы правильно заметили, с выходами у вас есть либо ВЫСОКИЙ, либо НИЗКИЙ, что эффективно соединяет выходной контакт с +5 В или GND соответственно.

Вместо этого вы запрашиваете Open Drain. В этом случае контакт либо «активен», и в этом случае он соединяет его с GND, либо «неактивен», и в этом случае он отключен (почти) от чего бы то ни было.

Большинство 8-разрядных плат Arduino не имеют возможности Open Drain на своих выводах ввода-вывода (хотя некоторые более продвинутые 32-разрядные платы имеют), но ее достаточно легко эмулировать в программном обеспечении.

Вы можете эмулировать его, используя логику "Tri-State". Это логика, в которой, наряду с ВЫСОКИМ и НИЗКИМ, у вас есть «Высокий импеданс» или «HI-Z». HI-Z почти такой же, как «неактивный» Open Drain. На Arduino HI-Z — это то же самое, что и INPUT.

Итак, вы можете подражать ему:

  • Чтобы активировать пин, установите его в положение OUTPUT и LOW
  • Чтобы деактивировать пин, установите для него значение INPUT.

Например, чтобы "нажать" одну из ваших кнопок на 100 мс, вы можете:

pinMode(4, OUTPUT);
digitalWrite(4, LOW);
delay(100);
pinMode(4, INPUT);
,

Я понимаю! Таким образом, установка вывода на ввод означает, что он ожидает ввода, поэтому это не так. Это умно!, @Andreas

@Andreas На самом деле технически контакт *всегда* «ждет» ввода. Установка его в режим INPUT просто отключает схему драйвера вывода и позволяет ему «видеть» внешний мир., @Majenko


1

Ваш рисунок, похоже, пытается обеспечить аналоговые уровни для мини-плеера DF.

В этом случае вы можете использовать два выхода ШИМ от Arduino с RC-фильтром нижних частот, чтобы сгладить ШИМ до уровня постоянного тока. (вывод Arduino к резистору 10K, конденсатор 4,7 мкФ к заземлению, после этого соединение конденсатора и резистора идет к миниплееру DF).

Затем

analogWrite(pin, 128); // с выводом 3,5,6,9,10,11 на Uno, например

для вывода 2,5 В на DF Miniplayer. Точно так же 64 будет около 1,25 В, а 192 — около 3,75 В. Другие уровни легко получить.

,

Спасибо за ваш ответ, но я думаю, что вы что-то упустили. Цепь подключена к земле, а не к положительному концу. Или я вас неправильно понял?, @Andreas

В DF Miniplayer есть внутренний подтягивающий резистор, да? Таким образом, подключение резисторов разного номинала от вывода к Gnd через переключатель создает делитель напряжения и приводит к разным напряжениям на выводе. Чем это отличается от непосредственного управления контактом напряжением? Установите несколько резисторов, измерьте напряжение при нажатии. См. 3.5 Руководства, чтобы узнать, что делают кнопки https://github.com/Arduinolibrary/DFPlayer_Mini_mp3/raw/master/DFPlayer%20Mini%20Manual.pdf, @CrossRoads

Честно говоря, я не знаю. Я понятия не имею, что такое внутренности и чем они отличаются. У меня нет знаний. Я вижу преимущество вашего ответа, если он работает, но поскольку мне нужно только два или три, я могу просто использовать отдельные контакты., @Andreas