Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

Green
2018-01-17 23:33:50
cncserge пише:

RC фильтр тоже вариант. И ещё кучу можно придумать.

Программный RC фильтр - моновибратор (в хорошем смысле)). Проще всего.

NoName
2018-01-17 22:25:37

правильно  заметили - нужно было написать capture )

http://www.electronicwings.com/avr-atme … pture-mode


насчет умнее, ет врядли  ) есть более подходящие кандидаты

add 
поумничаем )
я сделал бы счетчик уменьшения не в рабочем цикле  loop,  а в прерывании timer compare )   
сколько там таймеров у атмела младшей модели как обычно? )

add 2 для  для таких интервалов почему бы и не задавить  частоту ) здравая идея cncserge )

cncserge
2018-01-17 19:10:01
NoName пише:
renoshnik пише:

Два типа сигнала, длительное включение от 1 секунды и до нескольких минут, короткие вспышки по 0,5 секунды.

какие timer compare? 
с такими временами вручную  контролировать свою лампочку . 
что то типа  = millis(); и не заморачиватся

например
ели лампа влючена  - то в некую переменную записать 10 мс  когда страбатывает прерывание от ноги mcu 

состояние лампа выключена  - вы до нуля доведете свой счетчик и  создадите свое событие на смену состояния
андестенд? )

например

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


typedef enum {
TIMER_EXE       = 0,
TIMER_DISABLED  = 1,
TIMER_RUN       = 2,
}TE_TIMER;


TE_TIMER programm_count_down_uint16 ( unsigned short *timer , unsigned char shift )
{
    if (*timer > 0 )
    {
      if (*timer > shift )
      {
        *timer -= shift;
        return TIMER_RUN;
      }
       else
      {
         *timer = 0;
         return TIMER_EXE;
      }
    }
  return TIMER_DISABLED;
}



interrupt  port   pin rissing led control 
https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/


led_down_time = 10; // ms 

loop 

 hw_current_system_timer  = millis();
 delta_task_timer         = hw_current_system_timer - hw_old_system_timer;
 hw_old_system_timer      = hw_current_system_timer;

 status = programm_count_down_uint16 ( &led_down_time, delta_task_timer );
 switch ( status )
 {
    case TIMER_EXE:
      // exe event 
    break;  // led disable 
 
	case TIMER_DISABLED:
    break;
    
    case TIMER_RUN:
     break;   
 }

И началось мерянье пиписьками...
RC фильтр тоже вариант. И ещё кучу можно придумать.

А вот это " какие timer compare? " к чему?
Конечно вы всех умнее я уверен!!!

renoshnik
2018-01-17 18:24:00
NoName пише:
renoshnik пише:

Два типа сигнала, длительное включение от 1 секунды и до нескольких минут, короткие вспышки по 0,5 секунды.

какие timer compare? 
с такими временами вручную  контролировать свою лампочку . 
что то типа  = millis(); и не заморачиватся

например
ели лампа влючена  - то в некую переменную записать 10 мс  когда страбатывает прерывание от ноги mcu 

состояние лампа выключена  - вы до нуля доведете свой счетчик и  создадите свое событие на смену состояния
андестенд? )

например

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


typedef enum {
TIMER_EXE       = 0,
TIMER_DISABLED  = 1,
TIMER_RUN       = 2,
}TE_TIMER;


TE_TIMER programm_count_down_uint16 ( unsigned short *timer , unsigned char shift )
{
    if (*timer > 0 )
    {
      if (*timer > shift )
      {
        *timer -= shift;
        return TIMER_RUN;
      }
       else
      {
         *timer = 0;
         return TIMER_EXE;
      }
    }
  return TIMER_DISABLED;
}



interrupt  port   pin rissing led control 
https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/


led_down_time = 10; // ms 

loop 

 hw_current_system_timer  = millis();
 delta_task_timer         = hw_current_system_timer - hw_old_system_timer;
 hw_old_system_timer      = hw_current_system_timer;

 status = programm_count_down_uint16 ( &led_down_time, delta_task_timer );
 switch ( status )
 {
    case TIMER_EXE:
      // exe event 
    break;  // led disable 
 
	case TIMER_DISABLED:
    break;
    
    case TIMER_RUN:
     break;   
 }

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

NoName
2018-01-17 18:04:35
renoshnik пише:

Два типа сигнала, длительное включение от 1 секунды и до нескольких минут, короткие вспышки по 0,5 секунды.

какие timer compare? 
с такими временами вручную  контролировать свою лампочку . 
что то типа  = millis(); и не заморачиватся

например
ели лампа влючена  - то в некую переменную записать 10 мс  когда страбатывает прерывание от ноги mcu 

состояние лампа выключена  - вы до нуля доведете свой счетчик и  создадите свое событие на смену состояния
андестенд? )

например

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


typedef enum {
TIMER_EXE       = 0,
TIMER_DISABLED  = 1,
TIMER_RUN       = 2,
}TE_TIMER;


TE_TIMER programm_count_down_uint16 ( unsigned short *timer , unsigned char shift )
{
    if (*timer > 0 )
    {
      if (*timer > shift )
      {
        *timer -= shift;
        return TIMER_RUN;
      }
       else
      {
         *timer = 0;
         return TIMER_EXE;
      }
    }
  return TIMER_DISABLED;
}



interrupt  port   pin rissing led control 
https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/


led_down_time = 10; // ms 

loop 

 hw_current_system_timer  = millis();
 delta_task_timer         = hw_current_system_timer - hw_old_system_timer;
 hw_old_system_timer      = hw_current_system_timer;

 status = programm_count_down_uint16 ( &led_down_time, delta_task_timer );
 switch ( status )
 {
    case TIMER_EXE:
      // exe event 
    break;  // led disable 
 
	case TIMER_DISABLED:
    break;
    
    case TIMER_RUN:
     break;   
 }
cncserge
2018-01-17 14:09:52

Главное суть...

renoshnik
2018-01-17 13:59:18
cncserge пише:

https://forum.arduino.ua/img/members/1803/Bezymjannyjj.png

Спасибо но это для ARM, а у меня AVR ... хотя идея понятна...

cncserge
2018-01-17 13:44:54

Bezymjannyjj.png

renoshnik
2018-01-17 13:43:07
cncserge пише:

Вот статья
http://www.gaw.ru/html.cgi/txt/doc/micros/arm/cortex_arh/5_1_4_1_3.htm
Там описано как измерить заполнение и период шима

Что-то не открывается ничего ....  :-(

cncserge
2018-01-17 13:31:41

Вот статья
http://www.gaw.ru/html.cgi/txt/doc/micros/arm/cortex_arh/5_1_4_1_3.htm
Там описано как измерить заполнение и период шима

renoshnik
2018-01-17 13:27:34
cncserge пише:

Измеряете скважность, а по ней измеряете длительность, например скважность была 80% в течении одной секунды - значит то-то, в течении 0.5 сек - значит то-то

Была такая мысль, только измерять не скважность, а просто наличие импульсов на коротком интервале времени, а потом складывать эти интервалы...

Есть у вас пример измерения скважности? (чтобы заново не изобретать велосипед...)

cncserge
2018-01-17 13:02:51

Измеряете скважность, а по ней измеряете длительность, например скважность была 80% в течении одной секунды - значит то-то, в течении 0.5 сек - значит то-то

renoshnik
2018-01-17 13:00:36
cncserge пише:

Измеряйте скважность шим.

А как это решит проблему ?
Нужно определять длительность включения ИСД, а не просто его включение ...

cncserge
2018-01-17 11:16:20

Измеряйте скважность шим.

renoshnik
2018-01-17 10:58:55

Добрый день !
Прошу помощи в такой проблеме.

Есть некий прибор с индикаторным светодиодом (ИСД). Нужно отследить интервалы включения этого светодиода.
Два типа сигнала, длительное включение от 1 секунды и до нескольких минут, короткие вспышки по 0,5 секунды.

Подключился к ИСД параллельно оптопарой, но оказалось, что ИСД питается ШИМ сигналом и поэтому получаю массу ложных срабатываний.

Ищу способ программного решения этого вопроса (измерить частоту ШИМ пока нет возможности).

Підвал форуму