STM32 Örnek Projeler: RC6 IR Uzaktan Kumanda Alıcısı

  • 01-04-2019 10:12
  • 1634

Çok uzun yıllardır hayatımızda bir çok alanda  kablosuz iltişim kullanılmakta. TV, müzik seti, kablosuz klavye, kulaklık gibi sayabileceğimiz birçok kablosuz cihaz kullanılmaktadır. Kablosuz cihazların sağladığı kullanım rahatlığı bunun giderek yaygınlaşmasını sağlıyor. Kablosuz iletişimde farklı yöntemler kullanılıyor. Bugün kablosuz iletişim yöntemlerinden biri olan Infrared iletişim konusunu inceleyeceğiz.

Infrared adındanda anlaşılacağı gibi kızıl ötesi ışıkla iletişim yöntemidir. Vericide bulunan bir IR diyot belirli bir frekansta taşıyıcı dalga ile istenilen veriyi kızıl ötesi ışık yolu ile yayar. Alıcıda bulunan IR alıcı ise yine aynı taşıyıcı frekansa duyarlı devre sayesinde vericiden gelen sinyali filtreleyerek taşıyıcı dalgadaki veriyi alır. Taşıyıcı dalga için 30Khz'den  76Khz'e kadar farklı frekanslar kullanılıyor. Bu frekanslara duyarlı alıcılar dijital çıkış verecek paketler halinde piyasada kolaylıkla bulunabilir. Alıcılarda 3 pin bulunuyor 2'si güç bağlantısı diğeri ise çıkış.

STM32 serisi mikrodenetleyicisi ile  yapacağımız örnekte alıcıyı genel amaçlı girişlerden birine bağlayacağız ve gelen sinyali timer kullanarak çözeceğiz.

Kullanacağımız donanım STM32f103 geliştirme kartı IR alıcı 128x64 oled ekran. Vericimiz RC6 protokolü ile çalışıyor. Tasarlayacağımız alıcı ile bu protokolü çözümleyeceğiz gelen veriyi alarak ekranda göstereceğiz. Öncelikle RC6 Philips protokolünü inceleyelim.

Philips rc6 protokol

Philips RC6 protokol

STM32 mikrodenetleyicinin gpio pinlerinden birine IR alıcıyı bağlayacağız. Bu örnekte B protunun 0. pinine bağlanmıştır. B6,B7 pinlerine ise oled ekran bağlı, ekran ile olan iletişim I2C protokolü ile sağlanıyor. 

Sinyalin minimum bit genişiliği 444 mikrosaniye. Timerı 444 mikrosaniyede bir interrupt üretecek şekilde ayarlıyoruz, bu şekilde her bit değişiminde kesme fonksiyonu çalışacak girişten gelen sinyal okunacak. Gelen sinyal bir bütünün parçaları olarak birleştirilecek ve sonuçta vericiden gelen veriyi doğru şekilde almış olacağız.

Yukarıdaki protokol 6 bit genişliğinde bir palsle başlıyor, bunu sinyalin başını belirlemek için kullanacağız. Daha sonraki sıfırda programı senkronizasyon için hazırlayacağız girişten gelen bit 1 olduğunda timerı sıfırlayacağız bu şekilde senkronizasyon sağlanmış olacak. Daha sonra gelen 12 biti atlayacağız. Address verisine ulaştığımızda Manchester kodlama ile kodlanmış 8 biti alıp çözeceğiz. Daha sonrada aynı işlemi command için yapacağız. Bu işlemler basit bir döngü ve karşılaştırma ile yapılıyor. Manchester kodlama değişime dayanıyor, bir bit 2 aşamadan oluşuyor 1'den 0'a geçiş 1, 0'dan  1'e geçiş 0 olarak değerlendiriliyor, bunun sonucu olarak 8 bitlik bir sonuç için 16 bitlik veri gerekiyor.

Kullandığımız HP RC6 verici Philips'in protokolünden biraz farklı olduğu için tuşlara ait veri 52-60 bit arasında kalan 1 baytlık alan içinde bulunuyor. Örnek programda bu veriyi alıyor ve ayrıca Philips rc6 protokolünü de destekliyor.

Program CoIde 1.7.8 ortamında stm32f103 için yazılmıştır buradan download edebilirsiniz.