Programlama Kodları
//AÇIKLAMA
//Bu uygulamada analog karşılaştırma gerçekleşip ACO biti 1 olduğunda, giriş yakalama gerçekleşti.
//Ardından kesmeye gidilmesi sağlandı. Uygulama fiziksel Arduino’da yapıldı. Fakat fiziksel Arduino'da
//deneme yapılırken kullanılan potansiyometrede, dalgalanmalar ya da lineer olmayan voltaj değişimleri
//olması nedeniyle karşılaştırma esnasında birden çok kesmeye gidildiği görüldü.
bool deger;
void setup()
{
Serial.begin(9600);
pinMode(6, INPUT); //AIN0 pini. Karşılaştırıcının + ucu
pinMode(7, INPUT); //AIN1 pini. Karşılaştırıcının - ucu. Referans gerilim ucu
cli();
//.........bu kısım analog karşılaştırıcı ayarları..............................
ACSR |= (0 << ACIE); //Anaog karşılaştırıcı kesmesi kapatıldı
ACSR |= (0 << ACBG); //Bandgap Referance Voltajı kapatıldı
ACSR |= (0 << ACD); //Analog Karşılaştırıcıya güç verildi
ADCSRB |= (0 << ACME); //ADC açıldı
ADCSRA |= (1 << ADEN); //Multiplex Input kapatıldı
DIDR1 |= (1 << AIN1D) | (1 << AIN0D); //AIN1 ve AIN0 pinleri digital girişe kapatıldı
//.........bu kısım Timer1 giriş yakalama için ACO pini kullanım ayarları........
TCCR1A = 0;
TCCR1B = 0;
TCCR1B |= (1 << CS12) | (0 << CS11) | (1 << CS10); //prescaler 1024 yapılıyor
TCCR1B |= (1 << ICES1); //ICES1=0 ise; düşen kenar. ICES1=1 ise yükselen kenar
ACSR |= (1 << ACIC); //giriş yakalama tetik kaynağı olarak analog karşılaştırıcı çıkışı ACO seçildi
TIFR1 |= (1 << ICF1); //giriş yakalama bayrağı temizlendi
TIMSK1 |= (1 << ICIE1); //Timer1 giriş yakalama kesmesi aktif edildi
TCCR1B |= (1 << ICNC1); //Gürültü önleyici aktif edildi
TCNT1 = 0; //Timer1 sayaç başlangıç değeri
sei();
}
void loop()
{
Serial.println("Kesme oluşması bekleniyor... ");
delay(500);
}
ISR(TIMER1_CAPT_vect)
{
Serial.println("DİKKAT!!! Kesme Oluştu");
deger = bitRead(ACSR, 5);
Serial.print("ACO Biti= "); Serial.println(deger);
}
Devre Şeması
0 comments:
Yorum Gönder