Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
Kesme ile ne işin var? Niye yapılandırıyorsun?
FREQ.png


Her aktif olduğunda D5'den girip kessin programı diye oluşturuyorum onu ama D5'den ne yaparsam yapayım kesmiyor bu yapılandırma biçiminde.

Şuan devreye buton bağlı.
Ve kapısı eklemedim
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
İlk aklıma gelen D2 ve D3'e bağlı dış kesme interupt mı kullanmalıydım
 

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
13,798
Kesmelik bir iş yok ortada. Sen en iyisi programı nasıl yazacağını anlat ona göre gidelim.
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
Kesmelik bir iş yok ortada. Sen en iyisi programı nasıl yazacağını anlat ona göre gidelim.
Kafam bazen geç çalışır abi :( Seninde kafanı patlatıyorum...

Frekans girişini kontrol edecek bir and gate'in 1 girişi.(A)
Benim kontrol edeceğim frekansı işlemcime transferini açıp kapatacak and gate'nin 2 girişi.(B)

İşlemcime gidecek and gate çıkışı (Q)

Ben bu Q çıkışını işlemcimin herhangi bir kesme pinine uygulayıp programın ana akışındaki gecikmeler yazdırmalar nedeniyle kaçırmamak için.

Bu kısımdan emin değilim;
1 saniye boyunca kaç defa okuduysam gelen frekansı işlemci çalışma frekansıma bölüp çıkan sonucu yazdıracağım.



not:normalde ben 2 tane kesme pini var sanıyordum yapmaya çalıştığım yöntem olsaydı 4 tane kesmeye sahip olabilirdik bunun üstüne ayrıca gideceğim.
 

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
13,798
Kesmeleri sayarak frekans ölçmeye çalışırsan, ölçebileceğin maksimum frekans birkaç kHz'i geçemez. 5 MHz ölçeceğin zaman nasıl olacak o iş? İşlemci saniyede 5 milyon kesme kaldırabilir mi? Mümkün değil.

Yapılması gereken, Atmega328 içindeki bir hardware counter'in saydırılması. 1 saniye sonunda da gate'i kapatacaksın ve sonra da counter değerini okuyacaksın.

Ha kesme nasıl işe yarayabilir? Counter limiti dolduğunda bir kesme üretilmesini sağlayabilirsin. Böylece counter'da taşma meydana geldiğini anlarsın. Ama bunun için bile kesme rutini kullanmak yerine counter status register'lerine bakarak du durumu algılamak çok daha mantıklı.
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
Kesmeleri sayarak frekans ölçmeye çalışırsan, ölçebileceğin maksimum frekans birkaç kHz'i geçemez. 5 MHz ölçeceğin zaman nasıl olacak o iş? İşlemci saniyede 5 milyon kesme kaldırabilir mi? Mümkün değil.

Yapılması gereken, Atmega328 içindeki bir hardware counter'in saydırılması. 1 saniye sonunda da gate'i kapatacaksın ve sonra da counter değerini okuyacaksın.

Ha kesme nasıl işe yarayabilir? Counter limiti dolduğunda bir kesme üretilmesini sağlayabilirsin. Böylece counter'da taşma meydana geldiğini anlarsın. Ama bunun için bile kesme rutini kullanmak yerine counter status register'lerine bakarak du durumu algılamak çok daha mantıklı.
o zaman kesme falan kullanmayıp direkt TCNT'ye yazacağım.

Hardware counter ile ilgili datasheet'de bulabildiğim tek kısım TCNT. Özel bir başlık ayrılmamış hardware counter için.
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
C++:
digitalWrite(out, HIGH);
  flg = 0;
 
  Serial.println(c);
  if(digitalRead(in) == HIGH && flg == 0){
    c++;
  }

  if(millis() - gecen >= bekleme){
    digitalWrite(out, LOW);
    flg = 1;
    c = 0;
    gecen = millis();
  }

Böyle birşey yazdım VE kapısı ekledim çalışıyor.
Ama doğru mantıkla mı yazdım emin değilim
 

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
13,798
Osiloskop ile ölç, bakalım ne kadar hassas olarak 1 s elde ediyorsun.
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
yer değiştirdim millis'i yukarı giriş okumayı aşşağı aldım ne değişti bilmiyorum ama 1040'a düştü
 

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
13,798
Burada şunu anlıyorsun, program kodu ile çok hassas zamanlama elde etme imkanı yok. Başka nasıl üretebilirsin 1 s lik bir palsi?
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
Burada şunu anlıyorsun, program kodu ile çok hassas zamanlama elde etme imkanı yok. Başka nasıl üretebilirsin 1 s lik bir palsi?
önceki projeye beyin fırtınası.
zaman kesmesi yaratarak.

delay söz konusu değil tek çekirdek işlemcimiz
 

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
13,798
Atmega328 içindeki diğer counter'i kullanarak üretebilirsin. Eğer tam üretilemiyorsa o zaman kristal frekansını değiştirmen gerekebilir.
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
Atmega328 içindeki diğer counter'i kullanarak üretebilirsin. Eğer tam üretilemiyorsa o zaman kristal frekansını değiştirmen gerekebilir.
998.27ms üretiyorum birazcık oynayarak tam 1 saniye yapabilirim bunu
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
setup:
  TCCR1A = 0;
  TCCR1B = 0;
  TCNT1  = 0;
  OCR1A = 15624;
  TCCR1B |= (1 << WGM12);
  TCCR1B |= (1 << CS12) | (1 << CS10);
  TIMSK1 |= (1 << OCIE1A);

ISR:
ISR(TIMER1_COMPA_vect){
  digitalWrite(out, LOW);
  flg = 1;
  c = 0;
}

loop:
  digitalWrite(out, HIGH);
  flg = 0;
  Serial.println(c);
 
  if(digitalRead(in) == HIGH && flg == 0){
    c++;
  }
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
Bu kapı 2.50V gerilime tepki vermiyor :mad:
Skop max +-2.50 çıkarabiliyor.

optokuplor eklemem gerekecek
 

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
13,798
Gene bir kesme görüyorum Ahmet :katil2: Kesme olmayacak, Atmega328 counter'ini bir kere yapılandıracaksın ondan sonra counter kendisi üretecek palsi. Eğer bu mümkün değilse o zaman başka çözüm bakacağız. Ama çözüm tamamen hardware olması lazım. Yazılımla yüksek frekans ölçmek için gereken çözünürlüğü yakalayamazsın.
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
Gene bir kesme görüyorum Ahmet :katil2: Kesme olmayacak, Atmega328 counter'ini bir kere yapılandıracaksın ondan sonra counter kendisi üretecek palsi. Eğer bu mümkün değilse o zaman başka çözüm bakacağız. Ama çözüm tamamen hardware olması lazım. Yazılımla yüksek frekans ölçmek için gereken çözünürlüğü yakalayamazsın.
Biraz daha datsheet bakayım
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
Gene bir kesme görüyorum Ahmet :katil2: Kesme olmayacak, Atmega328 counter'ini bir kere yapılandıracaksın ondan sonra counter kendisi üretecek palsi. Eğer bu mümkün değilse o zaman başka çözüm bakacağız. Ama çözüm tamamen hardware olması lazım. Yazılımla yüksek frekans ölçmek için gereken çözünürlüğü yakalayamazsın.
Abi TCCR1B set edip kesme kullanmasam olur mu?
 

Ahmet

Kıdemli Üye
Katılım
31 Mayıs 2021
Mesajlar
2,597
Bu abi neyce yazıyor.
DAkika 7.33
 
Last edited by a moderator:
Top