Отвечаю подробно. В моём устройстве, управляющим мотором и RGB мне понадобился DFPlayer. Я бы мог управлять им как обычно через Rx Tx от наны. Но, учитывая, что устройство управляется по IR по прерываниям от таймера и плюс мотором я стал искать другой способ. Почитал производителя и он даёт два альтернативных способа управления плеером. Первый способ по входу ADKEY1 АЦП, где земля подаётся через резистор определённого нрминала в зависимости от вашей команды плееру. Есть и второй способ по входам IO1 и IO2. на которые надо подавать землю напрямую через кнопки, он проще, нет заморочки с резисторами, и кроме того, если идти на вариант с резисторами, то в случае замены кнопки, которая висит в воздухе, пока не нажата, ардуиной с её нулём", который не совсем ноль, а где-то 0,2-0,5 вольта, при параллельном соединении нужно подбирать резисторы более точно. Поэтому я выбрал вариант производителя с кнопками напрямую от нуля От кнопок на ноль у меня плеер работал, а вот от нулевого импульса ардуины 1 сек(эмуляция короткого нажатия) не хотел. Тогда я посмотрел осциллом и увидел, что нулевой импульс с ардуины есть, но его низкий уровень не ноль, а 1.8 в. Я удивился, ну как плеер может сажать импульс? Потому и задал свой вопрос, на который получил ответ, что моё место у параши. Пока меня подвергали остракизму, я поставил два транзистора 2N2222 на входы IO1 IO2 и всё прекрасно заработало от ардуины. Здесь я опрометчиво высказал мнение, что на входах IO1 IO2 стоит приличный конденсатор, разряжая который на землю плеер судит о том было ли короткое нажатие или длинное. В ответ получил погоняло “аналоговый маньяк”. Рабочая схема в посте #118. Но нет повести печальнее на свете, чем человек уже два месяца как начавшего изучать ардуину.
Не берите близко к сердцу. Я, и, многие новички здесь, прошли через подобное. На форуме народ простой, за пазуху за словом не лезет)). Но, если что, и помочь могут.
Дело интересное, желаю удачи
Спасибо!
Постараюсь, я до этого много поработал с ПИКами. Мне кажется здесь значительно легче.
Я уже спрашивал, но был проигнорирован. Еще раз спрошу:
Почему катод RGB-светодиода подключается к +5В?
а ты как разглядел? может это общий анод)
я ниче не вижу)
Шо ты мелешь?
Мгновенный заряд конденсатора? А ток при этом какой будет? Бесконечный? А сопротивление проводников ты как уберешь? Сверхпроводимостью? А источник тока с нулевым внутренним сопротивлением и беконечной мгновенной мощностью где возьмешь?
Если сможешь ответить на эти вопросы - можешь мгновенно заряжать любой конденсатор.
А вообще, лучше В.С. Высоцкого никто не сказал:
- Пускай живёшь ты дворником, родишься вновь — прорабом
- А после из прораба до министра дорастёшь
- Но если туп, как дерево — родишься баобабом
- И будешь баобабом тыщу лет, пока помрёшь
все, увидел)
залез в протеус, да есть CC и есть CA, мой вопрос снимается, твой открыт)
Как правило во всех схемах конденсатор заряжается от источника питания, внутреннее сопротивление которого очень мало, конечно не “мгновенно” это сленг, но очень быстро, потому что время RC, а R у источника маленькое, а вот разряжается через сопротивление за время R*C, какое сопротивление поставишь, такое время и будет.
Какой же Вы упёртый со своими конденсаторами. Нет их в этом плеере. Микроконтроллер потратит больше ресурсов АЦП на замер напряжения на пине, чем на подсчёт времени между нажатием и отпусканием кнопки.
Рассказываю как в микроконтроллерах (в частности на Ардуино) делают различие между длинным и коротким нажатием. Представьте, что где-то в недрах Ардуины есть “счётчик” который отсчитывает миллисекунды с момента запуска кода ПОСТОЯННО. Узнать значение этого счётчика можно при помощи функции millis(). В момент нажатия кнопки, т.е. при изменении состояния цифрового входа с 1 на 0, мы берём значение millis() и запоминаем его в переменную. Дальше МК может заниматься своими делами, не отвлекаясь на это. Затем при изменении входа обратно с 0 на 1 мы снова берём значение millis() и сравниваем его с ранее запомненным значением. вычислив разницу между ними - мы понимаем сколько времени была нажата кнопка.
Забудьте про конденсаторы в DF-плеере, нет их там. Там всё делается по-аналогии с Ардуино. Представьте если бы вдруг производитель/заказчик захотел сделать время нажатия не 3, а 4 секунды - ему бы пришлось в чипе изменить ёмкость. А при нормальном решении - это всего лишь изменить одну цифру в прошивке.
Выкладывайте свой код уже, мне тоже интересно.
Не спорь с людями у которых конденсаторы головного мозга.
Да ТС уже признал ошибку, а вы всё конденсаторы, конденсаторы…))
Он не признал ошибку, а признал что опрометчиво ляпнул про конденсаторы. Это не значит, что он отказался от своей идеи.
Дядя, ты бы хоть что-то прочел, прежде чем такое балоболить.
До какого значения “разряжается” при данном конкретном τ?
Законы физики утверрждают, что всего на 63.2% от Uзаряд. Идеальный конденсатор до 0 будет разряжаться бесконечно долго. Но в реальном мире существует ESR. Что не опровергает основ.
Спасибо. А то уже сам хотел попросить ссылку на али, где такой источник питания можно купить. Задумал мини-сварочник 5 вольт замутить для дачи
Не будет этого. Код секретный и выкладывать в интернеты негоже.Украдут.
Сдается мне, чей то бот. Для поддержания жизни в форуме. Как то толстовато
Приехал не так давно ко мне DFPlayer Mini, заказанный по причине существования этой темы. ))
Ну и провел я эксперимент, на результаты которого жаловался ТС.
Схема подключения:
Код, загруженный в Ардуину:
#define DFpinIO 2 // Номер пина, подключаемого к IOx
void setup() {
delay(5000); // Задержка для посмотреть на Z-состояние
pinMode(LED_BUILTIN, OUTPUT); // LED на 13 пине (для наглядности) "на выход"
pinMode(DFpinIO, OUTPUT); // Пин, подключенный к IO DFplayer (по очереди - сначала подключал к IO1, потом к IO2) "на выход"
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // "маргулим LED"
digitalWrite(DFpinIO, HIGH); // "падымаем" уровень на пине до почти +5В (не забываем про падение напряжения на защитном диоде при питании от USB)
delay(4000); // Ждём 4 секунды для "устаканить показания вольтметра"
digitalWrite(LED_BUILTIN, LOW); // "маргулим LED"
digitalWrite(DFpinIO, LOW); // "опускаем" уровень на пине до нуля
delay(4000); // Ждём 4 секунды для "устаканить показания вольтметра"
}
Результаты эксперимента:
- Напряжение на IO1 (IO2) в момент включения (или после Reset), когда еще не определены состояния пинов составило - +3.6В.
- После конфигурирования пинов и подачи на вывод D2 сигнала HIGH на выводе IO1 (IO2) напряжение составило - +4.67В.
- При подаче на вывод D2 сигнала LOW на выводе IO1 (IO2) напряжение составило - 0.00В (Ноль Вольт)!!!
В качестве измерительного прибора выступал мультиметр цифровой Mastech на пределе измерения 20В (постоянное напряжение).
Вывод:
ТС что-то где-то как-то накосячил. )))