ir uzaktan kumanda

Başlatan feridunarslan, 31 Ocak 2007, 10:42:26

feridunarslan

merhaba arkadaşlar ir uzaktan kumandayla 4 farklı çıkışı kontrol edebileceğim kumanda devresi ve alıcı devreye ihtiyacım var kumanda devresi için pic12f675 alıcı devre içinde pic16f628 veya 16f876 kullanmayı düşünüyorum elinizde benzer devreler  veya bilgi var mı?yardımlarınız için şimdiden teşekkürler

XX_CİHAN_XX

40khz lık kare dalga programı yap.
gonderıcegın verılerdeki lojık1 lerde bu sınyalı ornegın 1200uS kadar verirsen lojık 0 larda ise 600uS kadar ver.
Bu şekilde basit kodlama mantıgı ile veri gonderebilirsin.Hazır ır protokollerındende faydalanabilirsin.her veriden sonrada 600 uS kadar blank gonderırsen sınyalın bıttıgı anlasılır.Kısacası gonderecegın lojık1 - 0 ları 40khz lık kare dalga sınyalı ıle çarparak(and) ır lede verır ve karsı taraftanda 40khz lık bır ır alıcı aracılıgıyla alıcı pıcın rb0(kesme) girişine baglantı yaparsan gonderdıgın lojık1 - 0 ları aynen alırsın....
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

feridunarslan

teşekkür ederim yapmamı istedigin şeyin bi kısmını anladım galiba verici devredeki pic in cıkışını ve 40 khz de kare dalga üretecek bir 555 entegresinin cıkışını bir and kapısından gecirmemi sonrada ir ledlere vermemi istiyorsun galiba  peki alıcıya bu bilgiyi direkt olarak mı giricem yoksa onun icinde bi yükseltme işlemine gerek varmı varsa bu nasıl olacak

Eagle_Tim

Bukadar uğraşıya gerek yok.. küçük teyp kumandaları var çok değişik modellerde tv kumandaları var.. tuş takımını yapmak yerine hazır almak hem ucuz hemde daha az emek harcanarak daha güzel birşey yapmanızı sağlar..
adığınız kumandanın markasından bakarak gönderme protokolünüde bulabilir kolay bir biçimde ve sağlıklı olarak kullanabilirsiniz..
SONY,PHILIPS,NEC marka IR protokoleri nette kolayca bulunabiliyor birçok markanın protokolü burada mevcut..

http://www.sbprojects.com/knowledge/ir/sirc.htm
Software and Hardware Design...

feridunarslan

PİYASADA BULUNAN KUMANDALARLA YAPABİLECEĞİMİ BİLİYORUM AMA BUNU KENDİM YAOMAM LAZIM YARDIM EDERSENİZ SEVİNİRİM

ipek

http://www.holger-klabunde.de/rc5send.htm sanirim buradaki projeler
isini gorecektir

not=Lutfen Buyuk harfle yazmayiniz forumuzda hos karsilanmamaktadir...

XX_CİHAN_XX

@eagle_tim in dediği gibi hazır kumanda kullanabilirsin fakat illaki kendin yapman gerekiyorsa dediğim şekilde yapabilirsin eger yazılım bilgin cok kuvvetlı degıl ıse senın yukarıda soyledıgın sekılde yapabilirsin.
Yani 40khz lik kare dalga ureten bir 555 osılatoru ıle pıcten gonderıcegın verılerı and  kapısından (4011 olabılır) gecırerek ır lede verebılırsın.Ir alıcının cıkısınıda dogrudan alıcı pıcın rb0 ına baglıyarak verılerı okuyabılırsın.
Ornek:



Tekrar soyluyorum yazılım bılgın kuvvetlıyse şemadakı 4011 e ve 555 e gerek yok.Yazılımsal olarak 40khz lık sınyalı olusturup gonderecegın datalarla carparak teker teker bıtlerı gonderebılırsın. bu durumda bır transıstor ıle kuvvetlendırme yaparak ır lede dogrudan pıcın cıksını baglamıs olursun.Alıcı taraftada dogrudan rb0 a verıler ulasır(interrupt ıle almalısın)Kolay gelsın...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

Eagle_Tim

eğer kendin yapmak istiyorsan yazlımın bilgin kuvetli değilse ve fazla profosyonel birşey yapmak niyetinde de değilsen 555 ile modüle ederek yapmak en mantıklı yol gibi görünüyor, ayrıca bir kapı ile çarpmanıza ve baskı devreyi büyütmenize gerek kalmıyor çünki sistem çok basit 555 reset ucu diye bir uç var, bunu kullandığınızda iş çok basitleşiyor.

sadece 3 adet zaman dilimi belirliyorsun bu zaman dilimleri için birer zaman programı yapıyorsun. start- xx bit data ; start için 1 zaman dilimi örneğin 1,2 ms  ,data içersinde lojik 1 tanım için 800 us  ,  data içersinde lojik 0 tanımı için 400 us gibi 3 zaman programı yaptığını düşünürsek

geri ye kalan 555 entegresinin reset ucunu PIC e girmen olacaktır. bundan sonra start biti için reset ucunu 1.2 ms boynca pasif konuma alırsın böylece
555 1.2 ms boyunca 36-38-40 sana kalmış ve ayarladığın bir frekansta sinyal üretecektir bunuda bir transistörle IR lede girer isen IR sinyali göndermiş olursun daha sonra lojik 1 gönderimi için 555 reset ucunu 800 us pasifize edersin, lojik sıfır içinse 555 reset ucunu 400 us aktif edersin böylece 555 sinyal üretimi duracağı için alıcı da bu süre kadar lojik 0 türemiş olur. fakat şunuda belirtmek gerekir ki alıcıların çıkışı normalde 1 dir start la birlikte sıfara düşer. yani sinyal almadığında 1 sinyal aldığında sıfır anlamına geliyor bu. daha kolay olsun diye bir transistörle bunu not işlemine tabi tutabilirsin. böylece 1 gönderdin mi 1 çıkar alıcı çıkışından yoksa 1 gönderdin mi 0 çıkması gerekiyor bidiğim kadarı ile.. daha önce yayınladığım bir IR-PIC senkronizasyon hibriti vardı alıcı-vericiler kısmında olması gerek transistörle tersleme işlemini oradan görebilirsiniz..

Ancak şunuda unutmamak gerekir bu tip programlarda en zor nokta iki yazılımıdan birinin kesin çalışır olması lazım yoksa hatayı iki tarafta da ararsın ki bu durum hatayı bumayı oldukça geciktirir bu yüzden hazır kumanda önermiştim ama osilaskobunuz varsa problem yok kolay gelsin..
Software and Hardware Design...

feridunarslan

40 khz lik bilgiyi yazılımla hazırlamak daha mantıklı da bu nasıl olacak yazılım bilgim cok iyi değil ama  kotude sayılmaz bu işin mantığını biraz açarmısınız?
hem alıcı hemde verici devre icin

şimdiden teşekkürler

Eagle_Tim

Ozaman yapacağınız iş şu tmr0 ile 40 khz lik bir ınterrupt alt programı yapın datayı gönderirken söylediğim süreler gibi belirlediğiniz süreler için (ör:800 us boyunca) lojik 1 süresi boyunca interruptı her kesmeden sonra tekrar kurun ve her kesmeye girdiğinizde tx pini olarak belirlediğiniz pinin konumunu değiştirin   lojik-1= 101010101010....boşluk.....101010-> lojik= 0    data bilgisi böylece 40 khzlik modülasyonla  belirlediğiniz süre boyunca lojik 1  bilgisini gönderirsiniz lojik 0 için se  yine belirlediğiniz süre boyunca  aynı şekilde gönderme yapmanız yeterli, lojik 0 kare dalga da sıfır anlamında değildir. lojik 1 sinyalinin yarısı kadar bir sinyal olarak kabul edin bunu bunun dışındaki sinyalde üreteceğiniz lojik 0 sabit süreli ve bit ayrımı için boşluk dedim kısım oluyor bu ve bunun için sadece belirlediğiniz süre için tmr0 kesmenizi kapatmak yeterli olur..

Alıcı içinse 40 khz diye birşey klamıyor artık,Daha önce belirlediğiniz lojik süreler boyunca alıcı pininizi test edin gelen bilgi hangi lojik konum süresine denk geliyorsa data registerinizi bcf bsf komutlarıyla 0 bitini değiştirerek RLF yaparak bilginizi kodlayın .. bilgi yi gönderirken son bitten başlamak kaydıyla ilk bitten başlıyo iseninz 7. biti bsf-bcf yaparak rrf komutu kullanın..

daha önce verdğim linkte bunu görsel olarak ve teknik tüm bilgilerle görmeniz mümkün ama bir de buradan izlerseniz çok daha rahat anlarsınız..

http://www.sbprojects.com/knowledge/ir/ir.htm
Software and Hardware Design...

entegrerhan

http://www.antrak.org.tr/gazete/062000/barbar.htm

Buyur Arkadaşım Böyle Bir Devre İşini Görür Sanırım Bu Devreyle 8 Ayrı Cihazı Kontrol Edebilirsin...

OG

SONY SIRC 12 bit icin data alış çok kolay;

@ device pic16F628A, intrc_osc_noclkout, wdt_off, pwrt_on, protect_on, mclr_off, lvp_off


TRISA=%00011000           
TRISB=%00000000
     

CMCON=7                   ' Comparator off
INTCON=%00000000




IRpulse_length var word(13)
xx var Byte
Command	Var	Byte
Command2 Var Byte


clear
Basla:

    Command=0                   ' Alınacak Data sıfırlandı
Command2=0
   


Getstartbits:

    PuLSIN PORTA.3,0,IRpulse_length(0) ' Header bekleniyor
    if IRpulse_length(0) < 200 then
    goto getstartbits
    Endif
    
'Data treninden 12 bitlik veri alınıyor (Command=7bit+Command1=5bit)

for xx=1 to 12
pulsin PORTA.3,0,IRpulse_length(xx)
next  xx   

'Bitler elde ediliyor
displaybits: 
    if IRpulse_length(1) < 100 then
    Command.bit0 = 0 
    Else	
    Command.bit0 = 1
    endif
    if IRpulse_length(2) < 100 then
    Command.bit1 = 0 
    Else	
    Command.bit1 = 1
    endif
    if IRpulse_length(3) < 100 then
    Command.bit2 = 0 
    Else	
    Command.bit2 = 1
    endif
    if IRpulse_length(4) < 100 then
    Command.bit3 = 0 
    Else	
    Command.bit3 = 1
    endif
    if IRpulse_length(5) < 100 then
    Command.bit4 = 0 
    Else	
    Command.bit4 = 1
    endif
    if IRpulse_length(6) < 100 then
    Command.bit5 = 0 
    Else	
    Command.bit5 = 1
    endif
    if IRpulse_length(7) < 100 then
    Command.bit6 = 0 
    Else	
    Command.bit6 = 1
    endif


    if IRpulse_length(8) < 100 then
    Command1.bit0 = 0 
    Else	
    Command1.bit0 = 1
    endif

    if IRpulse_length(9) < 100 then
    Command1.bit1 = 0 
    Else	
    Command1.bit1 =1
    endif

    if IRpulse_length(10) < 100 then
    Command1.bit2 = 0 
    Else	
   Command1.bit2 = 1
    endif

    if IRpulse_length(11) < 100 then
    Command1.bit3 = 0  
    Else	
    Command1.bit3 = 1
    endif

    if IRpulse_length(12) < 100 then
    Command1.bit4 = 0
    Else	
    Command1.bit4 = 1
    endif


'2 adet Data elde ettik, Command ve Comman1
'Bu 2 data kumandadan gönderilen datalardır.


goto Basla

end
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

nonstradam

feridunaslan aşağıdaki linki bi incelermisin orada pbp ile yazılmış ir verici alıcı source kodlarını ve şemaları vermiştim 38KHz lik sinyalde PIC içerisinde üretiliyor yani harici bir osilatöre gerek yok bizzat denedim gayet güzel çalışıyor. umarım işini görür çalışmalarında başarılar...

https://www.picproje.org/index.php/topic,2366&highlight=

feridunarslan

merhaba arkadaşlar devreleri yaptım gayet güzel calışıyor verici 38khz veri gönderiyor 3 bitlik bir bilgi bu akıcı aldıgı bilgileri işleyip dallanması gereken yerlere dallanıyor buraya kadar hic bi sorun yok sorun su alıcının 8 cıkışı var bu cıkışlara ledler bağlı ve ben bu ledleri 4 veya 5 farklı efektte calıştırmak istiyorum yani 5 ayrı algoritma işte bu algoritmalar arasında gecikmeler meydana geliyor bunu şöyle izah edeyim kumandamda 5 tuş var her birisi farklı bi efekt için kısa efektlerde sorun yok ama efektler uzarsa efektin degişebilmesi icin kumandadaki tusa biraz uzun basmam gerekiyor bunun nedeni ne olabilir ve nasıl cozebilirim yadımlarınız icin teşekkürler

sitenindelisi

Herhangi bir efekt alt rutini devam ederken, eğer yeni bir start sinyali gelip gelmediği kontrol edilmiyor ise, doğal olarak rutin bitip kontrol rutinine dönülünce algılanacaktır. En sağlıklı yollar;
1. ir sinyalin giriş yaptığı pin, EXT_Int desteği olan bir pin seçilir ve yazılım ile kontrol altında tutulur. Ortalama programlama bilgisi ile dahi gayet sağlıklı ve sinyal kaçırmaksızın çalıştırılabilir. Biraz donanım bilgisi gerektirir.
2. Alt rutin içerisinde iken kontrol periyodik olarak yaptırılır. Kod sarfiyatına sebep olur, kaçırma ihtimali çok azalsa da hala mümkündür.
3. Program yapınızı bilmediğim için varsayım üzerine konuşuyorum bu ihtimali. Kontrol rutini içerisinde, efekt rutinine git gel yaptırırsınız.( En kötü şekli aklıma gelen)