İçindekiler:

AVR Mikrodenetleyicisinde ADC'ye Giriş - Yeni Başlayanlar için: 14 Adım
AVR Mikrodenetleyicisinde ADC'ye Giriş - Yeni Başlayanlar için: 14 Adım

Video: AVR Mikrodenetleyicisinde ADC'ye Giriş - Yeni Başlayanlar için: 14 Adım

Video: AVR Mikrodenetleyicisinde ADC'ye Giriş - Yeni Başlayanlar için: 14 Adım
Video: Genel giriş | PIC Mikrodenetleyicileri | #1 2024, Kasım
Anonim
AVR Mikrodenetleyicisinde ADC'ye Giriş | yeni başlayanlar için
AVR Mikrodenetleyicisinde ADC'ye Giriş | yeni başlayanlar için

Bu derste, avr mikrodenetleyicideki her şeyi ADC'yi bileceksiniz.

Adım 1: ADC Nedir?

Bir ADC veya Analogdan Dijitale Dönüştürücü, bir analog voltajın bir mikrodenetleyici tarafından kullanılabilecek bir dijital değere dönüştürülmesine izin verir. Ölçmek isteyebileceğiniz birçok analog sinyal kaynağı vardır. Sıcaklık, ışık yoğunluğu, mesafe, konum ve kuvveti ölçen analog sensörler mevcuttur.

Adım 2: AVR-Mikrodenetleyicide ADC Nasıl Çalışır?

AVR ADC, AVR mikro denetleyicisinin analog voltajları çok az veya hiç harici parça olmadan dijital değerlere dönüştürmesine izin verir. ATmega8, 10 bitlik ardışık bir ADC yaklaşımına sahiptir. ATmega8, PortC'de 7 kanallı ADC'ye sahiptir. ADC'nin ayrı bir analog besleme voltajı pini AVCC vardır. AVCC, VCC'den ± 0.3V'den fazla farklılık göstermemelidir. Gerilim referansı, AREF pininde harici olarak ayrılabilir. AVCC voltaj referansı olarak kullanılır. ADC ayrıca sürekli çalışacak (serbest çalışma modu) veya yalnızca bir dönüşüm yapacak şekilde ayarlanabilir.

Adım 3: ADC Dönüşüm Formülü

ADC Dönüşüm Formülü
ADC Dönüşüm Formülü

Vin, seçilen giriş pinindeki voltaj ve Vref, seçilen voltaj referansı olduğunda

Adım 4: ATmega8'de ADC Nasıl Yapılandırılır?

ATmega8'de ADC Nasıl Yapılandırılır?
ATmega8'de ADC Nasıl Yapılandırılır?

ATmega8'de ADC'nin uygulanması için aşağıdaki Kayıtlar kullanılır

ADC Çoklayıcı Seçimi

Adım 5: ADLAR Seçimi

ADLAR Seçimi
ADLAR Seçimi
ADLAR Seçimi
ADLAR Seçimi

ADC Sol Ayar Sonucu ADLAR biti, ADC Veri Kaydı'ndaki ADC dönüştürme sonucunun sunumunu etkiler. Sonucu ayarlamak için ADLAR'a bir tane yazın. Aksi takdirde, sonuç doğru ayarlanmış

Bir ADC dönüşümü tamamlandığında, sonuç ADCH ve ADCL'de bulunur ADCL okunduğunda, ADCH okunana kadar ADC Veri Kaydı güncellenmez. Sonuç olarak, sonuç ayarlı bırakılırsa ve 8 bitten fazla hassasiyet gerekmiyorsa, ADCH'yi okumak yeterlidir. Aksi takdirde, önce ADCL, sonra ADCH okunmalıdır. Analog Kanal Seçim Bitleri Bu bitlerin değeri, ADC'ye hangi analog girişlerin bağlı olduğunu seçer.

Adım 6: ADCSRA Seçimi

ADCSRA Seçimi
ADCSRA Seçimi
ADCSRA Seçimi
ADCSRA Seçimi

• Bit 7 – ADEN: ADC Etkin Bu bitin bire yazılması ADC'yi etkinleştirir. Sıfıra yazıldığında ADC kapatılır.

• Bit 6 – ADSC: ADC Dönüşümü Başlat Tekli Dönüşüm modunda, her dönüşümü başlatmak için bu biti bire yazın. Serbest Koşu modunda, ilk dönüşümü başlatmak için bu biti bire yazın.

• Bit 5 – ADFR: ADC Serbest Çalışma Seçimi Bu bit (bir) olarak ayarlandığında, ADC Serbest Çalışma modunda çalışır. Bu modda, ADC Veri Kayıtlarını sürekli olarak örnekler ve günceller. Bu bitin (sıfır) temizlenmesi Serbest Çalışma modunu sonlandıracaktır.

• Bit 4 – ADIF: ADC Kesme Bayrağı Bu bit, bir ADC dönüşümü tamamlandığında ve Veri Kayıtları güncellendiğinde ayarlanır. SREG'deki ADIE biti ve I-biti ayarlanmışsa, ADC Dönüşüm Tamamlama Kesintisi yürütülür. ADIF, ilgili kesme İşleme Vektörü yürütülürken donanım tarafından temizlenir. Alternatif olarak, bayrağa mantıksal bir tane yazılarak ADIF temizlenir.

• Bit 3 – ADIE: ADC Kesintisi Etkin Bu bit bire yazıldığında ve SREG'deki I-biti ayarlandığında, ADC Dönüşüm Tamamlama Kesintisi etkinleştirilir.

• Bitler 2:0 – ADPS2:0: ADC Ön Ölçekleyici Seçim Bitleri Veri sayfasına göre, bu ön ölçek ADC giriş frekansı 50 KHz ile 200 KHz arasında olacak şekilde ayarlanmalıdır. ADC saati, ADPS2:0 yardımıyla sistem saatinden türetilir. Bu bitler, XTAL frekansı ile ADC'ye giriş saati arasındaki bölme faktörünü belirler.

Adım 7: ADC Değeri Almak İstiyorsanız Aşağıda Listelenen Bazı İşleri Yapmanız Gerekir

  • ADC değerini ayarla
  • Çıkış LED pinini yapılandırın
  • ADC Donanımını Yapılandırın
  • ADC'yi etkinleştir
  • Analogdan Dijitale Dönüşümleri Başlatın
  • Sonsuza Kadar

ADC Değeri Set değerinden yüksekse, LED'i Aç ELSE LED'i Kapat

Adım 8: ADC Değerini Ayarlayın

Kod: uint8_t ADCValue =128;

Adım 9: Çıkış LED Pinini Yapılandırın

Kod: DDRB|= (1 << PB1);

Adım 10: ADC Donanımını Yapılandırın

ADC Donanımını Yapılandırın

Bu, ADC için kontrol kayıtlarındaki bitleri ayarlayarak yapılır. İlk olarak, ADC için ön değeri ayarlayalım. Veri sayfasına göre, bu ön değerin ADC giriş frekansı 50 KHz ile 200 KHz arasında olacak şekilde ayarlanması gerekir. ADC saati, sistem saatinden türetilmiştir. 1 MHz'lik bir sistem frekansı ile, 8'lik bir ön ölçekleyici, 125 Khz'lik bir ADC frekansı ile sonuçlanacaktır. Ön ölçekleme, ADCSRA kaydındaki ADPS bitleri tarafından ayarlanır. Veri sayfasına göre, 8 ön ölçekleyiciyi almak için üç ADPS2:0 bitinin tümü 011'e ayarlanmalıdır.

Kod: ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);

Ardından, ADC referans voltajını ayarlayalım. Bu, ADMUX kaydındaki REFS bitleri tarafından kontrol edilir. Aşağıdakiler, referans voltajını AVCC'ye ayarlar.

Kod: ADMUX |= (1 << REFS0);

Çoklayıcıdan ADC'ye geçen kanalı ayarlamak için, ADMUX kaydındaki MUX bitlerinin buna göre ayarlanması gerekir. Burada ADC5 kullandığımız için

Kod: ADMUX&=0xF0; ADMUX|=5;

ADC'yi serbest çalışma moduna geçirmek için, ADCSRA kaydında uygun şekilde adlandırılmış ADFR bitini ayarlayın:

Kod: ADCSRA |= (1 << ADFR);

ADC değerini okumayı kolaylaştırmak için son bir ayar değişikliği yapılacaktır. ADC'nin çözünürlüğü 10 bit olmasına rağmen, bu kadar bilgi çoğu zaman gerekli değildir. Bu 10 bitlik değer, ADCH ve ADCL olmak üzere iki 8 bitlik kayıtlara bölünür. Varsayılan olarak, ADC değerinin en düşük 8 biti ADCL'de bulunur, üstteki ikisi ADCH'nin en alttaki iki bitidir. ADLAR bitini ADMUX kaydında ayarlayarak, ADC değerini sola hizalayabiliriz. Bu, ölçümün en yüksek 8 bitini ADCH kaydına, geri kalanı ADCL kaydına yerleştirir. Daha sonra ADCH kaydını okursak, 0 ila 255 arasında bir sayı olarak 0 ila 5 volt ölçümümüzü temsil eden 8 bitlik bir değer elde ederiz. Temel olarak 10 bitlik ADC ölçümümüzü 8 bitlik bir ölçüme dönüştürüyoruz. ADLAR bitini ayarlamak için kod:

Kod:

ADMUX |= (1 << ADLAR); Bu, bu örnek için ADC donanımının kurulumunu tamamlar. ADC ölçüm almaya başlamadan önce iki bitin daha ayarlanması gerekir.

Adım 11: ADC'yi Etkinleştirin

ADC'yi etkinleştirmek için ADCSRA'da ADEN bitini ayarlayın:

Kod: ADCSRA |= (1 << ADEN);

Adım 12: Analogdan Dijitale Dönüşümleri Başlatın

ADC ölçümlerini başlatmak için ADCSRA'daki ADSC bitinin ayarlanması gerekir:

Kod: ADCSRA |= (1 << ADSC);

Bu noktada, ADC, ADC5'te sunulan voltajı sürekli olarak örneklemeye başlayacaktır. Bu noktaya kadar olan kod şöyle görünecektir:

Adım 13: WHILE Sonsuza Kadar

Yapılması gereken tek şey ADC değerini test etmek ve LED'leri yüksek/düşük göstergesi gösterecek şekilde ayarlamaktır. ADCH'deki ADC okuması maksimum 255 değerine sahip olduğundan, voltajın yüksek mi yoksa düşük mü olduğunu belirlemek için bir test değeri seçilmiştir. FOR döngülerindeki basit bir IF/ELSE ifadesi, doğru LED'i açmamıza izin verecektir:

kod

if(ADCH >ADCDeğeri)

{

PORTB |= (1 << PB0); // LED'i aç

}

Başka

{

PORTB&= ~(1 << PB0); // LED'i kapat

}

Adım 14: Sonunda Kod Tamamlandı

Kod:

#Dahil etmek

int ana (boş)

{

uint8_t ADCDeğeri =128;

DDRB |= (1 << PB0); // LED1'i çıkış olarak ayarla

ADCSRA |= (0 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // ADC'yi önceden 8'e ayarla - // 125KHz örnekleme hızı 1MHz

ADMUX |= (1 << REFS0); // ADC referansını AVCC'ye ayarla

ADMUX |= (1 << ADLAR); // ADC sonucunu kolay 8 bit okumaya izin vermek için sola ayarlayın

ADMUX&=0xF0;

ADMUX|=5; // ADC0 kullanmak için MUX değerlerinin değiştirilmesi gerekiyor

ADCSRA |= (1 << ADFR); // ADC'yi Serbest Çalışma Moduna ayarla

ADCSRA |= (1 << ADEN); // ADC'yi etkinleştir

ADCSRA |= (1 << ADSC); // A2D Dönüşümlerini Başlat while(1) // Sonsuza Kadar Döngü

{

if(ADCH > ADCDeğeri)

{

PORTB |= (1 << PB0); // LED1'i aç

}

Başka

{

PORTE &= ~(1 << PB1); // LED1'i kapat

}

}

0 döndür;

}

İlk önce bu öğreticiyi yayınlayın Buraya Tıklayın

Önerilen: