PALS KONUSUNDA YARDIM EDER MİSİNİZ?

Başlatan kılıckaya, 25 Ağustos 2012, 23:40:38

kılıckaya

Arkadaşlar,yine sizden bir konu hakkında yardım isteyeceğim.16f877 ile bir kontrol devresi yapmaya çalışıyorum.Devrede aslında birden çok buton var ama karışıklık olmaması için ben sadece iki buton koydum.Sorunu iki buton ile aşarsak zaten diğerlerini ben tamamlarım.Açıkçası PİC ile nasıl Pals oluşturacağım konusunda hiç bilgim yok.Bu konuda sizlere güveniyorum.

nurim

#1
İşte sana basit bir döngü ile örnek....
-"..Başlangış anında 8 ms süre ile 1 olacak ardından 4.5 ms süre ile 0 olacak .." isteğin için..

BASLA:
HIGH PORTA.0
PAUSEUS 8000 ' Delay for 8 millisecond.1 komutu çıkış süresi
LOW PORTA.0
PAUSEUS 4500 ' Delay for 4.5 millisecond.0 komutu çıkış süresi

GOTO BASLA

Şeklinde bir döngü kurulabilir."PAUSEUS" komutunun değerlerini değiştirerek çıkıştaki 1 ve 0 ların sürelerini ayarlamak mümkündür.

Bu örnekle olayın anlaşılması daha kolay olacaktır.

Kolay Gelsin
nurim

kılıckaya

#2
İlginiz için teşekkür ederim.Benim asıl anlayamadığım yer şu: Word belgesinde dikkat etti iseniz her iki komutun da başlangıcı aynı Benim mantığıma göre palsler değişik sürelerde sırası ile 1 ve 0 lardan olumuyor mu?Oysa biraz önce yazmış olduğum komut başlangıcına dikkat ederseniz palslerde arka arkaya iki adet 1 gelmiş.Hatta daha sonra 5 adet 1 arka arkaya gelmiş.Bu şekilde bir pals olabilir mi?Sizce bu mantıklı mı?Yoksa bu başlangıç satırını yazan kişi hatalı mı yazmış?Teşekkür ederim.

ete

Pals denilen şey ile sinyal şeklini bir birine karıştırma. Bir puls genelde LOW ile başlayan hemen HIGH olan ve bir müddety high da kalıp tekrar dan LOW olan sinyal şekline puls diyoruz. Dahada genelleme yapılırsa bir HIGH sinyaline bir puls denilmektedir.
Gelelim senin sinyal şekline, kodlanmış bilgiye benziyor. Tabiiki bu tür bilgilerde yan yana 1 ler ve sıfırlar gelebilir.
TV kumandaları, yada kodlanmış RF kumanda sinyallerine bakarsan benzer şekiller görebilirsin. Header denilen bir uzun sinyal gurubu bilgi paektinin başını bulmakta yada belirlemekte kullanılır. Ardından kodlanmış ve seninde verdiğin gibi birler ve sıfırların guruplarından oluşan bir sinyal şekli oluşturulur.
Sonuç olarak ihtiyaca bağlı olarak birler veya sıfırlar yan yana gelebilir. Unutma ki birler ve sıfırlarında birer süresi vardır.

Son olarak şunu söylemek isterim. İşlemci ile bu sinyal şeklini oluştururken komut gecikmelerinide dikkate alman gerekir. Aksi halde istediğin sinyali şekil olarak görebilir ancak süre olarak tutturamayabilirsin.
HIGH CIKIS
Pauseus 8500
LOW CIKIS
şeklinde bir komut satırırı gurubu kullandığın zaman yazdığın komutların gecikmeleri sinyale eklenir. Bu nedenle bazen ince hesap yapıp oraya 8500 yerine 8300 yazmakla çıkışta net 8500us lik süreyi tutturabilirsin. Özellikle kısa peryodlarda komut gecikmelerine daha fazla dikkat etmen gerekir.

Ete

kılıckaya

#4
Ete Hocam değerli fikirleriniz için teşekkür ederim.Sizden biraz daha yardım talep edebilir miyim.Rarlı dosyada konu ile ilgili olarak yazmış olduğum PBP dosyası var.Sizin belirttiğiniz durumlar ışığında 1 lerin süresinin 500 ms olduğunu kabul edersek bu durumda PBP dosyama bakar mısınız?arka arkaya gelen 1 leri ve daha sonra 0 'ı programda nasıl yazmam gerekir.Biraz daha açmam gerekirse


HIGH CIKIS
Pauseus 8500
LOW CIKIS
yazdık önce 1 oldu ve 8,5 ms sonra 0 oldu.Burada sorun yok peki arkak arkaya iki adet 1 göndereceğim zaman şu şekilde mi olacak?


Pauseus 8500
LOW CIKIS[/color]
Burada mantığıma ters düşen birinci 1 gönderildi ikinci 1 in gönderilebilmesi için önce 0 'a düşmesi gerekmez mi?Yukarıda yazdığım doğru mu?Teşekkür ederim.

ete

#5
Programını yeniden düzenledim ve KOMUT1 kısmını ben yazdım. Bakarak Komut2 kısmınıda sen yazarsın artık.
Skop görüntüsünde süreler uygun gözüküyor.

@ DEVICE PIC16F877
@ DEVICE PIC16F877, WDT_OFF
@ DEVICE PIC16F877, PWRT_ON
@ DEVICE PIC16F877, BOD_ON
@ DEVICE PIC16F877, PROTECT_OFF
@ DEVICE PIC16F877, LVP_OFF
@ DEVICE PIC16F877, CPD_OFF
@ DEVICE PIC16F877, XT_OSC

define osc 4    '4MHZ'LİK OSİLATÖR
ADCON1=7

PORTA=0:TRISA=0
PORTB=0:TRISB=$FF
PORTC=0:TRISC=0
PORTD=0:TRISD=0
PORTE=0:TRISE=0

option_reg=0        'PORTB Pulluplar etkin.   

SURE VAR WORD
SYMBOL BUTON0=PORTB.0
SYMBOL BUTON1=PORTB.1
SYMBOL CIKIS=PORTC.0
pause 500
SURE=490

BASLA:
    IF BUTON0=0 THEN gosub KOMUT1
    IF BUTON1=0 THEN gosub KOMUT2
    goto basla

KOMUT1:
       HIGH CIKIS
       pauseus 7980
       low CIKIS
       PAUSEUS 4480
       HIGH CIKIS     ' 11
       PAUSEUS 980
       GOSUB ALCAK
       GOSUB YUKSEK
       GOSUB ALCAK
       HIGH CIKIS
       PAUSEUS 2480   ' 11111
       GOSUB ALCAK
       HIGH CIKIS
       PAUSEUS 1480   ' 111
       GOSUB ALCAK
       HIGH CIKIS
       PAUSEUS 1480   ' 111       
       GOSUB ALCAK
       GOSUB YUKSEK
       GOSUB ALCAK
       GOSUB YUKSEK
       GOSUB ALCAK
       HIGH CIKIS
       PAUSEUS 1980   ' 1111       
       GOSUB ALCAK
       GOSUB YUKSEK
       GOSUB YUKSEK
       GOSUB ALCAK
       GOSUB YUKSEK
       GOSUB YUKSEK
       GOSUB YUKSEK
       GOSUB YUKSEK
       GOSUB ALCAK
       GOSUB YUKSEK
       GOSUB ALCAK
       GOSUB YUKSEK
       GOSUB YUKSEK       
       GOSUB ALCAK
       GOSUB YUKSEK
       GOSUB YUKSEK       
       GOSUB ALCAK
       GOSUB YUKSEK       
       GOSUB ALCAK       
       GOSUB YUKSEK       
       GOSUB ALCAK       
       RETURN

KOMUT2:
' PALS OLARAK 8 MS BOYUNCA 1 GÖNDER  SONRA 4.5 MS BOYUNCA 0 GÖNDER ARDINDAN
' AŞAĞIDAKİ KODLARI GÖNDER(KODLARIN SÜRELERİ EKTEKİ DOSYADA OSİLOSKOP GÖRÜNTÜLERİNDEDİR)
' 110101111101101110101011011011011111011011010101
RETURN
   
ALCAK:
      LOW CIKIS
      PAUSEUS SURE
      RETURN
YUKSEK:
       HIGH CIKIS
       PAUSEUS SURE
       RETURN     

END 

kılıckaya


Powered by EzPortal