Home Map Index Search News Archives Links About LF
[Top bar]
[Bottom bar]
Sağlanan diller: Castellano  Deutsch  English  Français  Italiano  Nederlands Turkce  
[Photo of the Author]
Ismael Ripoll & Elisa Acosta tarafından

Yazar hakkında:

Ismael Ripoll, 1996 yılında Valencia Polytechnic Üniversitesinden Ph.D. DISCA Bölümünde işletim sistemleri profesörü.Araştırma ilgi alanları gerçek zaman programlaması ve işletim sistemleri.1994 yılından beri Linux kullanıcısı.Hobileri:Pryrenee Dağlarında yürüyüş,kayak,ve ev elektronikleri.

Elisa Acosta, Valencie Polytechnic Okulunda bir bilgisayar mühendisi.Şu anda 1900'lü yılların sorunları üzerinde Indra (bir bilgisayar firması)'da çalışıyor :-)

Bu makale Elisa Acosta'nın son yıl projesinde yazdıklarına dayalıdır.

İçindekiler:

RT-Linux III

Çeviri : Şerife Şentürk

[Illustration]

Abstract:

Basit bir elektrik devresi kullanılarak,kızıl ötesi uzaktan kontrol'den RT-Linux kabulsıraları elde edebiliriz.



 

Bilgilendirme

Bu makaleyi anlamak için elektronik ve donanım bilgisine gereksiniminiz yok,her ne kadar kızıl ötesi uzaktan kontrol için kullanılmış donanım parçası hakkında biraz konuşacak olsak da.

"lirc" (Linux Infra-red Remote Control) adlı bir proje Ralph J.K.MetzlerHREF="http://fsinfo.cs.uni-sb.de/~columbus/lirc/">http://fsinfo.cs.uni-sb.de/~columbus/lirc/) tarafından Linux "normal" servisleri kullanılarak geliştirilmiş kızıl ötesi alıcı sürücüsü için başlatıldı. ' "normal"'ile ,bunun RT-Linux gerçek zaman uzantısını kullanmadığını kastediyorum.Bu makaleye aynı konuyla başlıyoruz,ancak RT-Linux'a dayandırılmış çözümlere bir göz atın.

 

Genel açıklama

Projemizin ilk kısmında, bilgisayarı ve kızıl-ötesi alıcıyı birleştirmek için gereken donanıma bir göz atacağız.İkinci kısımda esas zaman Linux'u kullanılarak kızıl ötesi alıcıdan işaretleri nasıl derleyebileceğimizi göreceğiz.Sadece birazcık donanıma ihtiyacımız olacak:bir Sharp (IS1U60) kızıl-ötesi alıcısı,birkaç tane kablo ve konnektörler.

IS1U60 kızıl-ötesi alıcısı bir elektronik harikası;üç topluiğnetıkacıiçinde (ikisi güç için ve birisi yer için).Üçüncü iğnede bir TTL seri işareti sağlayarak, hemen hemen kabul ve çevirme işlemlerinin hepsini yapmak mümkün


Sistem ve elektrik bağlantısına evrensel bakış

PC'ler her türlü dijital dışyüzeye tıka yapmak için konektörlere sahiptirler(kipçözerler,yazıcılar,SCSI,klavyeler,ekranlar,vb...),fakat basit elektronik maddelere bağlanmamızı sağlayan hiçbirşeye.Başka bir deyişle,standart bir PC bilgi kazanım kartına sahir değildir.Sizin belli bir sırayı okuyabilmenizi sağlayacak bir kart.

Şanslıca,paralel kapı(aynı zamanda seri kapı) üretken bir giriş/çıkışkapısı olarak kullanılabilir.Birçok dış yüzey bu özelliği PC ile iletişim için kullanırlar,Iomega ZIP sürücüsü gibi.

Paralel kapıyı kızıl-ötesi alıcısından bilgi elde etmek için kullanacağız.Kızıl-ötesi alıcısı sadece bir tane basit bilgi pin'ine sahip olduğundan,parelel kapının sadece bir tane pin'ine ihtiyacımız olacak.

 

Kızıl ötesi alıcı

Daha önce bahsedildiği gibi,IS1U60 özellikle evcil işlemler için alıcı yapmak için düzenlenmiş kızıl-ötesi alıcıdır.

Değişik modülasyon ve kanun şeklinde toplamalar birleştirildiğinden,uzaktan kontrol işareti gerçektem karmaşıktır.Bu işareti inceleyelim.

Uzaktan kontrol işareti taşıyan fiziksel ortam, kızıl-ötesi spektrumda ışık bir dalgadır. Bu çeşit ışık ultraviyole ışıkları gibi zararsızdır. Kızıl-ötesi ışık insan gözüne görünmez,fakat yarı iletken ortamlara böyle değildir.Kızıl-ötesi ışık kaynakları güneş,akkor ampuller,LED diyodları vb.Kızıl-ötesi LED işaret çıkarmak için uzakatan kontrol tarafından kullanılır.


Infra-red light Visible ultraviolet light

Bütün yarı iletken ortamlar ışığa karşı duyarlıdır(herhangi bir renkte/frekansta).Bu yüzden birçok yarı iletken ışıktan korunmak için siyah plastik içince saklanır. Bir kızıl-ötesi aygıtı temelde sadece kızıl-ötesi ışığın geçmesini sağlayan bir cam üzerindeki yarı-iletken diyod'dan yapılır.

Kızıl-ötesi aygıtı bu şekilde,kaynağı ne olursa olsun herhangi kızıl-ötesi ışığı saptayabilecek şekilde inşa edilir. Uzaktan kontrol modelistleri uzaktan kontrol'den yayılan ışığı diğer ışık kaynaklarından ayırabilmek için buna şifreleme özelliği eklemek zorunda kaldılar. Uzaktan kontrol'den yayılan sinyal 32ve 40 Khz frekansları arasında ayarlıdır, bu biraz da yapıya ve modele bağlıdır.En yaygın olduğundan uzaktan kontrol frekansının 38 Khz olduğunu düşünelim.Makinelerin %90'ından daha fazlası bu frekansı veya buna çok yakın olan bir değeri kullanır.

The infra-red receptor.

Şunu unutmamak gerekir ki sinyalin yayılmasını sağlamak için yapılan herşey resepsiyon sırasında kaldırılmalıdır.Eğer bir kızıl-ötesi ışık yayarsak,bunu kabul etmemiz grekir;eğer bu sinyal bir 38Khz taşıyıcısına ayarlıysa,o zaman bu taşıyıcının ortadan kaldırılması gerekir.Bu demodülasyon bir tek bandlı geçiş frekans filtresi ve bir integral doğrultucu filtresi ile analog şekilde yapılır.

38 Khz'ya ayarlı kızıl-ötesi ışık emitör (uzaktan kontrol) ve alıcı(TV,video,vb.)arasında kullanılan bir iletişim ortamıdır.Şimdi bilginin nasıl verildiğine karar verelim, bu da hangi parçaların uzaktan kontrol üzerindeki basılı düğmeyi temsil ettiğini söylemek oluyor.

Bilginin şifrelenmesi yapıya bağlıdır, fakat şanslıca,bu projede bu metodları bilmemize gerek yok, biz onları sadece karşılaştıracağız.

İşaretin modülasyonu düşünülerek, bilginin seriler halinde yayınlandığı kesin.Bir parçanın arkasından bir tane ve buna bağlı olarak kabul kısmında bir tane bilgi akıntısına ihtiyacımız olacak.

Bu takip eden, algılayıcı IS1U60 teknik özelleştirmesinden kaynaklanır. (http://ns14.sharp.co.jp/ecg/unit/is1u60/is1u60-fea.html), ve bu iç yapıyı temsil eder.İki sol oklar bir elektrik sinyaline dönüştürülen kızıl-ötesi ışığı tensil eder.Sinyal genişletilir,belirgin parça ortadan kaldırılır, 38 Khz'ya yakın frekansların geçmesini sağlamak için filtreden geçirilir,düzeltilir(demodülatör ve integratör) ve son olarak uygun bir TTL sinyaline dönüştürülür.

 

Paralel Port

Paralel kapı yazıcılarla iletişim sağlamak için düzenlenmiştir,fakat şimdiye kadar, çünkü PC'ler üzerinde uygun benzer hiçbirşey yoktu,bütün dışyüzeyleri bağlamak için kullanılırdı.

Şu anda,paralel kapıyı gerçek bir üretken iletişim kapısına dönüştürmek için en azından iki tane değişme(ECP,EPP) vardır.Bizim projemiz paralel kapıdan gereken fonksiyonlarla ilgilenmek,sonuç olarak herhangi birdeğişik biçim işe yarayabilir.Gerçek olarak,sadece bir tane IN akıntısına ihtiyacımız olacak.

State register
Detail of state register

PC,üç tane 8-parça yazmaçla parelel kapıyı kontrol eder.Bir bilgi yazmacı(0x378),bir durum yazmacı(0x379) ve bir tane de kontrol yazmacı(0x37A)vardır.Parentazler içindeki değerler ilk parelel kapının genel yazmaç adreslerini temsil ediyor.

Kontrol yazmacının içine yazmak,kapıyı proglamlamamıza izin verir. >Yazmacın 8 parçasından sadece parça4 kullanılır.Bu parçanın içine "1" yazmak,yüksek seviyeden(5 volt) alçak seviyeye(0 volt)giderken ACK durumunu ortaya çıkardığı zaman,kapı donanımının bir duraklama yapmasına sebep olur.

Bilgi yazmacı bağlayıcının noktalarına açık bir kapıdır.Bu kapının içine yazdığımız her bilgi,parelel bağlayıcının 2-9 noktalarında görünecektir.Bu kapı sadece bir OUT kapıdır.Kızıl-ötesi alıcının sağladığı değerleri okumamız gerektiğinden,bu kapı bizim için kulanışsızdır.Bir girdi kapısına ihtiyacımız var.

Durum kapısı,yazıcı kontrol çizgisinin durumu hakkında bilgi verir. >Bu çizgilerden,yazıcı durumu hakkında bilgisayara bilgi verebilir.Bu çizgi,yazıcı(veya bir dış makine) tarafından yönetilir ve bilgisayar bunları IN çizgiler olduklarından okur.Bu bir 8-prça yazmacı olsa bile,sadece en belirgin 5 parça çizgilere bağlıdır,diğer 3 parça her zaman sıfırdır.Çizgi numaraları,yazıcıyla bağlanırken sahip oldukları işlevsellikten sonra isimlendirilirler,fakat bu çizgiler aslında herhangi bir şey için kullanabileceğiniz üretken dijital çizgilerdir.

Bu 5 çizgi arasında,bir dijital giriş çizgisi olarak da kullanıldığındann ilginç olanı nokta 10'dur(yazmacın parça 6'sı),fakat yukarıda da bahsedilidiği gibi,çizginin durumu değiştiğinde(5'den 0'a) aynı zamanda duraksamalar da yaratabilir.

 

Bilgisayara bağlanış

Yonganın ve bağlama enerjisinin fiziksel tanımmı

Kızı-ötesi alıcısının 4.7 ile 5.3 voltları arasındadır.Eğer voltaj 4.7'nin aşağısına düşerse,alıcı çalışmayı keser.Bu güç sağlama voltajı değişik yollardan elde edilebilir:

  1. Bateriler kullanarak.Bu durumda seride bir küçük(veya eski)1v5 baterisi ile birlikte bir 4v5 baterisi kulanmak daha iyi.Toplam voltaj 6v olmayacak,fakat 5.5v olacak,çünkü küçük 1v5 baterisi tam güç sağlamayacak.

  2. Düzenlenmiş bir güç sağlama kaynağı kullanarak(alternatif akımı düşük voltajlı direk akıma dönüştüren alet).Bunu inşa etmesi kolay olsa bile,bu ,bu makaleyi aşan bir konu.Elektronik aletleri aldığınız dükkanlardan böyle bir genel amaçlı güç kaynağı alabilirsiniz.

  3. Bilgisayardan 5 volt alarak. Bir bilgisayarda,iki çeşit kablo vardır:düz kablolar(bilgiyi taşır) ve güç kaynağı için koyu kırmızı,siyah ve sarı kablolar.Kırmızı kablo 5 voltdur ve siyah olan 0 voltdur.

Alıcıya güç sağlamak için,siyah kabloyu alıcının nokta2'sine ve kırmızı olanı(5v) nokta3'e bağlayacağız.

Parelel kapıya olan bağlantı,parelel kapının nokta1'ini nokta10'a ve parelel kapının nokta2'sini nokta18'e bağlamak kadar kolay. GND(toprak)'nin iki yere bağlanması gerektiğini unutmayın:güç sağlama toprağı ve parelel kapı toprağı.

Bu bağlantıları yapmak için herhangi bir çeşit kablo kullanabilirsiniz.

 
REAL-TIME module
#define PERIOD 100
#define SIZE 8192
#define FIFO_ZERO 0
#define LP0 0x378 /*Address /dev/lp0*/
#define STS LP0+1

RT_TASK task;

//---------- Real time task
void Real_Time_Task(){	
  unsigned short data1, data2=0;
  unsigned long  cont = 0L;
  
  while(1){
    // Read the port value
    data1=inb(STS) & 0x40;
    	
    // If no change.. 
    if ( data2 == data1) {
      // Increment the counter.
      cont++;
    } else {
      
      // Send the counter value.
      rtf_put(FIFO_ZERO, 
              (char *) &cont, 
	    sizeof(cont));
      cont = 0L;
      data2 = data1;
	
    }
    rt_task_wait();
  }   
}   

//------------- Main program
int init_module(){
  RTIME now = rt_get_time();

  // Create communication FIFO with Linux.
  rtf_create(FIFO_ZERO,SIZE);

  // Create the real time task.
  rt_task_init(&task,Real_Time_Task,1,3000,4);

  // Make it periodic.
  rt_task_make_periodic(&task,now+3000,PERIOD);

  return 0;  // Everything worked.
} 

//------------- To unload the module
void cleanup_module(){
  rt_task_delete(&task);
  rtf_destroy(FIFO_ZERO);
}  

Parelel kapı ACK noktasının durumunu ölçmenin en basit yolu, parça durumunu okuyan(nokta) periyodik bir ödev yaratmaktır.Eğer nokta aynı durumdayken bir değişiklik olursa,sayacı arıtırız.Bu şekilde sayaç tıkırtıları aynı seviyede kalan parçaların zamanını temsil eder.Eğer bir değer değişikliği yaparsak,bir FIFO yolu ile sayıcı değerini normal Linux kullanıcı vazifesine göndeririz.Bir Linux ilerlemesi FIFO okuması için bekliyor olacaktır.Okuma değerleri düşük seviyedeki işaret zamanına uygundur ve yüksek seviyedekilere.

Alıcı tarafından verilen işaretin doğru bir ölçümünü almak gereklidir,doğrusunu söylemek gerekirse,bu bir esas-zaman sistemini kullanmanın tek sebebidir. Basılı düğmeyi tanımlamak için esas-zaman vazifesi tarafından verilen değerlerin dizilişini karıştırmanın bir zaman sınırlaması yoktur ve bu normal bir Linux işlemi ile yapılabilir.

ACK noktasındaki değişmeleri ölçmenin bir başka yolu da duraksama7 üzerinde bir duraksama yönetimi kurmaktır.Bu yöntemle,bir planlayıcı veye bir periyodik vazifesine ihtiyacınız yok.

init_module fonksiyonu vazifeyi indirir.Ödev için FIFO iletişimini yaratmanız,ödevi yaratmanız ve son olarak onu periyodikleştirmeniz gerekmektedir.Periyot değeri(100 RT-Ticks,yaklaşık 90 mini saniye) test etmek için ve hata düzenlenmesi için verilir.Periyot ne kadar kısa olursa ölçümün çözümü o kadar yüksek olur,kısa periyotlu dar bir döngü daha çok CPU gücü tüketir.

Takip eden kullanıcı programı /dev/rtf0 makinesinden okuduklarını standart çıktıya gönderir.Bu basit programla ,bir düğme basıldığında kzıl-ötesi alıcıdan gönderilen her çerçevenin şeklini "see" 'da görebiliriz.

Kullanıcı programı
#include 
#include 
#include 			
#include 
#include 
int main(){
  int fd;
  unsigned long cont;
  fd=open("/dev/rtf0",O_RDONLY);
  while(1) {
      read(fd,&cont,sizeof(cont));
      if ( cont > 700) printf("\n");
      printf("%d ",cont);
      fflush(stdout);
    }
  return 0;
}   

Programda beliren 700 değeri tahmini bir değerdir ve iki ardışık çerçeve arasındaki minimum zaman miktarını temsil eder.

Uzaktan kontrolcülerin çoğu benzer bir kızıl-ötesi sinyali kullansa da düğmelerin şifrelenmesi farklı olabilir.Basılı düğmeyi tanımak " form tanımı"'un bir sorunu,"esas-zaman"'un değil.Bir programın belli bir komutu tanıyor yapmanın en iyi yolu ,bu programdan gelen çıktıyı izlemek ve uzaktan kontrolümüzün bilgiyi nasıl verdiği hakkında bir fikir edinmektir.

Basitleştirilmiş terimlerde,bir uzaktan kontrol düğmesine basıldığında ekranda sayı dizisi olarak gördüğümüz bir diziyi gönderdiğini söyleyebiliriz.Eğer düğmeyi basılı tutarsak,komut aynı diziyi periyodik bir şekilde(SONY uzaktan konrolleri hariç) gönderecektir.

Şimdi bunu izleyelim(gerekli esas-zaman modüllerini kurmayı hatırlamanız gerekmektedir:FIFO ve planlayıcı)


  # modprobe rt_fifo_new
  # modprobe rt_prio_sched
  # insmod ir
  # ir_get
  0
  126509 13 6 23 7 13 7 12 7 12 7 12 7 12 8 11 8 11 8 11 8 11 8 11 19 11
  1081 13 6 23 7 12 7 12 8 11 8 11 8 11 8 12 7 12 8 11 8 11 8 11 19 11
  1080 14 6 23 7 12 7 12 7 12 7 12 8 11 8 11 8 11 9 11 7 12 8 11 19 11
  1080 13 6 24 6 13 7 12 7 12 7 12 7 12 7 12 8 11 8 11 8 11 8 11 19 11

Düğme kaldırıldığında,bu komutun aynı diziyi tekrarladığını görebiliriz.Hatırlanacak diğer bir nokta da ölçüm hatasıdır.Değişik çerçevelerin şekilleri 1'in değişik biçimine sahiptirler, bu da özellik hatasını temsil eder.

Bir tanıma yazılımını programlamak için,komut arfından gönderilen her iletim birimini toplamanız gerekmektedir,ve daha sonra,her iletim birimi geldiğinde, bunları iletim birimlerini topladığınız dizilimdekilerle karşılaştırısınız(bir t veya -1 hata kabul ederek).Bu program bir alıştırma olarak okuyucuya bırakılıyor.

Bazı uzaktan kontroller,her düğme basılışında,katı bir iletim birimi yayarlar,hep aynı düğmeyi bassak bile.İşte ne yapıldığı:bir düğmeye bastığımız zaman,"FrameA" diye adlandırdığımız bir iletim birimi gönderirler,eğer serbest bırakır ve tekrar düğmeye basarsak,"FrameB" yayarlar,tekrar basışta "FrameA" yayarlar ve böyle devam eder.Eğer düğmeyi basılı tutarsak,aynı iletim birimi birçok kez çıkar.Bu şekilde,alıcı bir uzunbasış ve iki başarılı basış arasındaki farkı görebilir.Sizce 11(onbir) düğme dizisi,yeni uzaktan kontrol üzerinde nasıl yönetilir?0

 

Kaynaklar

 

Bu makale için talkback formu

Her makalenin kendine özgü talkback sayfası vardır.Bu sayfada bir görüş belirtebilir veya diğer okuyucuların görüşlerine bakabilirsiniz.
 talkback sayfası 

Görselyöre sayfaları LinuxFocus Editör takımı tarafından korunmaktadır
© Ismael Ripoll & Elisa Acosta
LinuxFocus.org 2000

LinuxFocus'a görüş göndermek veya hata raporlamak için burayı tıklayın
Translation information:
es -> -- Ismael Ripoll & Elisa Acosta
es -> en Georges Tarbouriech
en -> tr Şerife Şentürk

2000-04-23, lfparser version 1.5 tarafından oluşturuldu