Bu eğitimde, bir joystick modülünü atmega8 mikrodenetleyici ile arayüzleyeceğiz. Bir oyun çubuğu iletişim için kullanılan bir giriş modülüdür. Temelde kullanıcı makine iletişimini kolaylaştırır. Aşağıdaki şekilde bir joystick gösterilmektedir.
Joystick modülünün iki ekseni vardır - biri yatay, diğeri dikeydir. Her bir joystick ekseni bir potansiyometreye veya pota veya değişken dirence monte edilir. Orta noktalar Rx ve Ry olarak indirilir. Bu pinler JOYSTICK için çıkış sinyali pinleri olarak taşınır. Çubuk, besleme voltajı mevcutken yatay eksen boyunca hareket ettirildiğinde, Rx pinindeki voltaj değişir.
Rx'teki voltaj ileri doğru hareket ettirildiğinde artar, geriye doğru hareket ettirildiğinde Rx pinindeki voltaj azalır. Benzer şekilde, Ry'deki voltaj yukarı doğru hareket ettirildiğinde artar, aşağı doğru hareket ettirildiğinde Ry pinindeki voltaj düşer.
Dolayısıyla, iki ADC kanalında dört JOYSTICK yönü var. Normal durumlarda, normal şartlar altında her bir pinde 1 Volt vardır. Çubuk hareket ettirildiğinde, her bir pimdeki voltaj yöne bağlı olarak yüksek veya düşük olur. Yani x ekseni için (0 kanalında 0V, 5V) dört yön; Y ekseni için (kanal 1'de 0V, 5V).
İşi yapmak için ATMEGA8'in iki ADC kanalını kullanacağız. Kanal 0 ve kanal 1'i kullanacağız.
Gerekli Bileşenler
Donanım: ATMEGA8, güç kaynağı (5v), AVR-ISP PROGRAMMER, LED (4 adet), 1000uF kapasitör, 100nF kapasitör (5 adet), 1KΩ direnç (6 adet).
Yazılım: Atmel studio 6.1, progisp veya flash magic.
Devre Şeması ve Çalışma Açıklaması
JOYSTICK üzerindeki voltaj tamamen doğrusal değildir; gürültülü olacak. Gürültüyü filtrelemek için, şekilde gösterildiği gibi devredeki her bir direnç boyunca bir kapasitör yerleştirilir.
Şekilde gösterildiği gibi devrede dört LED vardır. Her LED, JOYSTICK'in her yönünü temsil eder. Çubuk bir yönde hareket ettirildiğinde, ilgili LED yanar.
Daha ileri gitmeden önce ATMEGA8'in ADC'si hakkında konuşmamız gerekir, ATMEGA8'de PORTC'nin DÖRT kanalından herhangi birine Analog giriş verebiliriz, hangi kanalı seçersek seçelim, hepsi aynı olduğundan, PORTC'un kanal 0 veya PIN0'ını seçeceğiz.
ATMEGA8'de ADC 10 bit çözünürlüktedir, bu nedenle kontrolör minimum Vref / 2 ^ 10 değişimini algılayabilir, bu nedenle referans voltajı 5V ise her 5/2 ^ 10 = 5mV için bir dijital çıkış artışı elde ederiz.. Dolayısıyla, girişteki her 5mV artış için dijital çıkışta bir artış elde edeceğiz.
Şimdi ADC sicilini aşağıdaki şartlara göre ayarlamamız gerekiyor, 1. Öncelikle ADC'de ADC özelliğini etkinleştirmemiz gerekiyor.
2. Buradan ADC dönüşümü için maksimum giriş voltajı + 5V olacak. Böylece ADC'nin maksimum değerini veya referansını 5V'a ayarlayabiliriz.
3. Kontrolör, ADC dönüşümünün yalnızca harici bir tetiklemeden sonra gerçekleştiği anlamına gelen bir tetikleme dönüştürme özelliğine sahiptir, çünkü ADC'nin sürekli serbest çalışma modunda çalışması için yazmaçları ayarlamamıza gerek kalmaz.
4. Herhangi bir ADC için, dönüştürme frekansı (Analog değerden Dijital değere) ve dijital çıktının doğruluğu ters orantılıdır. Bu nedenle, dijital çıktının daha iyi doğruluğu için daha az frekans seçmemiz gerekir. Normal ADC saati için ADC'nin ön satışını maksimum değere (2) ayarlıyoruz. 1MHZ'nin dahili saatini kullandığımız için, ADC'nin saati (1000000/2) olacaktır.
Bunlar ADC'ye başlamak için bilmemiz gereken dört şey.
Yukarıdaki dört özelliğin tümü iki kayıt tarafından belirlenir:
KIRMIZI (ADEN): Bu bit, ATMEGA'nın ADC özelliğini etkinleştirmek için ayarlanmalıdır.
MAVİ (REFS1, REFS0): Bu iki bit, referans voltajını (veya vereceğimiz maksimum giriş voltajını) ayarlamak için kullanılır. Referans voltajı 5V olmasını istediğimiz için REFS0 tablo ile ayarlanmalıdır.
SARI (ADFR): Bu bit, ADC'nin sürekli çalışması için ayarlanmalıdır (serbest çalışma modu).
PINK (MUX0-MUX3): Bu dört bit, giriş kanalını söylemek içindir. ADC0 veya PIN0 kullanacağımız için, tablodaki gibi herhangi bir bit ayarlamamıza gerek yoktur.
BROWN (ADPS0-ADPS2): bu üç bit, ADC için ön skaler ayarlamak içindir. Prescalar 2 kullandığımız için, bir bit ayarlamalıyız.
KOYU YEŞİL (ADSC): bu bit, ADC'nin dönüşümü başlatması için ayarlanır. Dönüştürmeyi durdurmamız gerektiğinde bu bit programda devre dışı bırakılabilir.