таьмер не работает как надо помогите

garmoska89
Offline
Зарегистрирован: 20.12.2011
#define stop_timer1 TCCR1B=0
#define start_timer1 TCCR1B = (0<<CS12)|(1<<CS11)|(1<<CS10)  //частота/64  4mkc

volatile unsigned int periodspeed ;  // период
volatile boolean we_stend = true ;  //стоим
volatile boolean period_speed = false ;  // период загружен ??????


ISR(TIMER1_OVF_vect) //прерывание по таймеру1
{   
 stop_timer1;    //остановка таймера
 we_stend = true ; //импульсов небыло больше 1 сек установлен флаг стоим
}
void setup() 
{
  //TIM_Init();//инициализация таймера
  
  pinMode(11,OUTPUT);
  pinMode(2, INPUT);  //Вход датчика скорости
  Serial.begin(9600);
  attachInterrupt(0, speedd, RISING);
}

void loop() 
{
 digitalWrite(11,LOW);
 delay(200);
 digitalWrite(11,HIGH);
 Serial.println(periodspeed);
 }

 void  speedd()    //прерывание по датчику скорости
{   
  stop_timer1;
  if(we_stend == false) periodspeed=TCNT1 , period_speed = true; //если не стоим сохраняется период
  TCNT1=0;          //сброс счетчика таймера1
  start_timer1;     //запуск нового цикла
  we_stend = false; //едем
  }
 void TIM_Init(void)  
 {
   stop_timer1;
   TCCR1A=0 ;
   TCNT1 = 0; 
   TIMSK1 = (1<<TOIE1);   //разрешить прерывание по переполнению таймер1
   }

 

garmoska89
Offline
Зарегистрирован: 20.12.2011
65
65
65
66
65
65
65
65
66
65
65
65
66
66
66
66
65
66
66
66
67
garmoska89
Offline
Зарегистрирован: 20.12.2011

мне нада сколка милисеконд от 0 то 1

garmoska89
Offline
Зарегистрирован: 20.12.2011

volatile unsigned int periodspeed ;  // период
volatile unsigned int timer1,timer2 ;  // период



void setup() 
{
  //TIM_Init();//инициализация таймера
  
  pinMode(11,OUTPUT);
  pinMode(2, INPUT);  //Вход датчика скорости
  Serial.begin(9600);
  attachInterrupt(0, speedd, RISING);
  timer1=millis();
}

void loop() 
{
 digitalWrite(11,LOW);
 delay(400);
 digitalWrite(11,HIGH);
 Serial.println(timer2);
 }

 void  speedd()    //прерывание по датчику скорости
{   
  timer2=millis();
  timer2=timer2-timer1;
  timer1=millis();
}

 

 

garmoska89
Offline
Зарегистрирован: 20.12.2011

я решил проблему так что думаьте

garmoska89
Offline
Зарегистрирован: 20.12.2011
void  speedd()    //прерывание по датчику скорости
{   
  timer2=millis();
  timer2=60000/(timer2-timer1);
  //delay(1000);
  
  detachInterrupt(0);
  attachInterrupt(0, speedd2, FALLING);
}
void  speedd2()    //прерывание по датчику скорости
{ 
 timer1=millis(); 
 detachInterrupt(0);
 attachInterrupt(0, speedd, RISING);
}

 

Araris
Offline
Зарегистрирован: 09.11.2012

Поток сознания ).

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

сам спрашиваю сам отвечаю. сам над своими шутками смеюсь))