Продолжительность дребезга кнопки

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем DrProg, 26 янв 2016.

  1. 9xA59kK

    9xA59kK Гик

    Про внутренний резистор: у многих МК сильно отличается внутренний подтягивающий резистор да еще и от года выпуска этого МК, поскольку требования меняются и производители это учитывают во вновь выпущенных МК. Не помню где читал, в мега8- 328, на сегодня, внутренний резистор от 20к. Просто установленный резистор(тем более если он просто подтягивающий) импульсную помеху не устранит, тем более если большого(огромного) номинала, скорее наоборот он эту помеху "пропустит".
    В данной указанной книге не заметил разнобоя и даже наоборот все последовательно изложено. Добавлю что в этой книге, в отличии от других, показана развязка по подключения к МК разного рода датчиков и много вариантов.
     
    Последнее редактирование: 30 янв 2016
  2. Onkel

    Onkel Гуру

    так и я про то же- обязательно , тем более в материале для начинающих, надо этот резистор железно ставить. Я напомню, что при прочих равных условиях напряжение помехи при подтяжке 20 кОм в 20 раз больше, чем при подтяжке 1 кОм.
     
  3. 9xA59kK

    9xA59kK Гик

    Что то я не понял, при чем тут подтяжка в 1к. Если про пример что я выше прилагал, позже ответил для чего он необходим, там про подтяжку вообще нету слов (это и на схеме видно).
     
  4. Onkel

    Onkel Гуру

    на схеме видна кнопка "открыть дверь". Согласитесь, без потдяжки схема работать не будет. Вот на схеме и видно, что помехоустойчивость этой схемы очень очень низкая и определяется встроенным резистором мк, т.е. непредсказуема.
     
  5. Unixon

    Unixon Оракул

    Еще забыли схему с диодной сборкой на каждый защищаемый вывод МК, все вместе сливающие + и - в супрессор.
     
  6. Tartuffe

    Tartuffe Нуб

    Доброго времени суток!
    Помогите, пожалуйста, разобраться с кнопкой (чтоб она была здорова!)
    В "Конспекте хакера" предложен нехитрый, как мне сначала показалось, код (кнопочный переключатель - диод и кнопка):


    #define BUTTON_PIN 3
    #define LED_PIN 13

    boolean buttonWasUp = true; // была ли кнопка отпущена?
    boolean ledEnabled = false; // включен ли свет?

    void setup()
    {
    pinMode(LED_PIN, OUTPUT);
    pinMode(BUTTON_PIN, INPUT_PULLUP);
    }

    void loop()
    {
    // определить момент «клика» несколько сложнее, чем факт того,
    // что кнопка сейчас просто нажата. Для определения клика мы
    // сначала понимаем, отпущена ли кнопка прямо сейчас...
    boolean buttonIsUp = digitalRead(BUTTON_PIN);

    // ...если «кнопка была отпущена и (&&) не отпущена сейчас»...
    if (buttonWasUp && !buttonIsUp) {
    // ...может это «клик», а может и ложный сигнал (дребезг),
    // возникающий в момент замыкания/размыкания пластин кнопки,
    // поэтому даём кнопке полностью «успокоиться»...
    delay(10);
    // ...и считываем сигнал снова
    buttonIsUp = digitalRead(BUTTON_PIN);
    if (!buttonIsUp) { // если она всё ещё нажата...
    // ...это клик! Переворачиваем сигнал светодиода
    ledEnabled = !ledEnabled;
    digitalWrite(LED_PIN, ledEnabled);
    }
    }

    // запоминаем последнее состояние кнопки для новой итерации
    buttonWasUp = buttonIsUp;
    }

    Все, вроде понятно, но случайно заметил, что если убрать "!" перед buttonIsUp в первом If, то диод все равно будет светиться после нажатия кнопки... То есть все работает, как и должно. Тогда зачем вообще этот if (buttonWasUp && !buttonIsUp) ??? Точнее зачем в нем проверять !buttonIsUp или buttonIsUp, если в любом случае программа работает внутри этого If независимо от значения buttonIsUp??? То есть в момент каждого нажатия на пине кнопки обязательно оказывается единица и контроллер почему-то принимает именно его? Именно так проявляется дребезг? И значит он носит вполне стабильный, если так можно выразится, характер?
    Или я принципиально неправильно понимаю суть процесса... :(
     
  7. Tartuffe

    Tartuffe Нуб

    Неужто никто не поможет нубу?