класс титановый велосипед для тактовой кнопки.

Megawollt
Offline
Зарегистрирован: 06.12.2015

Объясните пожалуйста как правильно использовать класс в прерывании? Вместо кнопки - датчик Холла

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Megawollt пишет:

Объясните пожалуйста как правильно использовать класс в прерывании? Вместо кнопки - датчик Холла

какой смысл в прерывании, если все его преимущества убьёт класс?

Megawollt
Offline
Зарегистрирован: 06.12.2015

Смысл в том, что за один проход через датчик счётчик считает не +1, а накидывает сразу несколько единиц, причем в прерывании тоже

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Megawollt пишет:

Смысл в том, что за один проход через датчик счётчик считает не +1, а накидывает сразу несколько единиц, причем в прерывании тоже

не епи мне мосг - подключай свой датчик Холла вместо кнопки штатным образом без прерываний.

Megawollt
Offline
Зарегистрирован: 06.12.2015

считает по 4 единицы за проход

Megawollt
Offline
Зарегистрирован: 06.12.2015

А если требуется нажатие двух кнопок, то для одной кнопки надо .s , а для втрой click_down?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Megawollt пишет:

А если требуется нажатие двух кнопок, то для одной кнопки надо .s , а для втрой click_down?

напиши код примера - я не понимаю, что ты хочешь.

ты уже задавал что-то подобное - тебе ответили #289

if(!B_1.s&&!B_2.s)Serial.println("BOUTH BUTTONS PRESSED");

Megawollt
Offline
Зарегистрирован: 06.12.2015

Это я понял. А если надо с удержанием?

if(!B_1.s&&!B_2.retention)Serial.println("BOUTH BUTTONS PRESSED");

Так?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

Megawollt пишет:

Это я понял. А если надо с удержанием?

if(!B_1.s&&!B_2.retention)Serial.println("BOUTH BUTTONS PRESSED");

Так?

Megawollt пишет:

А если требуется нажатие двух кнопок, то для одной кнопки надо .s , а для втрой click_down?

а, если определиться со своими хотелками, проверить и если не работает - задавать сюда вопросы?

*я кому говорил?! #279 как нужно адекватно себя вести в этой теме? тебя обязательно матом крыть нужно?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

перед публикацией кода класса, который автоматически определяет pullUp или pullDown тип подтяжки пина кнопки при включении устройства и которому едино, куда замыкается кнопка - на землю или питание, хотел обратить внимание подписчиков на схемотехническую ошибку рекомендуемого подключения кнопки, которую я не заметил.

итак - типо, расово правильная схема #126, оказалась неправильной.

при включении питания, схема будет делать клик. ¯\_(ツ)_/¯

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

схема подключения кнопки с использованием pullUp резистора подтяжки - кнопка замыкается на землю.

схема подключения кнопки с использованием pullDown резистора подтяжки - кнопка замыкается на питание.

Клапауций 234
Offline
Зарегистрирован: 24.10.2016
 
класс титановый велосипед для тактовой кнопки. (версия 2.0)
 
 
изменено:
- концепция симметричности сущностей в выборе имён переменных.
- имена переменных.
- имя файла класса.
 
новое:
- пин кнопки подключается в setup, а не во время объявления экземпляра класса.
- автоматическое определение pullUp или pullDown типа подтяжки пина кнопки.
- явное указание типа подключения кнопки.
 
подробно:
"концепция симметричности сущностей" - нажатие или отпускание кнопки симметричные события, которые порождают симметричные события.
в прошлых версиях класса симметричность соблюдена логически, но присутсвуют несимметричные понятия как "неактивность кнопки" и "неактивности при нажатии и удержании" - переменные timer и retention, в настоящей версии это "неактивность нажатой кнопки" и "неактивность ненажатой кнопки" - переменные event_inactivity_Dn и event_inactivity_Up.
т.е. изменены имена переменных на симметричные.
остальным переменным, так же, даны понятные имена.
/*типо профессионалы могут сказать: а, мы же говорили! 
отвечу: а, откуда я тогда мог знать, как сейчас я буду смотреть на окружающий меня мир и как я сейчас назову то, что я вижу сейчас?*/
 
т.к. код класса логически остался совместим с предыдущими версиями, но несовместим на уровне имён переменных и способу конфигураци пина кнопки, то файлу класса дано новое имя для удобства миграции с предыдущих версий на актуальную.
 
подключение и конфигурация пина кнопки в setup позволяет оперативно подключать/отключать кнопку к/от желаемым пинам, а так же снимает ограничение возможности объявления объектов класса в виде массива(см. пример.)
 
автоматическое определение pullUp или pullDown типа подтяжки пина кнопки работает следующим образом: после включения устройства и запуска программы сканируется логическое состояние пина, к которому подключена кнопка, на основе этой информации делается вывод о типе подтяжки.
на практике это выглядит следующим образом - не нужно вносить изменения в код, не нужно перепрошивать устройство, можно менять тип подтяжки кнопок в готовом устройстве - всегда нажатие будет нажатием, отпускание - отпусканием, а не инвертироваться, как это было раньше.
возможно смешанное подключение кнопок - часть могут замыкаться на землю, часть на питание.
кнопки автоматически приведутся к общему функциональному знаменателю.
 

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

примеры для класс титановый велосипед для тактовой кнопки. (версия 2.0):


#include <class_BUTTON_v2.h>

BUTTON Button_00;
BUTTON Button_01;
BUTTON Button_02;
BUTTON Button_03;
BUTTON Button_04;

void setup() {
Button_00.pin_auto(3); // подключение и автоматическая конфигурация пина кнопки
Button_01.pin_auto(4); // подключение и автоматическая конфигурация пина кнопки
Button_02.pin_auto(5); // подключение и автоматическая конфигурация пина кнопки
Button_03.pin_auto(6); // подключение и автоматическая конфигурация пина кнопки
Button_04.pin_auto(7); // подключение и автоматическая конфигурация пина кнопки
// или
// Button_**.pin_pullUp(pin); // подключение и явная конфигурация пина кнопки
// или
// Button_**.pin_pullDn(pin); // подключение и явная конфигурация пина кнопки
}

void loop() {

Button_00.read(); // обновление состояния кнопки
Button_01.read(); // обновление состояния кнопки
Button_02.read(); // обновление состояния кнопки
Button_03.read(); // обновление состояния кнопки
Button_04.read(); // обновление состояния кнопки

// Button_00.* - 1-я кнопка
if (Button_00.event_click_Dn)      {}
if (Button_00.event_click_Up)      {}
if (Button_00.event_click_Db)      {}
if (Button_00.event_inactivity_Dn) {}
if (Button_00.event_inactivity_Up) {}

// Button_01.* -   2-я кнопка
// Button_0n.* - n+1-я кнопка
// Button_04* -    5-я кнопка

}

экземпляры класса в массив


#include <class_BUTTON_v2.h>
#define ButtonCount 10 // количество подключенных кнопок
BUTTON Button[ButtonCount]; // массив ButtonCount экземпляров класса

byte ButtonPins[] = { 3, 4, 5, 6, 7, 8, 9,10,11,12}; // массив пинов, к которым подключены кнопки

void setup() {
for (byte i = 0; i < ButtonCount; i++) {Button[i].pin_auto(ButtonPins[i]);} // подключение и автоматическая конфигурация пинов кнопок
}

void loop() {

for (byte i = 0; i < ButtonCount; i++) {Button[i].read();} // обновление состояний кнопок

// Button[0].* - 1-я кнопка
if (Button[0].event_click_Dn)      {}
if (Button[0].event_click_Up)      {}
if (Button[0].event_click_Db)      {}
if (Button[0].event_inactivity_Dn) {}
if (Button[0].event_inactivity_Up) {}

// Button[1].* -   2-я кнопка
// Button[n].* - n+1-я кнопка
// Button[9].* -  10-я кнопка

}

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

кнопки аппаратно подключаем так #319

файл класса скачиваем по ссылке #320 и помещаем в папку в месте, где у вас хранятся прочие библиотеки.

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Клапауций 234 пишет:

снимает ограничение возможности объявления объектов класса в виде массива


Во, это хорошо. А то я сам городил своими карявыми ручками...

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

1$

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

в версии 2.0 #320 state_hard_button, state_soft_button: нажато - LOW, ненажато - HIGH

исправлено в версии 2.f:

- ненажато: LOW  0
-   нажато: HIGH 1
 
Клапауций 234
Offline
Зарегистрирован: 24.10.2016

2$

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

спасибо. вот и понадобился твой велосипед)

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

jeka_tm пишет:

спасибо. вот и понадобился твой велосипед)

Зарегистрирован: 19.05.2013

четыре года юзал дуино без кнопок?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

да  нет. свои грабли использовал))

но по классу есть предложение: сделать покороче названия. просто для удобства. проще запомнить и читать

click 
noclick 
Dclick

я пока не стал менять. дефайны добавил

#define click event_click_Dn

 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

jeka_tm пишет:

я пока не стал менять. дефайны добавил

#define click event_click_Dn

event_click_Up как обзовёшь? :D

*в общем - не рекомендую, если ты сам не являешься автором кода, то тебе сложно будет не забыть, где у нас события, где состояния, где отпускания, где нажатия.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

noclick. хотя может я идею неправильно понял. то что снопка не нажата event_click_Up даст узнать. хотя тоже самое !event_click_Dn. хотя может ошибаюсь

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

jeka_tm пишет:

noclick. хотя может я идею неправильно понял.

я в коде достаточно подробно прокомментировал все переменные и определил смысл их сущностей:

//==========================
boolean state_hard_button;   // аппаратное  состояние кнопки.
boolean state_soft_button;   // программное состояние кнопки.
boolean state_bounce;        // состояние таймера фильтра дребезга.
boolean state_inactivity_Dn; // состояние таймера неактивности   нажатой кнопки.
boolean state_inactivity_Up; // состояние таймера неактивности ненажатой кнопки.
//==========================
boolean event_click_Dn;      // событие нажатия.
boolean event_click_Up;      // событие отпускания.
boolean event_click_Db;      // событие двойного щелчка.
boolean event_inactivity_Dn; // событие неактивности   нажатой кнопки.
boolean event_inactivity_Up; // событие неактивности ненажатой кнопки.
//==========================

события, состояния:

события актуальны в течении одного цикла программы.

состояния хранятся постоянно.

============================

noclick - нет нажатия/отпускания. ну, нет и нет - какой смысл в этой переменной?

а, вот производные от noclick по времени или аппаратному состоянию пина кнопки:

//==========================
boolean state_soft_button;   // программное состояние кнопки.
boolean state_bounce;        // состояние таймера фильтра дребезга.
boolean state_inactivity_Dn; // состояние таймера неактивности   нажатой кнопки.
boolean state_inactivity_Up; // состояние таймера неактивности ненажатой кнопки.
//==========================
boolean event_click_Dn;      // событие нажатия.
boolean event_click_Up;      // событие отпускания.
boolean event_click_Db;      // событие двойного щелчка.
boolean event_inactivity_Dn; // событие неактивности   нажатой кнопки.
boolean event_inactivity_Up; // событие неактивности ненажатой кнопки.
//==========================

они присутсвуют в коде и активно используются.

jeka_tm пишет:

то что кнопка не нажата event_click_Up даст узнать. хотя тоже самое !event_click_Dn. хотя может ошибаюсь

не даст - event_click_Up не произойдёт, event_click_Dn не произойдёт - инвертируй не инвертируй.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

https://www.youtube.com/watch?v=RN0-QHZnvKk

тогда объясни такой момент: отслеживание кнопка нажата или нет. если нажата 

boolean event_click_Dn;

тут понятно. а откуда брать что кнопка не нажата? что то из этого наверно

boolean state_hard_button;   // аппаратное  состояние кнопки.
boolean state_soft_button;   // программное состояние кнопки.

зачем два вида состояния. программное состояние может отличатся от аппаратного?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

jeka_tm пишет:

тогда объясни такой момент: отслеживание кнопка нажата или нет. если нажата 

boolean event_click_Dn;

тут понятно.

не понятно:

boolean event_click_Dn;      // событие нажатия.

event_click_Dn == 1 - кнопка была нажата сейчас.

jeka_tm пишет:

а откуда брать что кнопка не нажата? что то из этого наверно

boolean state_hard_button;   // аппаратное  состояние кнопки.
boolean state_soft_button;   // программное состояние кнопки.

на выбор.

jeka_tm пишет:

зачем два вида состояния. программное состояние может отличатся от аппаратного?

так вопрос более чем странно ставить - эти состояния существуют, не зависимо от нашего желания.

программное состояние являтся производной аппаратного состояния и фильтра дребезга, поэтому отличается.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

то есть в случае переключателя достаточно считать

Button_00.read();

а затем использовать ее состояние обработанное

boolean state_soft_button;   // программное состояние кнопки.

по сути можно использовать и для кнопок и для переключателей только состояние. но в случае использования состояния и кнопки (не переключателя) будет отрабатывать многократно если зажать кнопку, а случае 

boolean event_click_Dn

только один раз при нажатии. все верно?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

jeka_tm пишет:

то есть в случае переключателя достаточно считать

Button_00.read();

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

*дальше не понял - что за "переключатели"?

jeka_tm пишет:

boolean event_click_Dn

только один раз при нажатии. все верно?

событие нажатия на кнопку всегда происходит один раз.

*рекомендую ещё раз перечитать комментарии к коду и тему.

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ок

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017
класс титановый велосипед для тактовой кнопки. (версия 3.0)
функции для класс титановый велосипед для тактовой кнопки. (версия 0.0)

https://dl.dropboxusercontent.com/u/3671035/BUTTON_v3/BUTTON_v3.zip

файлы класса, функций, описание, пример - всё в зип-архиве.

*распаковать в место, где у вас лежат остальные библиотеки.

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// пример использования BUTTON.h с TITANIUM.h
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

byte button_pin[] = {3, 4, 5, 6, 7}; // массив пинов кнопок
#define TITANIUM
#include <BUTTON.h>

void setup() {

// button_pin_auto();
   button_pin_pullUp();
// button_pin_pullDn();

pinMode(14, OUTPUT); // подсветка
digitalWrite(14, 1);
pinMode(15, OUTPUT); // пищалка
digitalWrite(15, 1);

}

void loop() {
button_read();
digitalWrite(14, !state_inactivity_Up());                   // подсветка при активности кнопок
digitalWrite(15, !(state_bounce() && state_soft_button())); // бип при нажатии кнопки
// что-то ещё делаем кнопками. например:
if (button[0].event_click_Dn) {} // если была нажата 1-я кнопка.
if (button[1].event_click_Dn) {} // если была нажата 2-я кнопка.
if (button[2].event_click_Dn) {} // если была нажата 3-я кнопка.
if (button[3].event_click_Dn) {} // если была нажата 4-я кнопка.
if (button[4].event_click_Dn) {} // если была нажата 5-я кнопка.
// что-то ещё делаем...
}

 

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

описание файла TITANIUM.h (функции для класс титановый велосипед для тактовой кнопки. (версия 0.0)).

------------
подключение:
для активации подключения файла(TITANIUM.h) нужно:
- объявить массив пинов, к которым подключены кнопки                  (byte button_pin[] = {...};)
- установить флаг TITANIUM                                            (#define TITANIUM          )
теперь после подключения класс титановый велосипед для тактовой кнопки(#include <BUTTON.h>       ) 
произойдёт генерация массива экземпляров класса размером равным количеству кнопок и появится возможность 
использовать описанные ниже функции.

----------------------
функции и их описание:

button_pin_auto()   автоматическая конфигурация пинов кнопок
button_pin_pullUp() явная pull Up  конфигурация пинов кнопок
button_pin_pullDn() явная pull Dn  конфигурация пинов кнопок

button_read()       обновление переменных массива экземпляров класса

state_hard_button()
state_soft_button()
0 - все кнопки не нажаты
1 - одна или более кнопок нажаты

state_bounce()
0 - фильтр дребезга всех кнопок не работает
1 - фильтр дребезга одной или более кнопок работает

state_inactivity_Dn()
0 - все кнопки   нажаты и неактивны
1 - не все кнопки   нажаты

state_inactivity_Up()
0 - все кнопки ненажаты и неактивны
1 - не все кнопки ненажаты

                      0 - ничего не произошло
event_click_Dn()      1 - нажата кнопка
event_click_Up()      1 - отпущена кнопка
event_click_Db()      1 - двойной клик
event_inactivity_Dn() 1 - нажатая    кнопка неактивна
event_inactivity_Up() 1 - отпущенная кнопка неактивна

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

осилил 3 страницы. тяжело читать. можно пример подробный с описанием всех функций. и у меня по прежнемы вопрос: можно использовать для переключателя? обычный клавишный переключатель который может находится долго в любом состоянии. я предпологаю можно использовать 

event_click_Dn()
event_click_Up()

но если перезагрузить устройство события переключения ведь не произошло, а состояние другое. да и автоматическая конфигурация пинов не будет работать

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

jeka_tm пишет:

осилил 3 страницы. тяжело читать.

три страницы чего тебе было тяжело читать?

jeka_tm пишет:

можно пример подробный с описанием всех функций.

список неописанных мной функций опубликуй.

jeka_tm пишет:

и у меня по прежнемы вопрос: можно использовать для переключателя? обычный клавишный переключатель который может находится долго в любом состоянии. я предпологаю можно использовать 

event_click_Dn()
event_click_Up()

можно

jeka_tm пишет:

но если перезагрузить устройство события переключения ведь не произошло, а состояние другое.

верно. и, что?

jeka_tm пишет:

да и автоматическая конфигурация пинов не будет работать

а, должна?

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

https://dl.dropboxusercontent.com/u/3671035/BUTTON_v4/BUTTON_v4.zip


//           button[ 0][ 1][ 2][ 3][ 4][ 5][ 6][ 7][ 8][ 9].***
#define BUTTON_PIN   3,  4,  5,  6,  7, 15, 11, 21, 14, 22 // pins & buttons
// #define DURATION_BOUNCE           10 // custom settings
// #define DURATION_CLICK_DB        300
// #define DURATION_INACTIVITY_DN  1000
// #define DURATION_INACTIVITY_UP 10000
#include <BUTTON.h>

void setup() {
// button_pin_auto;
   button_pin_pullUp;
// button_pin_pullDn;
}

void loop() {
button_read;
if (button[0].state_hard_button   == 1) {}
if (button[0].state_soft_button   == 1) {}
if (button[0].state_bounce        == 1) {}
if (button[0].state_inactivity_Dn == 1) {}
if (button[0].state_inactivity_Up == 1) {}
if (button[0].event_click_Dn      == 1) {}
if (button[0].event_click_Up      == 1) {}
if (button[0].event_click_Db      == 1) {}
if (button[0].event_inactivity_Dn == 1) {}
if (button[0].event_inactivity_Up == 1) {}
//....
if (button[9].state_hard_button   == 1) {}
if (button[9].state_soft_button   == 1) {}
if (button[9].state_bounce        == 1) {}
if (button[9].state_inactivity_Dn == 1) {}
if (button[9].state_inactivity_Up == 1) {}
if (button[9].event_click_Dn      == 1) {}
if (button[9].event_click_Up      == 1) {}
if (button[9].event_click_Db      == 1) {}
if (button[9].event_inactivity_Dn == 1) {}
if (button[9].event_inactivity_Up == 1) {}
//
if (state_hard_button()           == 1) {}
if (state_soft_button()           == 1) {}
if (state_bounce()                == 1) {}
if (state_inactivity_Dn()         == 1) {}
if (state_inactivity_Up()         == 1) {}
if (event_click_Dn()              == 1) {}
if (event_click_Up()              == 1) {}
if (event_click_Db()              == 1) {}
if (event_inactivity_Dn()         == 1) {}
if (event_inactivity_Up()         == 1) {}
//
}

 

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

косметические изменения имён переменных и функций

https://dl.dropboxusercontent.com/u/3671035/BUTTON_v4f/BUTTON_v4f.zip


//           button[ 0][ 1][ 2][ 3][ 4][ 5][ 6][ 7][ 8][ 9].***
#define BUTTON_PIN   3,  4,  5,  6,  7, 15, 11, 21, 14, 22 // pins & buttons
// #define DURATION_BOUNCE           10 // custom settings
// #define DURATION_CLICK_DB        300
// #define DURATION_INACTIVITY_DN  1000
// #define DURATION_INACTIVITY_UP 10000
#include <BUTTON.h>

void setup() {
// button_pin_auto;
   button_pin_pullUp;
// button_pin_pullDn;
}

void loop() {

button_read;

if (button[0].state_hard          == 1) {}
if (button[0].state_soft          == 1) {}
if (button[0].state_bounce        == 1) {}
if (button[0].state_inactivity_Dn == 1) {}
if (button[0].state_inactivity_Up == 1) {}
if (button[0].event_click_Dn      == 1) {}
if (button[0].event_click_Up      == 1) {}
if (button[0].event_click_Db      == 1) {}
if (button[0].event_inactivity_Dn == 1) {}
if (button[0].event_inactivity_Up == 1) {}
//....
if (button[9].state_hard          == 1) {}
if (button[9].state_soft          == 1) {}
if (button[9].state_bounce        == 1) {}
if (button[9].state_inactivity_Dn == 1) {}
if (button[9].state_inactivity_Up == 1) {}
if (button[9].event_click_Dn      == 1) {}
if (button[9].event_click_Up      == 1) {}
if (button[9].event_click_Db      == 1) {}
if (button[9].event_inactivity_Dn == 1) {}
if (button[9].event_inactivity_Up == 1) {}
//
if (button_state_hard()           == 1) {}
if (button_state_soft()           == 1) {}
if (button_state_bounce()         == 1) {}
if (button_state_inactivity_Dn()  == 1) {}
if (button_state_inactivity_Up()  == 1) {}
if (button_event_click_Dn()       == 1) {}
if (button_event_click_Up()       == 1) {}
if (button_event_click_Db()       == 1) {}
if (button_event_inactivity_Dn()  == 1) {}
if (button_event_inactivity_Up()  == 1) {}
//
}

 

alexbmd
Offline
Зарегистрирован: 15.01.2016

dimax пишет:

1)сам я обычно либо ставлю конденсатор  на простую кнопку,

2)либо использую переключающую кнопку и бездребезговую схему на RS-триггере.

1)  конденсатор ставится  паралельно ? его можно установить и в случае pull up и pull down ?

2) что за бездребезговая схема ?

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

слушай, ты тупил в соседней ветке - теперь здесь будешь продолжать демонстрацию кретинизма?

alexbmd пишет:

1)  конденсатор ставится  паралельно ? его можно установить и в случае pull up и pull down ?

2) что за бездребезговая схема ?

1) последовательно. в случае pull up и pull down - я запретил.

2) https://www.google.com/search?q=RS-триггер

 

 

 

alexbmd
Offline
Зарегистрирован: 15.01.2016

главное чтоб ты не тупил остальное не важно.  

кстати а супер кода 15 летней давности на турбо паскали я, или пропустил, или так и не дождался. программер всётаки слинял по англицки не выложив кода ?

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

alexbmd пишет:

кстати а супер кода 15 летней давности на турбо паскали я, или пропустил, или так и не дождался. программер всётаки слинял по англицки не выложив кода ?

в этой теме есть всё необходимое для тактовой кнопки.

alexbmd
Offline
Зарегистрирован: 15.01.2016

по поводу pull up схемы с #319  (я не электромонтажник предупреждаю сразу)

чем обусловленна именно такая схема ? ведь общепринятая схема с RC фильтром (где вначале резистор и потом конденсатор на землю) выглядит например вот так http://www.eng.utah.edu/~cs5780/debouncing.pdf  Figure 2

 

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

alexbmd пишет:

по поводу pull up схемы с #319  (я не электромонтажник предупреждаю сразу)

чем обусловленна именно такая схема ? ведь общепринятая схема с RC фильтром (где вначале резистор и потом конденсатор на землю) выглядит например вот так http://www.eng.utah.edu/~cs5780/debouncing.pdf  Figure 2

ну,.. я не знаю.

если общепринятой считается ошибочная схема, то не факт, что нужно отключать мозг. ¯\_(ツ)_/¯

перед постом #319 находится пост #318, где внезапно находится ответ на твой вопрос.

Клапауций 234 пишет:

при включении питания, схема будет делать клик. ¯\_(ツ)_/¯

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

попытка расставить точки над i

Клапауций 823 пишет:

по поводу pull up схемы с #319  (я не электромонтажник предупреждаю сразу)

я тоже не инженер, а радиомонтажник - в тред приглашаются лицензионные схемотехники с профильным образованием.

вопрос: зачем инженеры впаривают радиомонтажникам под видом схемы подключения кнопки к контроллеру схему хардварного сброса контроллера при включении питания?

External_reset.PNG

alexbmd
Offline
Зарегистрирован: 15.01.2016

Это вроде схема медленного старта а не ресета, не?

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

alexbmd пишет:
Это вроде схема медленного старта а не ресета, не?

называй как тебе желается, но если оно подключено к пину reset контроллера, то оно не может желать ничего, кроме сброса контроллера.

*полная схема здесь http://www.atmel.com/images/atmel-2521-avr-hardware-design-considerations_applicationnote_avr042.pdf там ещё диод для разрядки конденсатора при отсутствии питания.

RecommendedResetPinConnection.png

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Клапауций 823 пишет:

называй как тебе желается, но если оно подключено к пину reset контроллера, то оно не может желать ничего, кроме сброса контроллера.

Кроме ресета схема еще и не дает стартануть МП с нулевого адреса. Названия дают не только потому что делается, но и потому что в итоге получается. Если старт процессора замедляется, то схема замедленого старта. Но по мне называйте как хотите. "Головне що ци слова не прониклы у мирную жизнь"(навязчивая реклама из украинского радио)

Клапауций 823
Клапауций 823 аватар
Offline
Зарегистрирован: 13.01.2017

alexbmd пишет:
Это вроде схема медленного старта а не ресета, не?

qwone пишет:
Кроме ресета схема еще и не дает стартануть МП с нулевого адреса.

так... 
оба-два, это схема power-on-reset (POR)- сброс контроллера при включении питания.
о, чём я сказал здесь #352
 
далее я задал вопрос...
внимание! я не задавал вопрос, зачем нужен power-on-reset, как он называется па-русски и не просил цитировать украинское радио.
 
*поэтому, соберите мисли в кучку и попытайтесь ответить на мой вопрос #352 или молчите вообще.
 
Aleks_neofit
Aleks_neofit аватар
Offline
Зарегистрирован: 28.12.2016

Согласен с Клапауций   это сброс по железу - а остальное понятно

 "...Сброс уровня может быть достигнут путем использования подтягивающего резистора к линии RESET. Этот подтягивающий резистор предотвращает любые Непреднамеренный низкий сигнал, который инициирует сброс. ... Для защиты линии RESET от дополнительного шума подключите конденсатор от вывода RESET к земле. Это Не требуется напрямую, так как в AVR встроен фильтр нижних частот для устранения пиков и шумов, которые Может вызвать сброс. Использование дополнительного конденсатора является дополнительной защитой. ... Рекомендуется добавить диод защиты от электростатического разряда из RESET в VCC. Альтернативно Зенеровский диод можно использовать для ограничения напряжения RESET относительно GND..."

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Aleks_neofit пишет:

 "...Сброс уровня может быть достигнут путем использования подтягивающего резистора к линии RESET. Этот подтягивающий резистор предотвращает любые Непреднамеренный низкий сигнал, который инициирует сброс. ... Для защиты линии RESET от дополнительного шума подключите конденсатор от вывода RESET к земле. Это Не требуется напрямую, так как в AVR встроен фильтр нижних частот для устранения пиков и шумов, которые Может вызвать сброс. Использование дополнительного конденсатора является дополнительной защитой. ... Рекомендуется добавить диод защиты от электростатического разряда из RESET в VCC. Альтернативно Зенеровский диод можно использовать для ограничения напряжения RESET относительно GND..."

Aleks_neofit, я бы не стал приводить эту цитату в качестве подтверждения/объяснения чего-либо, т.к. она содержит сомнительные утверждения не касающиеся сабжа, но дискредитирующие автора.

так: "Рекомендуется добавить диод защиты от электростатического разряда из RESET в VCC."

RecommendedResetPinConnection.png

странная защита - пускать статику на питание контроллера.

на самом деле диод разряжает конденсатор С после выключения контроллера, что бы при последующем включении, когда конденсатор С не разряжен, сработал power-on-reset, который срабатывает только при разряженном конденсаторе.