- ADC nedir (Analogdan Dijitale Dönüşüm)
- AVR Mikrodenetleyicide ADC Atmega16
- Gerekli Bileşenler
- Devre şeması
- Atmega16'da ADC kontrol kayıtlarını kurma
- ADC için Atmega16'nın Programlanması
Hemen hemen her gömülü uygulamada kullanılan ortak bir özellik, ADC modülüdür (Analogdan Dijitale Dönüştürücü). Bu Analogdan dijitale Dönüştürücüler, Sıcaklık sensörü, Eğim sensörü, Akım sensörü, Esnek sensör vb. Analog sensörlerden voltaj okuyabilir. Bu eğitimde ADC nedir ve Atmega16'da ADC nasıl kullanılır öğreneceğiz. Bu eğitim, küçük bir potansiyometreyi Atmega16'nın ADC pinine bağlamayı içerir ve 8 LED, ADC giriş değerindeki değişime göre ADC çıkış değerinin değişen voltajını görüntülemek için kullanılır.
Daha önce ADC'yi diğer mikrodenetleyicilerde açıklamıştık:
- ARM7 LPC2148'de ADC nasıl kullanılır - Analog Gerilim Ölçümü
- STM32F103C8'de ADC nasıl kullanılır - Analog Gerilim Ölçümü
- MSP430G2'de ADC nasıl kullanılır - Analog Gerilim Ölçümü
- Arduino Uno'da ADC Nasıl Kullanılır?
- MPLAB ve XC8 ile PIC Mikroişlemcinin ADC Modülünü Kullanma
ADC nedir (Analogdan Dijitale Dönüşüm)
ADC, Analogdan Dijitale Dönüştürücü anlamına gelir. Elektronikte ADC, akım ve voltaj gibi analog bir sinyali dijital koda (ikili form) dönüştüren bir cihazdır. Gerçek dünyada sinyallerin çoğu analogdur ve herhangi bir mikro denetleyici veya mikroişlemci ikili veya dijital dili (0 veya 1) anlar. Dolayısıyla mikrodenetleyicilerin analog sinyalleri anlamasını sağlamak için bu analog sinyalleri dijital forma dönüştürmemiz gerekiyor. ADC bunu bizim için tam olarak yapıyor. Farklı uygulamalar için birçok ADC türü mevcuttur. Birkaç popüler ADC flaş, ardışık yaklaşım ve sigma-deltadır.
En ucuz ADC türü Ardışık Yaklaşımdır ve bu eğitimde Ardışık Yaklaşım ADC kullanılacaktır. Bir Ardışık Yaklaşım tipi ADC'de, her biri sabit bir analog seviyeye karşılık gelen bir dizi dijital kod, art arda üretilir. Dönüştürülen analog sinyal ile karşılaştırmak için dahili bir sayaç kullanılır. Analog seviye analog sinyalden biraz daha büyük olduğunda üretim durdurulur. Dijital kod, analog seviyeye karşılık gelir, analog sinyalin istenen dijital temsilidir. Bu, ardışık yaklaşım hakkındaki küçük açıklamamızı tamamlıyor.
ADC'yi çok daha derinlemesine keşfetmek istiyorsanız, ADC ile ilgili önceki eğitimimize başvurabilirsiniz. ADC'ler IC şeklinde mevcuttur ve ayrıca mikrodenetleyiciler günümüzde dahili ADC ile birlikte gelir. Bu eğitimde , Atmega16'nın dahili ADC'sini kullanacağız. Atmega16'nın dahili ADC'si hakkında konuşalım.
AVR Mikrodenetleyicide ADC Atmega16
Atmega16, dahili bir 10 bit ve 8 kanallı ADC'ye sahiptir. 10 bit, giriş voltajı 0-5V ise 10 bitlik değere, yani 1024 seviye ayrık Analog değerine (2 10 = 1024) bölünecektir. Artık 8-kanal, her bir pinin Analog voltajı okuyabildiği Atmega16 üzerindeki özel 8 ADC Pimine karşılık gelir. Tam PortA (GPIO33-GPIO40) ADC işlemi için ayrılmıştır. Varsayılan olarak, PORTA pinleri genel IO pinleridir, bu port pinlerinin çoğullandığı anlamına gelir. Bu pinleri ADC pinleri olarak kullanmak için ADC kontrolüne adanmış belirli yazmaçları yapılandırmamız gerekecek. Kayıtların ADC kontrol kayıtları olarak bilinmesinin nedeni budur. Dahili ADC'yi çalıştırmaya başlamak için bu kayıtların nasıl kurulacağını tartışalım.
Atmega16'daki ADC Pinleri
Gerekli Bileşenler
- Atmega16 Mikrodenetleyici IC
- 16Mhz Kristal Osilatör
- İki adet 100nF Kapasitör
- İki adet 22pF Kapasitör
- Butona basınız
- Atlama Telleri
- Breadboard
- USBASP v2.0
- Led (Herhangi Bir Renk)
Devre şeması
Atmega16'da ADC kontrol kayıtlarını kurma
1. ADMUX Kaydı (ADC Çoklayıcı Seçim Kaydı) :
ADMUX Kaydı, ADC kanalının seçimi ve referans voltajının seçilmesi içindir. Aşağıdaki resim ADMUX kaydına genel bakışı göstermektedir. Açıklama aşağıda açıklanmıştır.
- Bit 0-4: kanal seçim bitleri.
MUX4 |
MUX3 |
MUX2 |
MUX1 |
MUX0 |
ADC Kanalı Seçildi |
0 |
0 |
0 |
0 |
0 |
ADC0 |
0 |
0 |
0 |
0 |
1 |
ADC1 |
0 |
0 |
0 |
1 |
0 |
ADC2 |
0 |
0 |
0 |
1 |
1 |
ADC3 |
0 |
0 |
1 |
0 |
0 |
ADC4 |
0 |
0 |
1 |
0 |
1 |
ADC5 |
0 |
0 |
1 |
1 |
0 |
ADC6 |
0 |
0 |
1 |
1 |
1 |
ADC7 |
- Bit-5: Sonucu sağa veya sola ayarlamak için kullanılır.
ADLAR |
Açıklama |
0 |
Sonucu doğru ayarlayın |
1 |
Sonucu sola ayarlayın |
- Bit 6-7: ADC için referans voltajını seçmek için kullanılırlar.
REFS1 |
REFS0 |
Gerilim Referans Seçimi |
0 |
0 |
AREF, Dahili Vref kapalı |
0 |
1 |
AREF pininde harici kapasitörlü AVcc |
1 |
0 |
Ayrılmış |
1 |
1 |
AREF Pininde harici kapasitörlü dahili 2.56 Gerilim Referansı |
Şimdi bu yazmaç bitlerini programda yapılandırmaya başlayın, böylece Dahili ADC okuma ve PORTC'nin Tüm Pinlerine çıkış elde edeceğiz.
ADC için Atmega16'nın Programlanması
Programın tamamı aşağıda verilmiştir. JTAG ve Atmel stüdyosunu kullanarak programı Atmega16'da yazın ve ADC değerini değiştirmek için potansiyometreyi döndürün. Burada kod satır satır açıklanmıştır.
ADC dönüştürülmüş değeri okumak için bir işlev yapmakla başlayın. Daha sonra ADC_read fonksiyonunda kanal değerini 'chnl' olarak iletin .
işaretsiz int ADC_read (işaretsiz karakter chnl)
Yalnızca 8 ADC kanalımız olduğu için kanal değerleri 0 ile 7 arasında olmalıdır.
chnl = chnl & 0b00000111;
ADMUX kaydına '40' yani '01000000' yazarak, Analog girişin dijital dönüşüm için bağlanacağı PORTA0'ı ADC0 olarak seçtik.
ADMUX = 0x40;
Şimdi bu adım ADC dönüştürme sürecini içeriyor, ADCSRA kaydında ADSC Bit'e ONE yazarak dönüştürmeye başlıyoruz. Bundan sonra, dönüştürme tamamlandığında ADIF bitinin değer döndürmesini bekleyin. ADCSRA kaydında ADIF Bit'e '1' yazarak dönüşümü durdururuz. Dönüşüm tamamlandığında ADC değerini döndürün.
ADCSRA - = (1 <
Burada dahili ADC referans voltajı REFS0 biti ayarlanarak seçilir. Bundan sonra ADC'yi etkinleştirin ve ön ölçekleyiciyi 128 olarak seçin.
ADMUX = (1 <
Şimdi ADC değerini kaydedin ve PORTC'ye gönderin. PORTC'de, dijital çıkışı 8 bit formatında gösterecek 8 LED bağlanır. Gösterdiğimiz örnek, bir 1K pot kullanarak voltajı 0V ile 5V arasında değiştirir.
i = ADC_read (0); PORTC = i;
Dijital Multimetre, ADC Pininde analog giriş voltajını görüntülemek için kullanılır ve ADC çıkışının karşılık gelen 8 Bit değerini göstermek için 8 LED kullanılır. Sadece Potansiyometreyi döndürün ve ilgili sonucu multimetrenin yanı sıra parlayan LED'lerde görün.
Tam kod ve çalışma videosu aşağıda verilmiştir.