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

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

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


Вы здесь » Микроконтроллеры » 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 (2018-02-18 15:09:32)


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