Работа с микрос. Вывод сигнала вдвое меньше длительности входящего сигнала

hanapy
Offline
Зарегистрирован: 11.04.2017

Здравствуйте! Подскажите чайнику...

Пытаюсь получить выход. сигнал вдвое меньше длительности входного.  

#define but1 1
 
 
#define LED31 5
#define LED32 6
 
 
 
bool prevValue = 0;
bool prevValue2 = 0;
 
uint32_t timeRising;
uint32_t timeRising2;
uint32_t timeStart;
uint32_t loopTime;
 
void setup() 
{
  pinMode(LED31, OUTPUT);
  pinMode(LED32, OUTPUT);
  pinvode (but1, INPUT);
   // timeRising = micros();
  //loopTime = timeRising;
}
 
void loop()
{
                                  
{
  if (prevValue == LOW && digitalRead(but1) == HIGH)
  {
    digitalWrite(LED31, HIGH);
    timeRising = micros();
    loopTime = timeRising;
        prevValue = 1;
 
  } 
  if (prevValue == 1  && (micros() - timeRising)>= (loopTime/2))
  {
    digitalWrite(LED31, LOW);
  }
  if (digitalRead(but1)== LOW && digitalRead(LED31)== LOW )
  prevValue = 0;
  loopTime =0;
}
sadman41
Offline
Зарегистрирован: 19.10.2016
hanapy
Offline
Зарегистрирован: 11.04.2017
#define but1 1
 
 
#define LED31 5
#define LED32 6
 
 
 
bool prevValue = 0;
bool prevValue2 = 0;
 
uint32_t timeRising;
uint32_t timeRising2;
uint32_t timeStart;
uint32_t loopTime;
 
void setup() 
{
  pinMode(LED31, OUTPUT);
  pinMode(LED32, OUTPUT);
  pinvode (but1, INPUT);
   // timeRising = micros();
  //loopTime = timeRising;
}
 
void loop()
{
                                  
{
  if (prevValue == LOW && digitalRead(but1) == HIGH)
  {
    digitalWrite(LED31, HIGH);
    timeRising = micros();
    loopTime = timeRising;
        prevValue = 1;
 
  } 
  if (prevValue == 1  && (micros() - timeRising)>= (loopTime/2))
  {
    digitalWrite(LED31, LOW);
  }
  if (digitalRead(but1)== LOW && digitalRead(LED31)== LOW )
  prevValue = 0;
  loopTime =0;
}

 

hanapy
Offline
Зарегистрирован: 11.04.2017

спасибо))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

hanapy, как показывается история, Вы умеете это делать. Значит, умышленно издеваетесь :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Правильно ли я понял, что Вы включаете выходной сигнал одновременно с обнаружением входного, но закочить его хотите вдвое раньше, чем закончится входной? если так, то Вам нужна машина времени, чтобы узнать когда там в будущем входной закончится.

Или я что-то не понял? Тогда объясните толком.

hanapy
Offline
Зарегистрирован: 11.04.2017

ЕвгенийП пишет:

Правильно ли я понял, что Вы включаете выходной сигнал одновременно с обнаружением входного, но закочить его хотите вдвое раньше, чем закончится входной? если так, то Вам нужна машина времени, чтобы узнать когда там в будущем входной закончится.

Или я что-то не понял? Тогда объясните толком.

получается никак? Вы, меня правильно поняли. 

Гриша
Offline
Зарегистрирован: 27.04.2014

hanapy пишет:

получается никак? Вы, меня правильно поняли. 

есть такой тип генераторов " с пред установкой" - если нам известно поведение сигнала ( ШИМ ) делаем предустановку длительности и корректирем следующее значение по прадыдущему. первая ошибка - при несовпадении длительности первого сигнала с предустановкой (невозможно спрогнозировать). Вторая ошибка (регулярная) если сигнал имеет некую известную функцию, его можно предсказать и ошибку можно посчитать. Третья ошибка - если ШИМ модулируется по закону гармонического сигнала (SIN или COS, кому что нравится) ошибка минемальна  (сигма-дельта модуляция)