sinyal yazdığımdan farklı çıkıyor

Başlatan elseif, 06 Ocak 2009, 15:37:48

elseif

Arkadaşlar google ve forumları alt üst edip bir sonuca varamayınca burada bilen arkadaşlara danışmak istiyorum. bitirme projesinin ilk aşaması olarak sadece power sinyali gönderen tek tuşlu bir uzaktan kumanda yapmak istiyorum. acer marka projektör kumandasının sinyalinin dijital osiloskopta gözlemledikten sonra aynı sinyali veren bir program yazıp çıkış pinini gözlemledim. Sorun şu ki; programda yazdığım değerlerle çıkıştan ölçtüğüm değerler birbirinden farklı. 12f675 kullanıyorum. Örneğin 640 mikrosn'lik 1 ve 480 mikrosn'lik sıfır gönderince 580 mikrosn'lik 1 ve 430 mikrosn'lik 0 gördüm çıkış pininde. Ayrıca farklı dirençler bağlayınca da çıkışın değiştiğini gördüm.
Sorun ne olabilir acaba?

Yazdığım koddan bir kesit:

Acer:
	GoSub Acer912
	GoSub Acer440
	GoSub Acer64
	GoSub Acer48
	GoSub Acer64
	GoSub Acer48
	GoSub Acer64
	GoSub Acer48
	GoSub Acer64
	GoSub Acer162
	....
        ....



Acer64:
	High Cikis
	PauseUs 640
Return

Acer162:
	Low Cikis
	PauseUs 1620
Return

Acer48:
	Low Cikis
	PauseUs 480
Return

Acer912:
	High Cikis
	PauseUs 9120
Return

Acer440:
	Low Cikis
	PauseUs 4400
Return
...
...

Maxim

osilatör olarak ne kullandınız ?

elseif

kullanmadım. osilatör kullanmak gerekiyor mu?

elseif

@   device   mclr_off

ANSEL = 0
CMCON = 7   


sadece bunu yaptım

Maxim

şurayı bir okuyunuz
https://www.picproje.org/index.php/topic,23232&highlight=

osc kullanmanız şart o kadar hassas bir devrede ,

bu arada,
picbasic içerisinde hazır IR kumanda kodu için komut yokmuydu ?

elseif

buraya cevap yazmadan önce gönderdiğiniz linkteki cevapları ayrıca orada verilen linkleri de inceledim. bekleme miktarı 1 ms'den küçükse %1.25 büyükse %2.5 hata veriyordu. Göndereceğim sinyalin uzunluğunu bunla çarpıp basit yoldan elde ettim.

Şimdi yapmam gereken bu sinyali 38 khzde module etmek. Bunu nasıl yapabilirim? 16f628a'nın 38 khz kare dalga üretme özelliğini kullanıp program içinde and'leyebilir miyim? yoksa dışarıda bir and kapısı mı kullanmam gerekir?

madpic

Elseif yaptığım bir denemede 628in pwm çıkışını 38KHz ye ayarlayıp
datayıda seri porttan göndermiştim 100ohm direnci seriolarak ir lede bağlayıp gayet güzel sonuç almıştım.
mesafe olarak 7 8 m den sıkıntısız calışıyordu.

elseif

Alıntı yapılan: "madpic"Elseif yaptığım bir denemede 628in pwm çıkışını 38KHz ye ayarlayıp
datayıda seri porttan göndermiştim 100ohm direnci seriolarak ir lede bağlayıp gayet güzel sonuç almıştım.
mesafe olarak 7 8 m den sıkıntısız calışıyordu.

PWM den aldığın kare dalgayla sinyali nasıl module ettin? eğer onu yapabilirsem benim sorunum tamamen çözülecek çünkü sanırım.

tyildizak

Pwm çıkışı pic dahilinde herhangi bir veri ile and'lenemez, yapmanız gereken harici bir and kapısı kullanmak, iki transistör ile kolayca hallolur.

elseif

iki transistör 3 dirençle and kapısı yaptım. işe yaradı :) benim elimde kumanda acer projektör kumandası. NEC protokolüne uyuyor sinyal. Bütün sinyali yukarıda yazdığım gibi verip sonra çıkışta 38 khzle module etmeyi planlıyorum. Ama bu NEC protokolüne göre daha kısa yoldan yazma ihtimalim var mı programı_?

madpic

pwm 38khz------>--|100ohm|---->irled (+-)
data sinyaliniz--->----------------->irled (+-)

irled'in + veya - sini deneyerek bulabilirsiniz.
data göndermediğinizde pwm'i kapatmayı unutmayın.

elseif

teşekkürler arkadaşlar. proje bitti sayılır. tek düğmeyle 4 farklı projektörü açıp kapatabiliyorum. devreyi ve kodlarını tamamen bitince paylaşırım burada.
Şimdi direnç değerleriyle filan oynayıp mesafeyi arttırmaya çalışacağım. Ayrıca onu koyacak kutu bulmam lazım. 20-30 tane. Karaköy pasajında bulamadım :(

elseif

ben bu sinyali andlemek yerine direk data sinyalini 38 khz e göre yazmak istiyorum. bu sayede elemandan tasarruf olacak ve ayrıca transistörlerdeki güç kaybı gidecek... şimdiii assemlyle yazdığım 13 us'lik "bir" ve 13 us'lik "sıfır" şöyle
LIST P=16F628A
INCLUDE "P16F628A.INC"

__CONFIG _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _DATA_CP_OFF & _CP_OFF

SAYAC1 EQU H'20'
CLRF PORTA
BANKSEL TRISA
MOVLW b'11111110'
MOVWF TRISA
BANKSEL PORTA

BIR
	MOVLW b'00000001'
	MOVWF PORTA
	NOP 

GECIKME1	
	MOVLW h'03'
	MOVWF SAYAC1

DONGU1
	DECFSZ SAYAC1, F
	GOTO DONGU1



	MOVLW b'00000000'
	MOVWF PORTA 

GECIKME2	
	MOVLW h'02'
	MOVWF SAYAC1
	NOP
	NOP
	
DONGU2
	DECFSZ SAYAC1, F
	GOTO DONGU2


GOTO BIR


END





yani diyorum ki 9100 us'de "bir" gönderirken bunlardan 9100/26=350 tane göndersem... olmaz mı ki?