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

Вебинар STM32G0 – новый лидер бюджетных 32-битных микроконтроллеров от STMicroelectronics

Компания Компэл приглашает вас 25 сентября принять участие в вебинаре, который посвящен новому семейству микроконтроллеров STM32G0. Вебинар рассчитан на технических специалистов и тех, кто хорошо знаком с семейством STM32. На вебинаре будут освоены современные методы тестирования производительности микроконтроллеров на примере самых бюджетных 32-битных семейств общего назначения STM32G0 и STM32F0 и проведено их подробное сравнение.

Подробнее

@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
                     

Литиевые батарейки Fanso в беспроводных датчиках пожарно-охранной сигнализации

Выбор подходящего элемента питания, способного обеспечивать требуемый уровень напряжения и выдавать необходимый ток на протяжении всего периода эксплуатации беспроводной пожарно-охранной системы является одной из первостепенных задач. Наиболее подходящим для этих целей элементом являются литий-тионилхлоридные элементы питания, а одним из наиболее конкурентоспособных производителей – компания Fanso, предлагающая своим клиентам продукты как универсальные, так и разработанные специально для решения конкретных задач.

Подробнее...

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 км. Короче вот ближайшие станции Интертелеком Наружная антенна елка, палюсь самодельная, сделанная как прототип этой https://intertelekom.com.ua/napravlennaya-3g-cdma-antenna-24-db/p42?   Короче это все дела не меняет какая антенна, вообщем, мое расположения и т.д. факт фактом - ночью сигнал лучше, днем хуже. Хоть со встроенной антенной модема, хоть с этой. Может здесь виновата ионосфера Земли?
    • ну то что ZTE модемы редкое китайское двухдолларовое дерьмо это и так известно, а что там за наружняя антенна и где ты ее взял это вопрос
    • Ну и как к ней подойти, на вертолете? Тут как не крути, а меньше высоты самой вышки не выйдет. А высота ее около 60 метров. Это та что за 300  Ну а остальные расположены за примерно 15-ю стенами высокоэтажных домов,  в один ряд. Эта ближе. 
    • а по маркам? кто-то любит рубиконы и ничиконы, кто-то К50, а кто-то платит страшные тыщи за удофильские поделки из золотой фольги.  я все таки собираю по схеме  только поменяв номиналы некоторых деталей (в основном конденсаторов) а тут ни конденстора по входу, ни гридлика на первой лампе не предусмотрено нет и R3 (антизвонник?).Стоит ли их ставить?   регулятор громкости тоже не хочу, я как и многие предпочитаю рулить с ПК.  
    • Перепаял мост на KBPC2510, тоже самое. Походу или это косяк в плате, не знаю, видимо пульсации на входе усиливаются и подаются на выход. На первой картинке: вход с трансформатора 8в, настроено на 5в выходного, стабилизация тока на максимум выкручена (отключена). Тот же резистор в нагрузке 130 ом. 1 канал - выход с моста с выпрямителем. 2 канал - выход с платы. 3,4 канал - затвор выходного полевика и драйн первого полевика irf510 видно что пульсации на входе порядка 100mv усиливаются и на выходе имеют уже амплитуду почти до уровня выходного. на второй картинке то же самое, только без нагрузки вобще.  
    • Ничего себе. Такая простая вещь как уровень сигнала, а они и ею могут ввести в заблуждение.   Он уверен, что находится в лепестке антенны этого суперского оператора на этой самой вышке? Он пробовал взять ноутбук под мышку (да ещё один заведомо исправный модем), пройтись и половить сигнал?
×
×
  • Create New...