Нужен ли микроконтроллер для того, чтобы...

prosto_andriy
Offline
Зарегистрирован: 09.12.2012

...чтобы из одного длинного импульса сделать два коротких: один - в начале (переключение по фронту длинного импульса), второй - в конце (переключение по спаду)

Схематически это выглядит так:

Подскажите пожалуйста как это можно реализовать? Есть ли какие-то микросхемы, которые могут это сделать? Или нужно писать программу для микроконтроллера?

Как проще сделать новичку? Заранее спасибо всем ответившим!

maksim
Offline
Зарегистрирован: 12.02.2012

Тут зависит от того что проще вам - паять или программировать. Так что решать вам.

Если это устройство работает при TTL уровнях (5В, 3.3В), то я бы не стал заморачиваться с постройке такого устройства на транзистрорах, конденсаторах и резисторах. Я бы взял ATtiny13 и реализовал на ней, при условии, что я это делал не раз и у меня есть программатор (собранный на дуине).
И если пользоваться дуиновскими функциями, то код выглядел бы так:

#define IN 0
#define OUT 1

void setup() 
{                
  pinMode(OUT, OUTPUT);     
}

void loop()
{
  bool state = digitalRead(IN);
  static bool state_prev;
  if(state != state_prev)
  {
    digitalWrite(OUT, HIGH);  
    delay(500);          
    digitalWrite(OUT, LOW);
    state_prev = state;
  } 
}

 

mixail844
Offline
Зарегистрирован: 30.04.2012

возможно еще проще собрать на микросхеме lm555,выбрав один из вариантов подключений как показано здесь

prosto_andriy
Offline
Зарегистрирован: 09.12.2012

maksim пишет:

Тут зависит от того что проще вам - паять или программировать. Так что решать вам.

Если это устройство работает при TTL уровнях (5В, 3.3В), то я бы не стал заморачиваться с постройке такого устройства на транзистрорах, конденсаторах и резисторах. Я бы взял ATtiny13 и реализовал на ней, при условии, что я это делал не раз и у меня есть программатор (собранный на дуине).
И если пользоваться дуиновскими функциями, то код выглядел бы так:



#define IN 0
#define OUT 1

void setup() 
{                
  pinMode(OUT, OUTPUT);     
}

void loop()
{
  bool state = digitalRead(IN);
  static bool state_prev;
  if(state != state_prev)
  {
    digitalWrite(OUT, HIGH);  
    delay(500);          
    digitalWrite(OUT, LOW);
    state_prev = state;
  } 
}

 

Большое спасибо Вам за код! А скажите пожалуйста,  как его в мелкосхему Attiny загрузить? У неё ведь нету Arduino бутлоадера, и такие команды она не понимает! Или я ошибаюсь? У меня есть USBasp, можно ли как-то загрузить через него? 

prosto_andriy
Offline
Зарегистрирован: 09.12.2012

mixail844 пишет:

возможно еще проще собрать на микросхеме lm555,выбрав один из вариантов подключений как показано здесь

Спасибо Вам за ссылку, но одного таймера серии 555 наверное  для этой задачи (формирования двух импульсов)  будет недостаточно!

Проще было бы собрать на каких-то триггерах или логических элементоах. Только я вот не знаю, какие именно лучше всего использовать.

Может кто-то из знатоков подскажет?  Заранее благодарен!

tsostik
Offline
Зарегистрирован: 28.02.2013

Прошу прощения, схему рисовать лень, попытаюсь рассказыть словами.

Ставим два одновибратора. На первый подаем входной сигнал, на второй - инвертированый входной сигнал.

Выходы одновибраторов пускаем на вход элемента "OR". С выхода получаем искомый сигнал (короткий импульс по переднему и заднему фронтам входного сигнала).

gena
Offline
Зарегистрирован: 04.11.2012

  Присмотритесь к микросхеме HCF4098BE. "Смешав" выходы отдельных одновибраторов через диоды на резисторе, можно получить желаемое.