Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » STM32 & STM8 » Вопросы » таймер 1 режим захвата


таймер 1 режим захвата

Сообщений 31 страница 43 из 43

31

HHIMERA написал(а):

Запрет прерываний... это уже последний рубеж...

Спасибо за проявленный интерес (помощь, участие и т.д. и т.п.), но мне кажется еще рановато оптимизацией заниматься. Еще коду писать...
А как можно заменить while( button2_in == 0 ){tick++;} ? Если только {tick++;} заменить на счет таймером. Но какой в этом смысл? При тех же условиях ( "определённых" как я понимаю отваливание подтяжки высокоомной, либо пробой пина. Или еще есть варианты?) риск зависнуть на этой строчке остается. Мне кажется таймаут только поможет. При чем, если выход по таймауту, то ошибка - все стопаем и выдаем ошибку.

Отредактировано RA (2018-02-02 18:50:12)

32

Наверняка добавить счётчик таймаута внутрь условия + логическое или с эвентом кнопки. При выходе из блока проверяем таймаут - если 0 сбрасываем тики..

33

dosikus написал(а):

+ логическое или с эвентом кнопки

Не понял.

34

RA написал(а):

Не понял.


Не привыкну ни как на смарте код строчить.

Код:
time_out =MaxWait;
while( !button2_in || time_out-- ){tick++;}
 if(!time_out)
       {
         tick=0;
         error_flag=xxx;
        }

35

dosikus написал(а):

Не привыкну ни как на смарте код строчить.

В коде стало все понятно.

Отредактировано RA (2018-02-04 00:04:43)

36

Сделал так

Код:
unsigned int pad_chg_time( unsigned char number )
{
  unsigned int tick = 0;
  unsigned char time_out = wait;
  if( number == 1 )
  {
    PB_ODR_bit.ODR4 = 1; // ПИН ЗАРЯЖАЕМ ПРИТЯГИВАЯ К +ПИТАНИЯ
    PB_DDR_bit.DDR4 = 1; //ПИН НА ВЫХОД
    PB_ODR_bit.ODR4 = 0; // ПИН РАЗРЯЖАЕМ ПРИТЯГИВАЯ К ЗЕМЛЕ
    PB_DDR_bit.DDR4 = 0; // ПИН НА ВХОД
    while( ( button1_in == 0 ) || ( time_out-- ) ){tick++;}//ИЗМЕРЯЕМ ВРЕМЯ ЗАРЯДА ПИНА
    if(!time_out)
    {
      tick=0;
      flag.error_b1 = 1;
    }
  }
  if( number == 2 )
  {
    PB_ODR_bit.ODR5 = 1; // ПИН ЗАРЯЖАЕМ ПРИТЯГИВАЯ К +ПИТАНИЯ
    PB_DDR_bit.DDR5 = 1; //ПИН НА ВЫХОД
    PB_ODR_bit.ODR5 = 0; // ПИН РАЗРЯЖАЕМ ПРИТЯГИВАЯ К ЗЕМЛЕ
    PB_DDR_bit.DDR5 = 0; // ПИН НА ВХОД
    while( !button2_in || time_out-- ){tick++;}//ИЗМЕРЯЕМ ВРЕМЯ ЗАРЯДА ПИНА
    if(!time_out)
    {
      tick=0;
      flag.error_b2 = 1;
    }
  } 
  return tick;
}

o.O Так пока таймаут не досчитает, условие не выполняется. Хотя должно. И таймаут делает еще один вычет в итоге становится 0хFF, при выходе из условия.
http://s9.uploads.ru/t/W65hB.png

Отредактировано RA (2018-02-04 15:16:18)

37

RA ну так while(!button1_in && (--time_out)) tick++;

Отредактировано MasterElectric (2018-02-04 19:29:36)

38

Тогда что-то в логике блока не так.
Должно быть - или кнопка сработала или тайм-аут дотикал.
Или я нихрена не понял...

39

Ващета... я предлагал подумать над юзанием остатков таймера для кнопок...
Ну нет... так и нет...

40

dosikus написал(а):

Тогда что-то в логике блока не так.

Вообще все не так. В моей реализации таймаут лишний. Но это натолкнуло меня на мысль.

HHIMERA написал(а):

Ващета... я предлагал подумать над юзанием остатков таймера

Мысль заключается в использовании таймера 2 и 3-х каналов. :) Один шимит, два захвата. Каналы захвата прямо к площадкам кнопок, кнопки через резюки 1МОм на пин шима. Дальше думаю никому ничего объяснять не надо. Мне интересно кто-нибудь делал так? Есть что - нибудь в сети? Я не нашел, может не правильно у гугла спрашивал.
При юзании поей платы, проще захватывать портом. :) На нем только эти два бита кнопок. HHIMERA как понимаю, очень тонко намекал. Или мне показалось?

Отредактировано RA (2018-02-05 19:02:26)

41

RA Нарисуй часть схемки с кнопками, тогда уж точно будет все наглядно.

42

Как то так.http://sf.uploads.ru/t/dbief.png
Защита пинов требуется? Делители резисторы на пины?

Отредактировано RA (2018-02-10 00:37:23)

43

Переделал все. Понимаю что не по теме. Но создавать новую... нет смысла.
http://sh.uploads.ru/t/6Ha0h.png
Мне дико не нравится включатель. Точнее его расположение в схеме. Отключает - включает аккумулятор. Но ничего другого придумать не могу. Просится включить его на вход EN микрухи питания st1s10, но тогда при включении usb не будет контролироваться заряд аккума.

Отредактировано RA (Вчера 15:09:32)


Вы здесь » Микроконтроллеры » STM32 & STM8 » Вопросы » таймер 1 режим захвата