Arduino da Timer İnterrupt Durmuyor

Başlatan berkay_91, 30 Mayıs 2021, 19:35:18

mg1980

#15
@berkay_91 ,
Biraz çalışma yaptım da sanırım Arduino'da Timer1 delay fonksiyonlarını çalıştırıyor.Kodunuzdaki delay fonksiyonları aslında çalışmıyor.Bunların yerine 1000'e kadar for döngüsü koyun.Ben biraz farklı kod ile tek butonla çalıştırdım. knt=0 olduğu halde sadece cli() fonksiyonu, knt=1 olduğu durumda da sei() fonksiyonu koydum.timer_on() fonksiyonu sadece setup içinde bir kez çalışıyor.Kodu isterseniz buraya koyarım.

berkay_91

Alıntı yapılan: mg1980 - 31 Mayıs 2021, 16:39:11@berkay_91 ,
Biraz çalışma yaptım da sanırım Arduino'da Timer1 delay fonksiyonlarını çalıştırıyor.Kodunuzdaki delay fonksiyonları aslında çalışmıyor.Bunların yerine 1000'e kadar for döngüsü koyun.Ben biraz farklı kod ile tek butonla çalıştırdım. knt=0 olduğu halde sadece cli() fonksiyonu, knt=1 olduğu durumda da sei() fonksiyonu koydum.timer_on() fonksiyonu sadece setup içinde bir kez çalışıyor.Kodu isterseniz buraya koyarım.
anladım, evet kodunuzu paylaşabilirsiniz

mg1980

//#include <avr/io.h>
//#include <avr/interrupt.h>

volatile int knt =0;

void setup()
{
  pinMode(8, INPUT_PULLUP); // Buton1
  pinMode(9, INPUT_PULLUP); // Buton2
  pinMode(13, OUTPUT); // LED
  timer_on();
}

ISR(TIMER1_COMPA_vect)
{
  digitalWrite(13, !digitalRead(13));
}



void timer_on() // Timer1 kesmesi saniyede bir çalışacak şekilde ayarlanacaktır (1 Hz)
{
  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1  = 0;
  OCR1A = 3000; //15624(1 sn).....65536???

  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS12) | (1 << CS10); /* Adımlar arasında geçen süre kristal hızının 1024'e bölümü olarak ayarlandı */
  TIMSK1 |= (1 << OCIE1A);  /* Timer1 kesmesi aktif hale getirildi */
  sei();
  
}



void loop()
{
  if(digitalRead(8) == LOW && knt==0 )
  {
    
     cli();   //timer_off();
     digitalWrite(13, 0);
     knt=1;
                //delay(1000);
     for(int i=0; i<1000; i++){
      
     }
     
  }
  
  if(digitalRead(8) == LOW && knt==1 )
  {
   sei();
   digitalWrite(13, 0);
                   //delay(1000);
   knt=0;
   for(int y=0; y<1000; y++){
      
     } 
  }
}