TV uzaktan kumandalı bilgisayar faresi (bir avr VUSB projesi)

 


 Selam,
    Yatağıma uzanıp laptopta film izlerken uzaktan kumanda olsa sisteme yaklaşmadan duraklatma, oynatma, ileri, geri, ses ayarı, sonrakini oynatma vs. gibi işlemlerin kolay olacağını düşünürdüm. Sonra uzaktan kumanda yapmayı planladım. Bluetooth farem yok. Önümde birçok seçenek var. AVR mikrodenetleyici kullanarak kolayca yapabiliriz çünkü harika bir VUSB projesi var :-). Vusb kütüphanesini kullanarak, avr mikrodenetleyici üzerinde düşük hızlı bir yazılım usb portu (slave) uygulayabiliriz. Vusb kitaplığında, yazarın bir logitech usb faresinde gözlemlenenle aynı usb rapor tanımlayıcısını kullandığı bir hid-mouse uygulaması örneği vardır. Daha sonra, bir philips tv kumandasından RC5 sinyali alıp kodunu çözmesini sağlamak ve ilgili fare olaylarını vusb kitaplığını kullanarak sisteme göndermek için birkaç satır daha kod ekledim. Bunun en iyi yöntem olduğuna inanıyorum çünkü bir HID cihazı olduğu için pc'de herhangi bir özel sürücü gerektirmez. Ayrıca hemen hemen tüm avr mikrodenetleyicilerde (minik, mega vb.) çalışır ve herhangi bir usb - seri dönüştürücü veya herhangi bir özel donanım gerektirmez ve daha ucuzdur. Ayrıca platform bağımsızdır. Windows, linux ve mac'teki bir usb fareninkine benzer şekilde çalışacaktır. Obdev'in paylaşılan VID/PID çiftini (0x16c0/0x5dc) kullandım. Usbasp'ta aynı çift kullanılır, bu nedenle usbasp sürücüsü kaldırılmalıdır (daha önce kurulmuşsa) ve silinmelidir, aksi takdirde pencerelerde çalışmaz. t HID aygıtı olduğu için bilgisayarda herhangi bir özel sürücü gerektirmez. Ayrıca hemen hemen tüm avr mikrodenetleyicilerde (tiny, mega vb.) çalışır ve herhangi bir usb - seri dönüştürücü veya herhangi bir özel donanım gerektirmez ve daha ucuzdur. Ayrıca platform bağımsızdır. Windows, linux ve mac'teki bir usb fareninkine benzer şekilde çalışacaktır. Obdev'in paylaşılan VID/PID çiftini (0x16c0/0x5dc) kullandım. Usbasp'ta aynı çift kullanılır, bu nedenle usbasp sürücüsü kaldırılmalıdır (daha önce kurulmuşsa) ve silinmelidir, aksi takdirde pencerelerde çalışmaz. t HID aygıtı olduğu için bilgisayarda herhangi bir özel sürücü gerektirmez. Ayrıca hemen hemen tüm avr mikrodenetleyicilerde (tiny, mega vb.) çalışır ve herhangi bir usb - seri dönüştürücü veya herhangi bir özel donanım gerektirmez ve daha ucuzdur. Ayrıca platform bağımsızdır. Windows, linux ve mac'teki bir usb fareninkine benzer şekilde çalışacaktır. Obdev'in paylaşılan VID/PID çiftini (0x16c0/0x5dc) kullandım. Usbasp'ta aynı çift kullanılır, bu nedenle usbasp sürücüsü kaldırılmalıdır (daha önce kurulmuşsa) ve silinmelidir, aksi takdirde pencerelerde çalışmaz. Obdev'in paylaşılan VID/PID çiftini (0x16c0/0x5dc) kullandım. Usbasp'ta aynı çift kullanılır, bu nedenle usbasp sürücüsü kaldırılmalıdır (daha önce kurulmuşsa) ve silinmelidir, aksi takdirde pencerelerde çalışmaz. Obdev'in paylaşılan VID/PID çiftini (0x16c0/0x5dc) kullandım. Usbasp'ta aynı çift kullanılır, bu nedenle usbasp sürücüsü kaldırılmalıdır (daha önce kurulmuşsa) ve silinmelidir, aksi takdirde pencerelerde çalışmaz.
       Umarım tüm avr severler ünlü USBASP AVR ISP programlayıcısını duymuştur ve çoğu bu VUSB tabanlı şeyleri kullanmış/hala kullanıyor olabilir. Daha sonra devre tasarımını hemen hemen usbasp'ınkine benzer hale getirdim, böylece herkes aynı USBASP donanımı üzerinde sadece atmega8'i bu projedeki yeni hex ile programlanmış başka bir atmega8 ile değiştirerek bunu kolayca deneyebilir. Ayrıca USBasp donanımına bir TSOP 1738 IR alıcı modülü bağlamamız ve o/p'sini Atmega8'in INT1 pinine bağlamamız gerekiyor. Bitti! Donanım hazır... Artık usbport'a takıp RC5-Mouse olarak kullanabiliriz. Test etmek için RC5 protokollü bir Philips TV kumandasına ihtiyacımız var.
       RC5 kod çözme, harici kesme ve bir zamanlayıcı kullanılarak yapılır. Fare verileri 4 bayttan oluşur. İlk bayt fare düğmesi durumlarıdır, sonraki ikisi dx ve dy'dir (x ve y koordinatlarındaki artış, işaretli değer) ve son bayt da yine işaretli olan tekerlek yer değiştirmesidir. Bu dört baytlık yapının değerlerini ayarlamamız ve ardından fare verilerini sisteme göndermek için bir vusb işlevi "usbSetInterrupt" çağırmamız gerekiyor codeandlife.com'da çok iyi bir vusb öğreticisi var. Ayrıca vusb ana sayfasına da göz atabilirsiniz .

Kullanım ve Özellikler:
  • Fare işaretçisinin 8 yönlü navigasyonu. (uzaktan kumanda düğmeleri - 2,4,6,8, 1,3,7,9)
  • Akıllı hızlı hareket için hızlandırılmış fare hareketi. yani yukarıda bahsedilen gezinme tuşları basılı tutulduğunda fare işaretçisinin hızı artar.
  • Konumu hassas bir şekilde ayarlamak için tuşu bırakın ve adım adım tekrar basın.
  • Sol tıklama - düğme 5
  • Sağ tıklama - düğme 0
  • Fare tekerleği - ses seviyesi ve ses seviyesi+ düğmesi
Resimler:
Usbasp programcı donanımımı bu amaç için kullandım Usbasp kartında bir TSOP1738 lehimlendi.


 Devre şeması: (mevcut usbasp devre şemasına tsop 1738 eklendi)

USB'den 5v besleme alınır. Herhangi bir ek güç kaynağı bağlamamalıyız, bu usb portuna ve hatta sisteme zarar verir...
 Ayrıca atmega328p ile çalışır ancak birkaç kayıt adında bazı değişiklikler gerektirir. Bu denetleyicinin kodu da kaynağa dahil edilmiştir, çünkü bu en yaygın olarak kullanılan arduino yongasıdır.(port klasörü). Varsayılan main.c dosyası atmega8 içindir.

Kaynak kodu: