hpwm mi timer0 mı

Başlatan canbulut, 29 Eylül 2014, 23:14:42

canbulut

sa arkadaslar,
bir devre için arka planda pic16f628a ile 38khz ile kare dalga üretmem gerekiyor. çünkü sürekli gelen pwm sinyali dinlemem gerekiyor. bunun içinde hpwm veya tmr0 kesmesi kullanarak bu işi başarmam gerekiyor. Neyse benim sorunlarıma gelecek olursak;
pic16f628a ile 4mhzde 38 khz üretebilir miyiz? ben bir kaç ayar çıkardım doğrumu dur? bunları yazmam yeterlimi?
PR2 = %00011001 ;
T2CON = %00000100 ;
CCPR1L = %00001100 ;
CCP1CON = %00111100 ;

DEFINE CCP1_REG PORTB 'Hpwm 1 pin port
DEFINE CCP1_BIT 3 'Hpwm 1 pin bit

HPWM 1,127,38000 ' Send a 50% duty cycle PWM signal at 38000kHz

ete

Arka planda HPWM üretmek hem kolay hemde işlemciyi meşgul etmeyen bir özelliktir.
38 Khz sinyal elde etmek için yapılması gerekenler şunlar;
PR2=25
T2CON =%00000100      '1/1 bölme oranı
Duty= 52  ' %50 duty oranı için verilmesi gerken değer
CCP1CON=%00001100
       CCP1CON.4=Duty.0
       CCP1CON.5=Duty.1
       CCPR1L=Duty>>2
Bu komutları programın başına ekle sinyal otomatik olarak çıkacaktır.

Ete

canbulut

hocam peki belli zamanlarda 0 göndermesini istersek, belli zamanlarda göndermemesini istersek nasıl yapabiliriz? 2.4ms göndersin 1.2ms göndermesin gibi.
ı''''''''''''''''''''''''''''''''''''''ı..................ı
<------2.4ms-------><---1.2ms-->

ete

Bu işi yapmanın en kolay yolu  bir and kapısı kullanmaktan geçer. Pic pinlerinden birisini bu sinyalleri ayarlamak için kullanabilirsin.
2 girişli bir AND kapısı kullan. HPWM çıkışını AND kapısına gir. Kontrol pininide AND kapısına gir
Kontrol pini LOW da beklersa AND kapısından bir şey çıkmaz daha doğrusu LOW çıkar sürekli.
Diyelimki 2,4 ms HIGH (38 KHz olarak) çıkaracaksın.
KONTROL=1
PAUSEUS 2400
KONTROL=0
diyerek bu sinyali çıkartırsın. LOW için zaten kontrol pini low'a çekilince çıkış low olacağından benzer şekilde zaman tutarak istediğini çıkartablirsin.

Diğer bir yöntem ise HPWM kullanmadan bir Puls çıkarma alt programı hazırlarsın tabiiki ASM de yazılmasıgerekir bu alt programın. 38 Khz lik sinyalin peryodu 26us dir. Bunun 13us si HIGH 13us si ise LOW dur.
Bu alt programı başlık süressi kadar çalıştırırsan yine 2,4ms lik süre kadar 38Khz lik sinyal çıkarmış olursun.
Bu iş biraz daha karmaşık diğeri kolaydır.

Ete


canbulut

hocam, and kapısı, devre için büyük yer kaplıyor. sadece bu 38khz ile bir koşul sağlayabilirmiyiz?...rb.3 pininden 38khz tamamsa şu çıkışı ver değilse başka bir iş yap gibi.devremize alıcı bağlı zaten.

ete

PWM sinyalini kesen komut CCP1CON=0 dır. Sinyali tekrar açmak için CCP1CON=%00001100 vermek yeterlidir.
Bu durumda sinyali açıp 2,4ms zaman tutar ve ardından sinyali kapatırsan istediğin olmuş olur.

Ete

canbulut

#6
hocam ır'ler ile bu protokol işlerini 232 iletişim ile kuranlar nasıl yapıyor? bizde öyle bir iletişim yapsak daha sağlıklı olmazmı?

canbulut

hocam şu andaki araştırmalarıma göre internette yapmak istediğim şey engel algılayıcı olarak geçiyor.

ete

Engel algılayıcılarda her hangi bir protokol kullanıldığını sanmıyorum.
38 Khz lik sinyale bindirilmiş HIGH sinyalini 10 ms süre ile çıkart sonra kes veya kesik kesik bu sinyali ver.
Karşıya çarpıp gelen sinyali IR Göz alsın ve sinyali çözünce sana 10ms peryodu olan bir HIGH sinyali versin (aslında 10ms süreli LOW verecektir. Göz gelen sinyali ters çevirerek dışarı verir. Sende bunu alıp programda işle ve engelvarmı yokmu anla.
Sinyal yansıyıp gelirse bir sinyal alacaksın aksi taktirde göz çıkışı sabit ne ise onu alacaksın. Böylece engel varmı yokmu anlayabilirsin.

Ete

canbulut

ccp1con=0 der demez pulsin komutu ile 0 seviyesinde ne kadar sürdüğüyle ilgili kontrol gibimi hocam.

ete

38Khz lik vericiyi açtın sinyal çıkıyor. Aynı zamanda göz çıkışın da Pic'e girilmiş durumda. Şayet Göz çıkışı bu esnada HIGH ise engel yok, LOW ise engel var demektir. BU kadar basit. Zira 38Khz lik sinyal Gözde sürekli LOW çıkmasına sebep olur. 38Khz olmayınca ise Göz çıkışı pullup dan dolayı HIGH olmalıdır.

Ete

canbulut

#11
aşağıdaki gibi bir deneme yaptım çıkış gözükmüyor, olmadı hocam tsop malzemesinin bozuk olduğunu düşünüyorum. yarın yenisini takıp deneyeceğim. bunu denemesini yapabilceğim başka bişey(isis, avometre) olamaz gibi görünüyor değilmi hocam
led var portb.2
IR_data var portb.1
BASLA:
CCP1CON=0
LED=IR_DATA
pause 150
CCP1CON=%00001100
LED=IR_DATA
pause 150
goto basla

onurinci

isiste frekansı ayarlanabilen infrared alıcı eleman mevcut.fakat tam olarak nasıl çalıştığı hakkında pek fikrim yok. adı  IRLINK

Powered by EzPortal