Jump to content
brusel

Помощь с кодом

Recommended Posts

Posted (edited)
4 hours ago, Yurkin2015 said:

Никуда не потерялось - просто система не чувствует короткие нажатия

Совершенно верно! Любая борьба с дребезгом основана на том факте, что система попросту не замечает пропуски "опросов", потому как делает их с достаточно высокой (для человека) скоростью. Разницу между 100-й и 200-й миллисекундой практически никто не заметит. И это верно независимо от того, при помощи какого алгоритма ведется борьба с дребезгом. Даже в алгоритме @IMXO , столь навороченном, что не всякая программа основной цикл имеет подобной сложности, все равно принцип действия остается прежний - если что-то пошло не так, событие не генерируется, т.е. пропускается, игнорируется.

Edited by ARV

Share this post


Link to post
Share on other sites
8 hours ago, IMXO said:

куда потерялось нажатие

а вот скажи, ты сам реально в состоянии своим пальчиком нажать кнопку и отпустить ее ровно через 121 мс? и при этом точно попасть, чтобы обе проверки пина дали отрицательный результат?

Share this post


Link to post
Share on other sites

Итак. Начнем. 

  1. Импульсная помеха. Во-первых, импульсные помехи довольно короткие. А читаем мы раз в 100 мс. Один раз, каждые 100 мс. И вероятность того, что МК зафиксирует ее ничтожно мала. Особенно если учесть, что линия имеет подтяжку (лично я всегда подтягиваю линию к + питания). И подтяжку можно сделать довольно жесткую.
  2. Звон контактов. При опросе раз в 100 мс вообще не является проблемой. При опросе будет детектирован только первый фронт. Все последующие изменения фронта будут оказывать влияние на работу программы только через 100 мс, не раньше. Т.е. звон никак не может повлиять на работу программы.

У меня спокойно работают кнопки в блоках, где куча импульсных помех. И ложных срабатываний нет. А если я знаю, что кнопки будут вынесены на проводах и жгут будет проходить рядом с силовой частью блока, то ставлю оптопары. Во-первых, они срабатывают довольно медленно и не пропускают импульсные помехи, во-вторых, защищают МК от этих самых помех. Так что @IMXO, ваш способ подавления дребезга избыточен и ничего по сути не дает.

Share this post


Link to post
Share on other sites

Высококачественные конденсаторы Panasonic для надежности вашей электроники!

Электролитические алюминиевые конденсаторы Panasonic отличаются повышенной надежностью, длительным сроком службы, низким импедансом и выдерживают большой ток пульсаций, в то время как семейства полимерных конденсаторов Panasonic SP-CAP, POSCAP, OS-CON и HYBRID характеризуют сверхнизкий ESR и увеличенная емкость, работа при высоких напряжениях и в расширенном температурном диапазоне. Приобретая продукцию Panasonic, вы гарантированно получаете самое передовое решение для ваших задач. Для облегчения вашего выбора, мы подготовили подборку полезных материалов.

Читать статьи

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

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

Quote

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

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

вот  об этом и речь , один ставит задержку 50мс , второй 100 , третий 300, только забывают описать в особенностях работы, что кнопки быстро нажимать низя... 

19 minutes ago, BARS_ said:

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

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

 

Share this post


Link to post
Share on other sites
36 minutes ago, IMXO said:

одобный алгоритм используется в RTOS

В RTOS вообще отдельная тема. Там в принципе проблематично сделать опрос кнопок раз в 100 мс. Достаточно понимать физику процессов и работу МК, дабы не усложнять код

Share this post


Link to post
Share on other sites
                     

Вебинар "Как создать BLE-устройство на базе новейшего беспроводного микроконтроллера STM32WB55"

27 ноября 2019 года компания КОМПЭЛ приглашает разработчиков, технических руководителей и энтузиастов беспроводной связи на вебинар, посвященный новинке 2019 года – мультипротокольному беспроводному микроконтроллеру STM32WB55, который позволяет создавать устройства на базе стандартов BLE 5.0; BLE Mesh; 802.15.4/ZigBee и Thread. На вебинаре мы покажем, как с помощью привычных инструментов STM32Cube и STM32CubeMX можно создать свое первое, надежно работающее BLE-приложение.

Зарегистрироваться на вебинар

On 25.07.2019 at 08:04, BARS_ said:

Значит неправильно настройки заданы. Пауза должна быть 45 секунд. И вообще, на кой для такой простейшей задачи целый МК?

проверял в протеусе пауза работает 7-8 секунд, как раз то что надо.

Задача простая - управлять реле которое включится на 7-10 сек и отключится.

Идеальный вариант  добавить потенциометр для регулировки таймера. Может поможете с кодом, а то я пока не шарю. Данный пример где-то нашел и пробую.

Share this post


Link to post
Share on other sites
17 minutes ago, brusel said:

проверял в протеусе пауза работает 7-8 секунд, как раз то что надо.

Вот только в железе она будет 45 секунд.

Share this post


Link to post
Share on other sites
Just now, BARS_ said:

Вот только в железе она будет 45 секунд

Не факт :) При таком-то уровне понимания, как она формируется...

Share this post


Link to post
Share on other sites

aStudio 6 ругается на code уважаемого IMXO

Error    1    stray '\357'            lesson_button_type_0719.c 

на строчку:

 if( (PINB & (1<<BUTTON1)) == 0 ){
       m_Batton.new1=1;

не подскажете причину

Share this post


Link to post
Share on other sites

Отсутствие знаний языка Си. Других причин нет.

Share this post


Link to post
Share on other sites
3 часа назад, Wawchuk сказал:

не подскажете причину

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

Share this post


Link to post
Share on other sites

 всю прогу перенабрать вручную?

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

Share this post


Link to post
Share on other sites
5 часов назад, Wawchuk сказал:

aStudio 6 ругается на code уважаемого IMXO

Error    1    stray '\357'            lesson_button_type_0719.c 

на строчку:

в приведенном коде ваапче нет такой строки. и тем более в коде не было битового поля new1 , не говоря уже об элементарных синтаксических ошибках .

вы вообще че из кода сделать хотите?

Share this post


Link to post
Share on other sites

количество ошибок (error после компиляции) было еще больше

после изменения на m_Batton.new1=1; во всем листинге уменьшилось

И я извиняюсь если своим невежеством в знаниях обидел кого то.

Просто интересный вопрос дребезга ....Всего лишь скопировал ваши вложения и скомпилировал

и все , не получилось без ошибок.

 

 

Share this post


Link to post
Share on other sites

может написал что-то не так , у меня этот код компилируется.

Share this post


Link to post
Share on other sites

А у меня щас ссылается на строки:

1.struct button_type {.....

2. if( (PINB & (1<<BUTTON1)) == 0 ){
       m_Batton.new=1;

и выдает error

Error    1    stray '\357' in program    lesson_button_type_0719.c    22    8    lesson_button_type_0719
 

вот и весь вопрос.

 

Share this post


Link to post
Share on other sites

чел, в этой строчке нет фигурной скобки, откуда ты ее взял?

Share this post


Link to post
Share on other sites
2 часа назад, IMXO сказал:

может написал что-то не так , у меня этот код компилируется.

1. переустановил aStudio6

впустую

2.заменил  на  if(! (PINB & (1<<BUTTON1)))

все сшилось без error

еще на макетке попробую как в жизни))

спс

Share this post


Link to post
Share on other sites

Учебник по Си скачать не забудь...

Share this post


Link to post
Share on other sites

Пришлось добавить еще одну кнопку "СТОП". Код ниже. Прошил тиньку, на макетке вроде работает, пауза 8 сек.

#define F_CPU 1200000UL
#define OUT PB2
#define OUT10 PB0
#define BUT_Start PB4 
#define BUT_Stop PB3 
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>


// Обработчик прерывания PCINT0
ISR(PCINT0_vect)
{
   _delay_ms (60); // антидребезг (использовать задержки в прерываниях некошерно, но пока и так сойдёт)
  if  ((PINB & (1<<BUT_Stop)) == 0) // если нажата кнопка
  {
    PORTB &= ~((1<<OUT)|(1<<OUT10)); //выкл.
  }
}

int main(void)
{
  // Пины кнопок
  DDRB &= ~((1<<BUT_Start)|(1<<BUT_Stop)); // входы
  PORTB |= (1<<BUT_Start)|(1<<BUT_Stop); // подтянуты
  // Пин светодиода
  DDRB |= (1<<OUT)|(1<<OUT10); // выход
  PORTB &= ~((1<<OUT)|(1<<OUT10)); // выключен
  
  GIMSK |= (1<<PCIE); // Разрешаем внешние прерывания PCINT0.
  PCMSK |= (1<<BUT_Stop); // Разрешаем по маске прерывания на ногах кнопки 
  sei(); // Разрешаем прерывания глобально
  
    while (1) 
    {
        _delay_ms (60); // антидребезг
        if ( (PINB & (1<<BUT_Start)) == 0 )    // если нажата кнопка
          {
          PORTB |= ((1<<OUT)|(1<<OUT10));           //вкл
          _delay_ms (8000);                       // пауза 
          }
          PORTB &= ~(1<<OUT10);          //выкл         
    }
}

Что нужно: кнопка "Стар"т сразу включает 2 реле, одно из которых отключается через 8-10 сек. Второе остается включено пока не нажата кнопка "Стоп".

Если кто-то подскажет  как улучшить код, чтобы не было сбоев, буду очень благодарен.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
4 часа назад, brusel сказал:

Что нужно: кнопка "Стар"т сразу включает 2 реле, одно из которых отключается через 8-10 сек. Второе остается включено пока не нажата кнопка "Стоп".

а что нужно когда одновременно нажаты "Старт" и "Стоп" ? а что делает твой код в этой ситуяйции?

ЗЫ не уж то элементарная логика работы эмулятора реле"звезда-треугольник" вызывает такие сложности.... может это не ваше?

Share this post


Link to post
Share on other sites
12 часов назад, IMXO сказал:

.. может это не ваше?

может и не мое... и нахера такое советовать. Я и без вас знаю что мое, что не мое. Мне этот  проект нада на один раз. Не хочешь помогать - лучше промолчи.

12 часов назад, IMXO сказал:

а что нужно когда одновременно нажаты "Старт" и "Стоп" ? а что делает твой код в этой ситуяйции?

одновременно нажмают "Старт" и "Стоп"  только дебилы, я для их обработчик этого события писать не буду?

Вопрос к BARS. Помоги с таймером. мне некогда сейчас читать книжки, нада запускать станок.

 

 

Share this post


Link to post
Share on other sites
1 час назад, brusel сказал:

одновременно нажмают "Старт" и "Стоп"  только дебилы, я для их обработчик этого события писать не буду?

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

2. непосредственно к реальному применению данный прием используется при пусконаладочных работах механизмов не позволяющих вращения в обратную   сторону при их фазировке для кратковременных пусков.

и 3. кнопка "стоп" в реальных условиях может элементарно "залипнуть"

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

1 час назад, brusel сказал:

Не хочешь помогать - лучше промолчи.

даун я тебе код еще на прошлой станице привел , судя по отсутствию реакции твой моск его неасилил

Share this post


Link to post
Share on other sites
2 часа назад, brusel сказал:

нада запускать станок.

Идите запускайте в другом месте...

Тему закрываю. Буду надеятся, что у этого "специалиста" всё обломится и он не сделает опасную для жизни людей ху..ю ....

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Сообщения

    • Не выдавайте желаемое за действительное. Моё мнение основано на личном опыте прослушивания как живых инструментов так и разного типа акустики, в том числе и широщита, чужих и собственного изготовления. Ну не может диполь по узд нч превзойти фи, чвр, бп и другие фвч более высокого порядка аппроксимации Бесселя/Даттерворта. И афчх широщита  выше 1кгц оставляет желать лучшего. Об этом говорит теория и подтверждает практика. 
    • Снова интересные проблемы вылезли с трекером. Сделал человеку - проверил сам несколько раз и дома и на улицу вышел попробовал - всё ОК. Отдал хозяину - через несколько дней вернул. Неисправность такая - включаю настроенный прибор - реакция на металл есть. Оставляю на балконе включенный прибор - катушку вывешиваю на метр-полтора наружу. Через некоторое время проверяю - чувствительность резко упала и при срабатывании прибора сигнал не прерывается. Для ускорения проверки заменил другую плату в блок, до этого дома работала без проблем, поставил в корпус - проблема повторилась. Пробовал подключать катушку напрямую, питание тоже, менял динамик и подключал другую катушку. Всё повторяется. Может кто сталкивался с подобной проблемой. Плата от DesAlex a, прошивка с сайта.
    • Привет всем, вот, переделал схему усилителя, скидываю, возбуждается на ВЧ, где ставить корректирующие цепочки?  v2012..ms10 v2012..ms10 (Security copy)
    • А как тебя это лимитирует? Добавилось хлопот?
    • Всем привет. Обсуждаемый в этой теме бп, пойдет для питания бесколлекторного мотора? Мотор хочет 48В и 8А.
×
×
  • Create New...