[решено] Эксперимент 12. Кнопочные ковбои. Подтягивающий резистор на pin 13

Тема в разделе "Arduino & Shields", создана пользователем altex, 21 окт 2014.

  1. altex

    altex Гик

    В 12 экперименте от амперки
    http://wiki.amperka.ru/конспект-arduino:кнопочные-ковбои
    используется 13 пин на вход с подтягивающим резистором.
    Интересует вопрос, разве напряжение из Vcc проходя через подтягивающий резистор не будет выходить через светодиод, распаянный на плате, на GND? Учитывая высокий импенданс на входе, и маленькое сопротивление светодиода.
     
  2. Unixon

    Unixon Оракул Модератор

    В эксперименте 12 подтяжка включена на выводе, к которому подключена кнопка, а не светодиод.
     
  3. Unixon

    Unixon Оракул Модератор

    В принципе, да, если сделать такую цепь, ток будет течь через подтяжку и светодиод. Сопротивление встроенной подтяжки 20~50k, падение напряжения на диоде 1.5~2.5V (примерно), при Vcc=5V ток будет (5-2.5)/50k=0.05mA ~ (5-1.5)/20k=0.172mA.

    p.s. оценка очень грубая, Vf у диода при таком токе будет меньше.
     
    Последнее редактирование: 21 окт 2014
  4. altex

    altex Гик

    http://c2n.me/j7VDbl.png

    Интересно, там добавили ОУ, в 3-й ревизии.
    Возможно только из-за этого на практике эксперимент 12 и работает.
     
  5. Unixon

    Unixon Оракул Модератор

    Смотрите параметр Input Bias Current у LM358, этот ток всего десятки-сотни наноампер.
     
  6. Unixon

    Unixon Оракул Модератор

    Да, интересно, на старых ардуинах "1" будет несколько просажена... как раз в запрещенную зону.
     
  7. altex

    altex Гик

    Круто, спасибо, разобрался.

    У меня сразу же второй вопрос. Аналогичный.
    Я вот пытаюсь сделать тот же эксперимент на Nucleo F401RE
    http://www.st.com/web/catalog/tools...ipf_pron_pr-nucleo_feb2014&sc=nucleoF401RE-pr

    Там схема немного отличается
    http://c2n.me/j7VXvj.png

    Тут нет никакого ОУ, а напрямую ток идёт на светодиод через резистор.
    Получается, что вот такая программа немного глючит в итоге
    Код (Text):
    #include "mbed.h"

    DigitalIn button(D13);
    PwmOut speaker(D12);

    int main() {
        button.mode(PullUp);
        int state;
        while(1) {
            printf("start\n");
            wait_ms(1000);
            speaker.period(.0003);
            speaker = .5;
            while(1) {
                state = button.read();
                if (!state) {
                    printf("button=%d\n", state);
                    break;
                }
            }
        }
    }

     
    вот такой вывод получается
    Код (Text):

    start
    button=0
    start
    button=0
    start
    button=0
    start
    button=0
    ...
     
    Причём, если добавить wait(1); перед циклом while(1) - задержку в 1 секунду, либо если убрать работу с pwm перед циклом while(1), то таких глюков почему-то не происходит.

    Теперь я думаю, что проблема именно в этом светодиоде, и для корректности нужно вообще отказаться от использования D13 на вход, так как к нему подключен этот светодиод напрямую.
     
  8. Unixon

    Unixon Оракул Модератор

    Да, и в примере на вики лучше тоже это изменить.
     
  9. ALev

    ALev Гик

    Бррррр, не успеваю :)) Всё сделаю :) Спасибо за участие!