IR alıcı ve Güç devresi bir arada olursa ?

Başlatan XX_CİHAN_XX, 14 Ağustos 2008, 14:45:56

XX_CİHAN_XX

Alıntı yapılan: "selvi"hocam dun aksam 6 saat devreyi kurdum.7 sayi artmis.yani 7 kez kendi kendine tetiklenmis.rb0 kesmesini kullandim.kesme olustuktan 300msn gecikme koydum ve kesme kosulu hala devam ediyorsa bunu cisim tarafinda kesilmis kabul et.simdilik yeni bir durum yok.hala kendi kendine tetikleme yapiyor.
 38khz frekansi nasil urettiniz?ben pwm sistemi ile urettim.555 ile 38 khz uretmek daha saglikli mi?birde asembly komutlariyla 38khz uretmek var.hangisi en sagliklisi?
TSOP1738 datasheet'inde optical test kisminda grafikler var.38khz 20msn peryotta 1msn(30 darbe ) kadar gonderiyor19msn ir isigini kesiyor.bilmiyorum sanki yanlista grafigi okumus olabilirim.linki asagidadir.optical test sinyal kisminda bu durumu anlatmis.ir led olarak TSAL6200 kullanmis.
http://www.sunrom.com/files/TSP17xx.pdf

Bu hata vericinin kararsızlığından kaynaklanabilir.
asm ile yada 555 ile frekans üretmen arasında bir farklılık yok. Tamamen aynı. 38khz için,
T=1/F
T= 26uS dir.
Yani 13uS high, 13uS low şeklinde kesintisiz bir kare dalga üretmen gerekir. Eğer bu kare dalgayı timersiz üretirsen picin başka hiç bir işle uğraşmaması gerekir. Buna dikkat etmelisin.
Örnek asm programı:
main
       bsf     out
       nop
       goto   $+1
       goto   $+1
       goto   $+1
       goto   $+1
       goto   $+1
       goto   $+1
       bcf     out
       nop
       goto   $+1
       goto   $+1
       goto   $+1
       goto   $+1
       goto   $+1
       goto   main

Bu programla 4mhz lik xt için 38khz lik kare dalga üretebilirsin.
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.

XX_CİHAN_XX

@selvi yukarıda yazdıklarıma ek olarak şöyle bir yöntemde deniyebilirsin yazdıktan hemen sonra aklıma geldi.
Alıcıyı çok kısa aralıklarla dinlendirebilirsin. Bu daha sağlıklı çalışmasını sağlayacaktır.
Şöyle ki; senin vericin yukarıdaki gibi 38khz lik palsleri her daim göndermesin. Atıyorum her 100ms de bir 1ms kadar sustursun (tabi 1ms lik susma sana sorun teşkil ediyorsa dahada kısaltabilirsin yada uzatabilirsin. Bu süreleri örnek olarak veriyorum)
1ms sonra, 100ms boyunca kesintisiz göndermeye devam etsin. Bu şekilde her 100ms debir 1ms kadar alıcı dinlensin.(bu süreyi uzatabiliyorsan biraz daha uzatmanda fayda olabilir)
Buda bir yöntem olarak aklında kalsın kanımca işe yarıyabilir.
Kolay gelsin.
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.

selvi

hocam ben programi pbp ile yaziyorum.programda rf kismi oldugu icin pbp ile kontrol daha kolay oluyor.rf ile asembly karmasik.bir ara ugrastim.bana karmasik geldi.
ir verici icin pbp'da asembly kodlarla 38khz urettim,soylediginiz bicimde.ir sinyali belli surelerle dinlendirme konusunda:pbp ile komut sureleri belirgin değil,en azinda ben bu yonlu bir bilgiye ulasamadim.
 ir dedektor(tsop1738)icin datasheetinde yanlis anlamadiysam her 10msn peryotta yaklasik 9msn ir sinyali susturuluyor.her 10msn lik peryotta 30 tane 38 khz darbesi yolluyorken,geri kalan surede ir sinyali susturuluyor.
   zaten bu tarz bir program kendi icinde bir şifreleme gibi oluyor.
ama sorun pbp ile alicida bu durumu programla yapamiyorum.verici de sorun yok.
http://www.sunrom.com/files/TSP17xx.pdf
Yaşam anlamlandırıldıkça kutsaldır....

XX_CİHAN_XX

Pdf teki yapılan işlemler test niteliğinde. O şekilde yapmak zorunda değilsin. 9ms susturmak senin için sorun değilse aynen o şekilde yapabilirsin. Benim yukarıda bahsettiğim gibi olmuş olur böylece.
Ben pbp den anlamam. Sana tavsiyem 38 khz lik sinyali ve bunun gibi kritik noktaları asm ile yap.
Alıcı taraftada şöyle bişi yapabilirsin. tam 30 darbe geliyo mu diye saymana gerek yok.
İlk etapta sinyal var mı yok mu.
Yoksa ne kadar yok ?
9Ms mi daha mı fazla.
9ms sonra tekrar sinyal gelkiyorsa sorun yok.
10ms oldu hala sinyal yok demekki engel var****
gibi bir algoritma bence sorunsuz çalışır tabi pdf te 9 yazıyor diye 9ms kadar dinlendirmek zorunda değilsin. Nihayetinde bu bir ölü beklemedir. 9Ms nin altında geçiş olabilir diye düşünüyorsan bu süreyi daha uygun seviyeye çekebilirsin.Bu sana kalmış.
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.

selvi

hocam bu belli surelerle ir sinyalini susturma durumunu yapamadim.asembly ile denedim.bir kac deneme yaptim.tutturamadim.isin icine ek islemler girince olusturulan dongu bozuluyor.sinyal kesildiginde alici kisimda bunu rapor etmesi gerekiyor.(ornegin:sinyal kesildiginde ir alici kismi ver=10 bilgisi yollayip, ben bu bilgiyi farkli bir rf alici devresinde gormem gerekiyor.her bilgi sayac degerini 1 artiracak).  
  daha dogrusu normal donguyu de(10msn lik peryotta;1msn sinyal ve 9msn sinyal susmasi)yapamadim.
  diger bir nokta; ben sinyali şifreleme sistemi ile yapsam bile parazitik durumlar bunu kesilme olarak algilayacak.sizin belirttiginiz bicimde bunun onune gecmek icin her sinyal kesilmeden sonra bir gecikme koymak, eger hala kesilme devam ediyorsa bunu farkli bir cisim tarafindan kesilme olarak kabul gorsun seklinde.parazitik durumda şifreli yada şifresiz sinyal yollama konusunda ayni noktaya geliyor.cunku ben kesilme durumunu okurken herhangi bir sinyale gore değil şifrenin ir goze ulasmamasi durumuna gore sinyal kesilmis kabul ediyorum.
 sony tv kumanda benzeri sistemler kullansamda sinyal kesilme durumuna gore islem yapiyor.ben yanlis anlamisda olabilirim.normal tv kumandasi ornegin:1 nolu tus ile rolenin kontagi kapatsin,2 nolu tus ile rolenin kontagi acildi.2 durumda da kumanda da şifre sistemi var.fakat ben sinyalkesilmeye gore islem yaptigim icin şifrelemenin fazla bir faydasi yok gibi. bu belirtiklerim yanlis mantik uzerinde kurulmus olabilir.
eger oyle bir durum varsa kendi kendine cikis vermesinin onune gecmek isin en temeli oluyor.
Yaşam anlamlandırıldıkça kutsaldır....

XX_CİHAN_XX

@selvi burada Rf nerde devreye giriyor?
Verici sadece sinyal gönderip başka hiç bir iş yapmıyor mu?
Alıcı Ir sensörü okumaktan başka ne işler yapıyor?
Okuduğu bilgiyi nasıl değerlendiriyor?
Bunu biraz daha açık yazarsan senin için assebly ile basit bir kod örneği hazırlayabilirim.


Sensöre sinyal gönderme ve okuma işleri dışında yapılan işler varsa
Timer sayacını devreye alman ve bu işi interruptlı yapman gerekir.
Sen bana tam olarak gönderme ve alma dışında yapılan işleri özetlersen sana basit bir kod hazırlayabilirim.
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.

selvi

verici sadece ir sinyali yolluyor.ir gozun oldugu kisimda, sinyal kesilme algilamasi oldugunda  bir veri(ornegin:10 bilgisi)yolluyor.
   3.bir devrede lcd var.alici olarak.gelen her veri sayisina gore sayac degeri 1 artiyor.bunu lcd ekraninda gosteriyor.ornegin:3 kez ir goz kisiminda sinyal kesilme algilamasi oldugunda 3.devrede lcd ekraninda sayac=3 yaziyor.3.devre kismi karisik olabilir.bu kisim cok onemli değil.
Yaşam anlamlandırıldıkça kutsaldır....

XX_CİHAN_XX

İşte verici programın:
;YAZAN: Cihan YILDIRIM
;TARIH: 24.08.08
;SAAT: 23:42
;IR VERICI PROGRAMI
		LIST		P=16F628A
		INCLUDE		"P16F628A.INC"
		__CONFIG	_INTRC_OSC_NOCLKOUT & _WDT_OFF & _LVP_OFF & _MCLRE_OFF
		ERRORLEVEL	-302
#DEFINE	DQ			PORTB,0			;IR VERICI LED CIKISI
		ORG			0x00
		BSF			STATUS,5
		CLRF		TRISB
		MOVLW		0x87
		MOVWF		OPTION_REG		;PULLUP OFF, PRE 1:256
		BCF			STATUS,5
BEGIN	CLRF		TMR0
		BCF			INTCON,T0IF
MAIN	CALL		_38KHZ			;65MS BOYUNCA(YAKLAŞIK 2340 KEZ)
		BTFSS		INTCON,T0IF		;38KHZ LIK KAREDALGA URETILIR
		GOTO		MAIN
		BTFSS		TMR0,4			;YAKLASIK 4MS KADAR SINYAL SUSTUR
		GOTO		$-1
		GOTO		BEGIN			;TEKRAR BASTAN BASLA
_38KHZ  BSF			DQ
        NOP
        GOTO 	    $+1 
        GOTO 	    $+1 
        GOTO 	    $+1 
        GOTO 	    $+1 
        GOTO 	    $+1 
        GOTO 	    $+1 
        BCF			DQ
        GOTO 	    $+1 
        GOTO 	    $+1 
        GOTO 	    $+1 
		RETURN
		END
;NOT: VERICI CIKISI TERSLENMEDEN OLDUGU GIBI IR LEDE AKTARILMALIDIR.
;KUVVETLENDIRME YAPILACAKSADA TERSLENMEDEN YAPILMALIDIR.


Buda alıcı programın:
;YAZAN: Cihan YILDIRIM
;TARIH: 25.08.08
;SAAT: 00:06
;IR ALICI PROGRAMI
		LIST		P=16F628A
		INCLUDE		"P16F628A.INC"
		__CONFIG	_INTRC_OSC_NOCLKOUT & _WDT_OFF & _LVP_OFF & _MCLRE_OFF
		ERRORLEVEL	-302
#DEFINE	DQ			PORTB,0			;IR ALICI GIRISI
		ORG			0x00
		GOTO		START
		ORG			0x04
		BTFSS		DQ			;VERI GELIYOR MU
		GOTO		$-1			;HALEN GELIYORSA KOPMAYI BEKLE
		CLRF		TMR0		;ILK KOPMA OLDU, SAYACI RESETLE
		BTFSS		DQ			;PARAZIT KOPMASI MI(HALA KOPUK MU)
		GOTO		$-4			;PARAZITMIS, EN BASA DON
		BTFSS		TMR0,0		;256US BOYUNCA KOPUKLUK DEVAM EDIYOR MU	
		GOTO		$-3			;256US DOLMASINI BEKLE
		CLRF		TMR0		;256US DOLDU KOPUKLUK DEVAM EDIYOR
		BCF			INTCON,INTF	;PARAZIT DEGIL SAYACLARI RESETLE
		RETFIE					;KESMEDEN CIK
START	BSF			STATUS,5
		BSF			TRISB,0
		MOVLW		0x07
		MOVWF		OPTION_REG		;DUSEN KENAR, PULLUP ON, PRE 1:256
		BCF			STATUS,5
		MOVLW		0x90			;RB0 INT ON
		MOVWF		INTCON
		CLRF		TMR0
MAIN	BTFSS		TMR0,5		;8MS BOYUNCA KESME GELMEZSE HATAYA GIDER	
		GOTO		MAIN		;8MS KADAR BEKLER.
;-----------------------------------------------

;PROGRAM BURAYA GELIRSE ARADA NESNE VAR DEMEKTIR
;BU NOKTADA HATA BILGISI GEREKEN YERE GONDERILIR

;-----------------------------------------------
		CLRF		TMR0		;HATA KODU GONDERILDI, SAYAC TEKRAR TEMIZLENDI
		GOTO		MAIN		;BASA DONULDU
		END
;NOT: BU PROGRAM ENGEL DEVAM ETTIGI SURECE (YAKLASIK)8MS LIK PERIYOTLARLA
;HATA KODU GONDERIR.YANI HATA KODUNUN GONDERILEBILMESI ICIN ENAZ 8MS BOYUNCA
;SISTEM ENGELDE KALMALIDIR. BU SURE KASITLI OLARAK KISA TUTULMUSTUR.
;BOYLECE SISTEM DAHA KARARLI CALISACAKTIR.

;NOT: ALICI CIKISI TERSLENMEDEN OLDUGU GIBI PICIN RB0 PININE GIRMELIDIR!
;ALICI CIKISINA HERHANGI BIR PULL UP DIRENCI BAGLANMAMALIDIR!

Program içinde gerekli tüm bilgiler mevcut. Hiç denemeden yazdım birazda geç vakitti gözümden kaçan bir durum olarabilir. Deneyince sonuçları yazarsın duruma göre programa ayar çekeriz  :)
Alıcı programında "10" sayısını yani hata kodunu göndereceğin yeri yazdım oraya sen hangi formatta hangi sayıyı göndericeksen eklemesini yaparsın ancak yapacağın ekleme  60mS yeyi geçmesin.
Hade kolay gelsin.
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.

selvi

BTFSS      INTCON,T0IF    verici kisminda bu komut var.ama programda kesme tanimlanmamis.diger bir durum alici kisminda engel varsa her 8msn de bir hata bilgisi yollanir.bu sinyal cisim tarafinda kesilmisse sadece 1 sefer bilgi yollasa daha uygun olur.cunku bir cisim ornegin:100msn de engel olusturursa birden fazla sinyal  kesilmis kabul edecek.bu durum sorun olusturabilir.
Yaşam anlamlandırıldıkça kutsaldır....

XX_CİHAN_XX

Alıntı yapılan: "selvi"BTFSS      INTCON,T0IF    verici kisminda bu komut var.ama programda kesme tanimlanmamis.diger bir durum alici kisminda engel varsa her 8msn de bir hata bilgisi yollanir.bu sinyal cisim tarafinda kesilmisse sadece 1 sefer bilgi yollasa daha uygun olur.cunku bir cisim ornegin:100msn de engel olusturursa birden fazla sinyal  kesilmis kabul edecek.bu durum sorun olusturabilir.
selvi bu durum sorun oluşturmaz. Şöyleki sen bunu yok sayabilirsin.8ms aralıklarla atıyorum 20 kez hata kodu gelsin. Bu 160ms kadar zamandır engelin varlığını işaret eder. Hata kodunu yorumlayan devrede 20 kez hata kodu gelirse bunu 1 sefer gelmiş gibi kabul ettirebilirsin. Basit bir sayaç işlemi yani ;)
8ms ye kadar indirmemin sebebi hassasiyeti yükseltmek ve daha kararlı, hızlı çalışmasını sağlamak. Etki-tepki süresi nekadar kısa olursa hataya yakalanma ihtimali okadar az olur. Bu senin için çok sıkıntı yaratırsa bu zamanı yükseltiriz elbette ama yinede bu şekile daha sağlıklı çalışacağı kanaatindeyim.
Gelelim T0IF flagine.
Bu flagin çalışması için interruptın açık olmasına gerek yok. İnterrupt açık olsaydı kesme vektörüne gidecekti. Yani otomatik kontrol olacaktı. Benim böyle bir şeye ihtiyacım yok bu nedenle kesmeleri kapatım manuel kontrol yapıyorum orada.
Bu arada alıcı kısmının yazılımını anlik parazitleri absorbe edecek şekilde yazmaya çalıştım. Bakalım ne sonuç alacaksı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.

selvi

verici kismina:bsf porta,0
alici   kismina raporedilen kisma:bsf portb,4
yazdim.denedim devrelerin beslemelerini oncelik alici devresinin beslemesi sonra alici beslemesi yaptigimda direk led(portb,4=1) yaniyor.
alici kismindaki degisiklik elimde yaptigim devre vardi.devreyi bastan yapmaktansa programda degisiklik yaptim.cunku vericinin ir ledi suren kisimda portb,3 ve porta,0 nand kapsinin girislerine veriliyor,kapinin cikisi 1k uzerinden darlington tarzi baglanmis  2 tane bc337 var.2.transistorun emiterine 2 adet ir led 10r lik direncle seri baglanarak topraga veriliyor.
alici kisminda asagidaki degisiklik yaptim.
;-----------------------------------------------
    BSF PORTB,4

;PROGRAM BURAYA GELIRSE ARADA NESNE VAR DEMEKTIR
;BU NOKTADA HATA BILGISI GEREKEN YERE GONDERILIR

;-----------------------------------------------
__CONFIG   _XT_OSC & _WDT_OFF & _LVP_OFF & _MCLRE_OFF
harici kiristal kullandim farkli olarak
Yaşam anlamlandırıldıkça kutsaldır....

XX_CİHAN_XX

*Eğer devrende PORTA kullanıyorsan programın START noktasında CMCON registerine 7 sayısını yüklemen gerekir.

*Hata noktasına BSF PORTB,4 koyduysan
kesmenin içine ORG   0x04 ün hemen altınada
BCF PORTB,4 koy ki sinyal almaya başladığında, kopukluk ortadan kalktığında tekrar ledin söndüğünü görebilesin. Ta ki engel tekrar gelene kadar.

*İlk önce alıcıya enerji verirsen, IR sönsör bir sinyal alamıyacak ve engel var sanıcak dolayısıyla hata ledini yakıcak. Bu nedenle önce vericiyi çalıştır ve vericiyi rahat alabilecek bir noktadada (vericiden sonra) alıcıyı çalıştır.(gerçi bir üst maddede yazdığım gibi kesme içinde BCF yaptırırsan verici devreye girince hata ledi sönecektir.)
Hatta mümkünse iki devreyede aynı anda enerji ver :)

* Ve en önemli son madde verici kısmındaki transistörlü devreni tam anlıyamadım. Eğer pici çıkışı aynı fazda değilde evrilerek Ir lede ulaşıyorsa
Sistem hatalı çalışacaktır.(bu önemli!)

Bu arada yine sonuç alamazsan senden iki şey istiyecem programa yaptığın eklemeyi ve verici kısmındaki Ir led bağlantısı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.

selvi

sorun ayni bicimiyle devam ediyor.verici-alici ve transistor baglanti semasi asagidaki linktedir.
http://rapidshare.com/files/140037035/ir-ver_al.rar.html
Yaşam anlamlandırıldıkça kutsaldır....

XX_CİHAN_XX

Alıntı Yap
* Ve en önemli son madde verici kısmındaki transistörlü devreni tam anlıyamadım. Eğer pici çıkışı aynı fazda değilde evrilerek Ir lede ulaşıyorsa
Sistem hatalı çalışacaktır.(bu önemli!)
@selvi en önemli dediğim hatayı yapmışsın :)
Nand kapısı picin çıkışını tersliyor. Ardından gelen transistörlerde terslemeden aynen iletiyor. Sonuçta picin çıkışı terslenerek lede ulaşıyor.
Bence devreye dışardan ufak bir müdahale yap ve nand kapısını ve ra0 pinini unut direk picin datasını Q1 in beyzine gir direnç ile. Yanlız Q1 in emiteri boşta kalmasın zaman zaman sapıtabilir. Emiteride(yani Q2 nin beyzini) 10k direnç ile şaseye termine yap.
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.

selvi

belirtiginiz degisikleri yaptim.led direk yaniyor.sorun devam ediyor.
Yaşam anlamlandırıldıkça kutsaldır....