İçindekiler:
- Adım 1: ADC Nedir?
- Adım 2: AVR-Mikrodenetleyicide ADC Nasıl Çalışır?
- Adım 3: ADC Dönüşüm Formülü
- Adım 4: ATmega8'de ADC Nasıl Yapılandırılır?
- Adım 5: ADLAR Seçimi
- Adım 6: ADCSRA Seçimi
- Adım 7: ADC Değeri Almak İstiyorsanız Aşağıda Listelenen Bazı İşleri Yapmanız Gerekir
- Adım 8: ADC Değerini Ayarlayın
- Adım 9: Çıkış LED Pinini Yapılandırın
- Adım 10: ADC Donanımını Yapılandırın
- Adım 11: ADC'yi Etkinleştirin
- Adım 12: Analogdan Dijitale Dönüşümleri Başlatın
- Adım 13: WHILE Sonsuza Kadar
- Adım 14: Sonunda Kod Tamamlandı
Video: AVR Mikrodenetleyicisinde ADC'ye Giriş - Yeni Başlayanlar için: 14 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
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ü
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'nin uygulanması için aşağıdaki Kayıtlar kullanılır
ADC Çoklayıcı Seçimi
Adım 5: 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
• 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:
TV'nize Bağlı Her Giriş için Ambilight Sistemi. WS2812B Arduino UNO Raspberry Pi HDMI (12.2019'da Güncellendi): 12 Adım (Resimlerle)
TV'nize Bağlı Her Giriş için Ambilight Sistemi. WS2812B Arduino UNO Raspberry Pi HDMI (12.2019'da Güncellendi): Televizyonuma her zaman ambilight eklemek istemişimdir. Çok havalı görünüyor! Sonunda yaptım ve hayal kırıklığına uğramadım!TV'niz için bir Ambilight sistemi oluşturmaya ilişkin birçok video ve eğitim gördüm ama tam olarak neem için tam bir eğitim bulamadım
Visuino LED Gibi Şeyleri Kontrol Etmek İçin Bir Buton Nasıl Giriş Olarak Kullanılır: 6 Adım
Visuino Bir Düğmeyi LED Gibi Şeyleri Kontrol Etmek İçin Bir Giriş Olarak Kullanma: Bu eğitimde, basit bir düğme ve Visuino kullanarak LED'in nasıl AÇILIP KAPATILDIĞINI öğreneceğiz
Bir Bumpin' Elektronik Parça Nasıl Yapılır: FL Studio için Giriş Müziği Prodüksiyonu: 6 Adım
Bir Bumpin' Elektronik Parça Nasıl Yapılır: FL Studio için Giriş Müziği Prodüksiyonu: Hoş Geldiniz! Bu Eğitilebilir kılavuz, yeni başlayanlara orta düzey müzik üreticilerine, çeşitli Elektronik Dans Müziği türleri oluşturmak için FL Studio'yu kullanma konusunda yardımcı olacaktır. Temel ipuçlarını detaylandırmak amacıyla, bir şarkı yaratmanın temel unsurları üzerinden geçecektir
Düğmeler için "Metalik Delik Tapaları" Kullanan ESP32 Kapasitif Dokunmatik Giriş: 5 Adım (Resimlerle)
Düğmeler için "Metalik Delik Tapalar" Kullanan ESP32 Kapasitif Dokunmatik Giriş: Üç düğme girişi gerektiren yaklaşan bir ESP32 WiFi Kit 32 tabanlı proje için tasarım kararlarını sonlandırırken, göze çarpan bir sorun, WiFi Kit 32'nin tek bir mekanik düğmeye sahip olmamasıydı, henüz yalnız üç mekanik düğme, f
Arduino için 6 Buton İçin 1 Analog Giriş Kullanın: 6 Adım
Arduino için 6 Düğme için 1 Analog Giriş Kullanın: Arduino'm için nasıl daha fazla Dijital Giriş elde edebileceğimi sık sık merak etmişimdir. Kısa süre önce birden fazla dijital giriş getirmek için Analog Girişlerden birini kullanabilmem gerektiği aklıma geldi. Hızlı bir arama yaptım ve insanların nerede olduğunu buldum