8 Ekim 2026 Perşembe


Programlama Kodları

//AÇIKLAMA
//Bu uygulamada Arduino'nun 5. pininden analogWrite() komutu ile PWM sinyali üretip,
//Arduino'nun 8. pininden Timer1 yakalama kesmesi ile frekansın kaç olduğu hesapladık.
//Uygulamayı fiziksel Arduino'da yaptık.
//Kesme alt programları içerisinde seri port ekranına yazdırma işlemi yapılmamalıdır.
int tasma_sayisi, i = 0;
unsigned int T, T1, T2, Frekans;
void setup()
{
  Serial.begin(9600);
  pinMode(8, INPUT);    //ICP1 girişi
  pinMode(5, OUTPUT);   //PWM çıkışı

  cli();
  TCCR1A = 0;
  TCCR1B = 0;
  TCCR1B |= (0 << CS12) | (0 << CS11) | (1 << CS10);  //prescaler 1 yapılıyor
  TCNT1 = 0;  //Timer sayaç başlangıç değeri
  TIFR1 |= (1 << ICF1);     //giriş yakalama bayrağı temizlendi

  //Timer1 giriş yakalama kesmesi ayarları
  TCCR1B |= (1 << ICES1);   //ICES1=0 ise; düşen kenar. ICES1=1 ise yükselen kenar
  TIMSK1 |= (1 << ICIE1);   //Timer1 giriş yakalama kesmesi aktif edildi
  TCCR1B |= (1 << ICNC1);   //Gürültü önleyici aktif edildi.

  //Timer1 taşma kesmesi ayarları
  TIMSK1 |= (1 << TOIE1); //Overflow kesmesi aktif edildi

  sei();
}

void loop()
{
  analogWrite(5, 127);
  Serial.print("Frekans = ");  Serial.print(Frekans);  Serial.println(" Hz");
}

ISR(TIMER1_CAPT_vect)
{
  if (i == 0)
  {
    T1 = ICR1;
    i++;
  }
  else
  {
    T2 = ICR1;
    T2 = (T2 + (65536 * tasma_sayisi));
    T = T2 - T1;
    if (T != 0)
    {
      Frekans = 16000000 / T;
    }
    else if (T == 0)
    {
      Frekans = 0;
    }
    i = 0;
    tasma_sayisi = 0;
  }
}

ISR(TIMER1_OVF_vect)
{
  tasma_sayisi++;
}


Devre Şeması




0 comments:

Yorum Gönder

Arduino Eğitimi Konu - 7

Toplam Sayfa Görüntüleme Sayısı

Popular Posts

Yararlanılan Kaynaklar

İletişim

gokdag17@gmail.com