- Gerekli Malzeme
- Kumanda Kolu Modülünü Anlamak:
- Devre şeması:
- Kumanda Kolu Arabirimi için Programlama:
- Simülasyon Görünümü:
- Donanım ve Çalışma:
Giriş cihazları, herhangi bir elektronik projede hayati bir rol oynar. Bu giriş cihazları, kullanıcının dijital dünya ile etkileşime girmesine yardımcı olur. Bir giriş cihazı, bir düğme kadar basit veya bir dokunmatik ekran kadar karmaşık olabilir; projenin ihtiyacına göre değişir. Bu eğitimde , PIC mikro denetleyicimizle bir joystick'i nasıl arayüzleyeceğimizi öğreneceğiz, bir joystick dijital dünyayla etkileşim kurmanın harika bir yoludur ve neredeyse herkes ergenlik çağında video oyunları oynamak için bir joystick kullanırdı.
Bir joystick karmaşık bir cihaz gibi görünebilir, ancak aslında sadece iki Potansiyometre ve bir basma düğmesinin birleşimidir. Bu nedenle, söz konusu MCU'nun ADC özelliğini nasıl kullanacağımızı bilmemiz koşuluyla, herhangi bir MCU ile arayüz oluşturmak da çok kolaydır. ADC'yi PIC ile nasıl kullanacağımızı zaten öğrendik, bu nedenle Joystick ile arayüz oluşturmak için sadece bir çalışma olacaktır. Seçmeye yeni başlayanların, projeyi anlamalarını kolaylaştırmak için yukarıdaki ADC projesinin yanı sıra LED Yanıp Sönme Sırası Projesini öğrenmeleri önerilir.
Gerekli Malzeme
- PicKit 3 programlama için
- Joy Stick modülü
- PIC16F877A IC
- 40 - Pin IC tutucu
- Perf kurulu
- 20 MHz Kristal OSC
- Bergstik pimleri
- 220ohm Direnç
- Her renkten 5-LED
- 1 Lehimleme kiti
- IC 7805
- 12V Adaptör
- Bağlantı telleri
- Breadboard
Kumanda Kolu Modülünü Anlamak:
Joystickler farklı şekil ve boyutlarda mevcuttur. Aşağıdaki şekilde tipik bir Joystick modülü gösterilmektedir. Bir Joystick, akıllı bir mekanik düzenleme üzerine monte edilmiş birkaç potansiyometre ve basma düğmesinden başka bir şey değildir. Potansiyometre, joystick'in X ve Y hareketini takip etmek için kullanılır ve düğme, joystick'e basılıp basılmadığını algılamak için kullanılır. Her iki Potansiyometre de joystick'in konumuna bağlı olarak analog bir voltaj çıkarır. Ve bir mikrodenetleyici kullanarak bu voltaj değişikliklerini yorumlayarak hareketin yönünü elde edebiliriz. Daha önce Joystick'i AVR ile, Joystick'i Arduino ve Raspberry Pi ile arayüzledik.
Bir mikro denetleyici ile herhangi bir sensör veya modül arayüz oluşturmadan önce, nasıl çalıştığını bilmek önemlidir. Burada joystick'in ikisi güç ve üçü veri olmak üzere 5 çıkış pini vardır. Modül + 5V ile güçlendirilmelidir. Veri pinleri VRX, VRY ve SW olarak adlandırılır.
"VRX" terimi , X eksenindeki Değişken voltaj anlamına gelir ve "VRY" terimi, Y eksenindeki Değişken voltajı ve "SW" ise anahtar anlamına gelir.
Dolayısıyla, joystick'i sola veya sağa hareket ettirdiğimizde, VRX üzerindeki voltaj değeri değişecek ve yukarı veya aşağı değiştirdiğimizde VRY değişecektir. Benzer şekilde, onu çapraz olarak hareket ettirdiğimizde, hem VRX hem de VRY değişecektir. Düğmeye bastığımızda SW pimi toprağa bağlanacaktır. Aşağıdaki şekil Çıktı değerlerini çok daha iyi anlamanıza yardımcı olacaktır.
Devre şeması:
Artık Joy stick'in nasıl çalıştığını bildiğimize göre, Joystick modülünün üç veri pinini de okumak için iki ADC pinine ve bir dijital giriş pinine ihtiyacımız olacağı sonucuna varabiliriz. Tam devre şeması aşağıdaki resimde gösterilmiştir.
Devre şemasında görebileceğiniz gibi, joystick yerine analog voltaj girişleri olarak iki potansiyometre RV1 ve RV3 ve anahtar için bir lojik giriş kullandık. Menekşe renkle yazılmış etiketleri takip ederek pin isimlerine uyabilir ve bağlantılarınızı buna göre yapabilirsiniz.
Analog pinlerin A0 ve A1 kanallarına ve dijital anahtarın RB0'a bağlı olduğunu unutmayın. Ayrıca çıkış olarak bağlanan 5 LED ışığımız olacak, böylece joystick'in hareket ettiği yöne göre bir tane yanabiliriz. Yani bu çıkış pinleri PORT C'ye RC0'dan RC4'e bağlanır. Devre şemamızı kaydırdıktan sonra, programlamaya devam edebiliriz, ardından programı bu devre üzerinde simüle edebiliriz, ardından devreyi bir devre tahtasında oluşturabilir ve ardından programı donanıma yükleyebiliriz. Size bir fikir vermesi için yukarıdaki bağlantıları yaptıktan sonra donanımım aşağıda gösterilmiştir.
Kumanda Kolu Arabirimi için Programlama:
PIC ile joystik arayüz programı yalındır basittir. Joystick'in hangi pinlere bağlandığını ve işlevlerinin ne olduğunu zaten biliyoruz, bu yüzden pinlerden analog voltajı okumalı ve çıkış LED'lerini buna göre kontrol etmeliyiz.
Bunu yapacak programın tamamı bu belgenin sonunda verilmiştir, ancak bazı şeyleri açıklamak için kodu aşağıdaki küçük anlamlı parçacıklara böldüm.
Her zaman olduğu gibi, program konfigürasyon bitlerinin ayarlanmasıyla başlatılır, konfigürasyon bitlerinin ayarlanması hakkında fazla tartışmayacağız çünkü bunu zaten LED Yanıp Sönme projesinde öğrendik ve bu proje için de aynı. Konfigürasyon bitleri ayarlandıktan sonra, PIC'mizdeki ADC modülünü kullanmak için ADC işlevlerini tanımlamamız gerekir. Bu işlevler, ADC'nin PIC eğitimiyle nasıl kullanılacağı konusunda da öğrenildi. Bundan sonra hangi pinlerin giriş, hangilerinin çıkış pinleri olduğunu belirlememiz gerekiyor. Burada LED, PORTC'ye bağlanır, böylece bunlar çıkış pinleridir ve Joystick'in Switch pimi bir dijital giriş pinidir. Bu nedenle, aynı şeyi beyan etmek için aşağıdaki satırları kullanıyoruz:
// ***** G / Ç Yapılandırması **** // TRISC = 0X00; // PORT C, çıkış portları olarak kullanılır PORTC = 0X00; // Tüm pimlere düşük TRISB0 = 1; // RB0 girdi olarak kullanılır // *** G / Ç konfigürasyonunun sonu ** ///
ADC pimleri girdi olarak tanımlamaya gerek yoktur o giriş pimi olarak atanacak ADC işlevini kullanarak çünkü onlar pimleri. Pinler tanımlandıktan sonra, daha önce tanımladığımız ADC_initialize fonksiyonunu çağırabiliriz . Bu fonksiyon gerekli ADC kayıtlarını ayarlayacak ve ADC modülünü hazırlayacaktır.
ADC_Initialize (); // ADC modülünü yapılandırın
Şimdi sonsuz süre döngümüze geçiyoruz. Bu döngü içinde VRX, VRY ve SW değerlerini izlemeliyiz ve ledin çıkışını kontrol etmemiz gereken değerlere göre. Aşağıdaki satırları kullanarak VRX ve VRY'nin analog voltajını okuyarak izleme sürecine başlayabiliriz.
int joy_X = (ADC_Read (0)); // Oyun çubuğunun X Eksenini okuyun int joy_Y = (ADC_Read (1)); // Joystick'in Y Eksenini Okuyun
Bu satır VRX ve VRY değerini sırasıyla joy_X ve joy_Y değişkenine kaydedecektir . ADC_Read (0) fonksiyonu, ADC değerini A0 pin olan kanal 0'dan okuduğumuz anlamına gelir. VRX ve VRY'yi A0 ve A1 pinlerine bağladık ve bu yüzden 0 ve 1'den okuyoruz.
ADC eğitimimizden hatırlarsanız, Analog Voltajı okuduğumuzu biliyoruz, dijital bir cihaz olan PIC, 0'dan 1023'e kadar okuyacaktır. Bu değer, joystick modülünün konumuna bağlıdır. Joystick'in her konumu için ne gibi bir değer bekleyebileceğinizi bilmek için yukarıdaki etiket şemasını kullanabilirsiniz.
Burada alt limit olarak 200 limit değerini ve üst limit olarak 800 değerini kullandım. İstediğin her şeyi kullanabilirsin. Öyleyse bu değerleri kullanalım ve buna göre ledleri yakmaya başlayalım. Bunu yapmak için joy_X'in değerini bir IF döngüsü kullanarak önceden tanımlanmış değerlerle karşılaştırmalı ve aşağıda gösterildiği gibi LED pinlerini yüksek veya düşük yapmalıyız. Yorum satırları daha iyi anlamanıza yardımcı olacaktır
if (joy_X <200) // Joy yukarı taşındı {RC0 = 0; RC1 = 1;} // Üstteki LED'i yanar, aksi takdirde (joy_X> 800) // Joy aşağı hareket etti {RC0 = 1; RC1 = 0;} // Glow Lower LED else // Hareket ettirilmezse {RC0 = 0; RC1 = 0;} // Her iki ledi de kapat
Aynı şeyi Y ekseninin değeri için de yapabiliriz. Sadece joy_X değişkenini joy_Y ile değiştirmeliyiz ve ayrıca sonraki iki LED pini aşağıda gösterildiği gibi kontrol etmeliyiz . Joystick hareket ettirilmediğinde her iki LED ışığını da kapattığımızı unutmayın.
if (joy_Y <200) // Joy Sola taşındı {RC2 = 0; RC3 = 1;} // Sol LED'i yanar, eğer (joy_Y> 800) // Joy Sağa hareket etti {RC2 = 1; RC3 = 0;} // Sağ LED'i yanar // Hareket ettirilmezse {RC2 = 0; RC3 = 0;} // Her iki LED'i de kapatın
Şimdi yapmamız gereken son bir şey daha var, eğer basılıysa anahtara kontrol etmeliyiz. Anahtar pimi RB0'a bağlıdır, böylece tekrar if döngüsü kullanabilir ve açık olup olmadığını kontrol edebiliriz. Basıldığında, düğmeye basıldığını belirtmek için LED'i kapatacağız.
if (RB0 == 1) // Joy'a basılırsa RC4 = 1; // Orta LED yanar, aksi takdirde RC4 = 0; // KAPALI orta LED
Simülasyon Görünümü:
Tüm proje Proteus yazılımı kullanılarak simüle edilebilir. Programı yazdıktan sonra kodu derleyin ve simülasyonun hex kodunu devreye bağlayın. O zaman potansiyometrelerin konumuna göre LED ışıklarının yandığını fark etmelisiniz. Simülasyon aşağıda gösterilmiştir:
Donanım ve Çalışma:
Simülasyonu kullanarak kodu doğruladıktan sonra devreyi bir breadboard üzerine kurabiliriz. PIC eğitimlerini takip ediyor olsaydınız, PIC ve 7805 devresi lehimlenmiş olan aynı performans kartını kullandığımızı fark etmişsinizdir. Tüm PIC projelerinizde kullanmak için bir tane yapmakla da ilgileniyorsanız, devreyi bir performans kartına lehimleyin. Ya da tüm devreyi bir devre tahtasında da oluşturabilirsiniz. Donanım bittiğinde, aşağıdaki gibi bir şey olacaktır.
Şimdi kodu PICkit3'ü kullanarak PIC mikro denetleyicisine yükleyin. Kılavuzluk için LED Yanıp Sönme projesine başvurabilirsiniz. Program yüklenir yüklenmez sarı ışığın yükseldiğini fark etmelisiniz. Şimdi kumanda çubuğunu kullanın ve düğmeyi değiştirin, kumanda çubuğunun her yönü için ilgili LED'in yükseldiğini göreceksiniz. Ortadaki anahtara basıldığında ortadaki led sönecektir.
Bu çalışma sadece bir örnek, üzerine birçok ilginç proje inşa edebilirsiniz. Projenin tam çalışması da bu sayfanın sonunda verilen videoda bulunabilir.
Umarım projeyi anladınız ve inşa etmekten keyif aldınız, eğer bunu yaparken herhangi bir sorun yaşarsanız, aşağıdaki yorum bölümüne göndermekten çekinmeyin veya yardım almak için forumlara yazın.