Programlama Kodları
//AÇIKLAMA
//Bu uygulamada bir önceki uygulama gibi AIN0 ve AIN1 pinlerindeki karşılaştırma sonucu
//kesmeye gidilerek LED'in yakılması ve söndürülmesi sağlandı. Burdaki fark, kayıtçılardaki
//bitlerin durumlarını değiştirmek için; bitSet() ve bitClear() komutlarının kullanılmasıdır.
#define LED 2
bool ACO_biti;
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 giriş ucu.
pinMode(LED, OUTPUT);
digitalWrite(LED, LOW);
cli(); //Tüm kesmeleri kapat
bitSet(ACSR, 3); //ACIE = 1. karşılaştırıcı kesmesi açıldı.
bitSet(ACSR, 1); bitSet(ACSR, 0); //ACIS1 = 1, ACIS0 = 1. Çıkışın yükselen kenarında karşılaştırma kesmesi olsun
bitSet(ACSR, 4); //ACI = 1. kesme bayrak biti sıfırlandı
bitClear(ACSR, 6); //ACGB = 0. Bandgap Referance Voltajı kapatıldı.
bitClear(ACSR, 7); //ACD = 0. Analog Karşılaştırıcıya güç verildi.
bitClear(ACSR, 2); //ACIC = 0. Timer1'deki giriş yakalama işlevi kapatıldı.
bitSet(DIDR1, 0); //AIN0D = 1. AIN0 pini digital girişe kapatıldı
bitSet(DIDR1, 1); //AIN1D = 1. AIN1 pini digital girişe kapatıldı
bitClear(ADCSRB, 6); //ACME = 0. ADC açıldı
bitSet(ADCSRA, 7); //ADEN = 1. Multiplex Input kapatıldı
sei(); //Tüm kesmeleri aç
}
void loop()
{
ACO_biti = bitRead(ACSR, 5); //ACSR kayıtçısının 5. biti olan ACO bitinin durumu(1 yada 0) değişkene atandı
if (ACO_biti == 1)
{
Serial.println("ACO Biti = 1");
delay(1000);
}
else if (ACO_biti == 0)
{
Serial.println("ACO Biti = 0");
delay(1000);
}
}
ISR(ANALOG_COMP_vect)
{
digitalWrite(LED, !digitalRead(LED));
Serial.println("Kesmeye oluştu");
}
Devre Şeması
0 comments:
Yorum Gönder