Дребезг кнопки. Аппаратное решение.

malic
Offline
Зарегистрирован: 25.02.2017

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

Нарыл такую схему:

Резюки по 10КОм, кондюки по 10мФ, микросхема sn74hc14n.

Для проверки работы воткнул диод с резистором на 1КОм.

Скетч:

//Pins
const int key_list_Pin = 9;
const int led_1_Pin = 13;
const int key_esc_Pin = 11;

//key variable
boolean btn_list_status;
boolean btn_esc_status;

void setup() {
  //pins mode
  pinMode(led_1_Pin, OUTPUT);
  pinMode(key_list_Pin, INPUT);
  pinMode(key_esc_Pin, INPUT);
}

void loop() {
  btn_list_status = digitalRead(key_list_Pin);
  if (btn_list_status == HIGH) {
    digitalWrite(led_1_Pin, HIGH);
  } else { 
    digitalWrite(led_1_Pin, LOW) ;
  }
  btn_esc_status = digitalRead(key_esc_Pin);
  if (btn_esc_status == HIGH) {
    digitalWrite(led_1_Pin, HIGH);
  } else { 
    digitalWrite(led_1_Pin, LOW) ;
  }
}

В общем работает. Только диод тускло светится. Проверил GND-D13, вольтметр показал 2.4в.

Большая просьба в даташиты не посылать. Я там был, но ничего не понял. ))

malic
Offline
Зарегистрирован: 25.02.2017

Да ... в смысле ЗЫ

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

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

Вопрос-то в чем? Почему светодиод тускло светится? Дык ты же его по одной кнопке включаешь, а по другой выключаешь...

malic
Offline
Зарегистрирован: 25.02.2017

Не, я включаю и той и другой, пока нажато - горит.

Вопрос почему просадка по питанию.

У меня два варианта:

или ардуинка микруху не тянет (мне кажется маловероятно), тогда надо отдельным источником питать +5в, хотя причем тут микрушка ...

или неправильные резисторы, конденсаторы взял. В магазине дали резюки на 0.25 ватт, а кондюки 16 вольтовые.

Потом такой момент...

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

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

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

malic пишет:
Вопрос почему просадка по питанию.
О какой просадке речь? Если об этой "Проверил GND-D13, вольтметр показал 2.4в.", то возьми оссциллограф и все поймешь....

malic
Offline
Зарегистрирован: 25.02.2017

Блин ...  )) Грамотно послал ... ))

Его еще и найти где то надо. Я и осцилограф - как в басне про обезьяну и очки.

 

 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

@#$%&, я не специально. Нет там никакой просадки напряжения. Просто прямоугольные импульсы с частотой несколько сотен кГц

malic
Offline
Зарегистрирован: 25.02.2017

))

Тогда я вообще не понимаю, как моя подключенная схема может влиять на частоту, вывода pin13?

 

gena
Offline
Зарегистрирован: 04.11.2012

  Проверьте резистор (тестером), тот что на 1 кОм, соответствует ли номиналу. 

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

gena, и что будет если не соответствует?

malic, с одной кнопки выводи на один светодиод, с другой - на другой. И будет тебе щастье.

malic
Offline
Зарегистрирован: 25.02.2017

Неа, не будет ...

... так оказывается тоже не ярко горит ...

зы номиналу 1ком соответствует.

Andy
Andy аватар
Offline
Зарегистрирован: 01.01.2016

malic, в строках 26 и 28 замени led_1_Pin на led_2_Pin и вверху добавь

const int led_2_Pin = 10;

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

malic, грубо говоря, у тебя одна кнопка отвечает за горение светодиода половину времени. Нажата одна - горит 50% времени, нажато обе - горит 100% времени. Поэтому во втором случае ярче.

 

Да, и по номиналам: не 10 мФ (=10000мкФ), а 10 нФ (=0.01мкФ).

malic
Offline
Зарегистрирован: 25.02.2017

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

Я же програмно моргаю светиком. Какая ему разница, на какое событие, от какой кнопки я ему скажу HIGH?

//Pins
const int key_list_Pin = 9;
const int key_esc_Pin = 11;
const int led_2_Pin = 12;
const int led_1_Pin = 13;


//key variable
boolean btn_list_status;
boolean btn_esc_status;

void setup() {
  //pins mode
  pinMode(led_1_Pin, OUTPUT);
  pinMode(led_2_Pin, OUTPUT);
  pinMode(key_list_Pin, INPUT);
  pinMode(key_esc_Pin, INPUT);
}

void loop() {
  
  btn_list_status = digitalRead(key_list_Pin);
  digitalWrite(led_1_Pin, btn_list_status);
  
  btn_esc_status = digitalRead(key_esc_Pin);
  digitalWrite(led_2_Pin, btn_esc_status);
  
}

Цитата:

Да, и по номиналам: не 10 мФ (=10000мкФ), а 10 нФ (=0.01мкФ).

да, я опечатался

Цитата:

malic, грубо говоря, у тебя одна кнопка отвечает за горение светодиода половину времени. Нажата одна - горит 50% времени, нажато обе - горит 100% времени. Поэтому во втором случае ярче.

А вот это, я видимо завтра, возьму пузырь и буду думать думу )). Я так понял Andy мне пытается про это же сказать а я в силу своей малограмотности пока понять не могу ...

malic
Offline
Зарегистрирован: 25.02.2017

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

Одна кнопка включала светик, а вторая тут же выключала.

Осцилограф, осцилограф... ))

ХВОСТ!

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

malic пишет:

Одна кнопка включала светик, а вторая тут же выключала.

зачем ты так сделал?