Pic'in bir portunda gelen sinyal süresine göre iş yaptı

Başlatan futureng, 16 Ocak 2007, 00:39:27

futureng

Arkadaşlar bazı konularda acemiyim yardıma ihtiyacım var. Bir projem var projemde mesela Pic' in B1 portuna karışık olarak 1 ve 0 sinyalleri geliyor. Ben istiyorum ki bu gelen 1 ve 0 sinyallerinden eğer 1 sinyali 6sn veya daha uzun olursa belirleyeceğim bir altprograma dallanmasını istiyorum. Düşnüyorum düşünüyorum ama tam canlandıramadım bir türlü kafamda.

Yardımlarınız içn teşekkürü bir borç bilirim.
GimpTR.COM: Hayal Gücünüzün Gerçek Dünyadaki Görünüşü  http://www.gimptr.com

XX_CİHAN_XX

Alıntı yapılan: "futureng"Arkadaşlar bazı konularda acemiyim yardıma ihtiyacım var. Bir projem var projemde mesela Pic' in B1 portuna karışık olarak 1 ve 0 sinyalleri geliyor. Ben istiyorum ki bu gelen 1 ve 0 sinyallerinden eğer 1 sinyali 6sn veya daha uzun olursa belirleyeceğim bir altprograma dallanmasını istiyorum. Düşnüyorum düşünüyorum ama tam canlandıramadım bir türlü kafamda.

Yardımlarınız içn teşekkürü bir borç bilirim.
Ben asm kullanıyorum dalayısıyla pıcbasicte bu ısı yabılecek daha kestırme komutlar var mı bılmıyorum ama aklıma ılk gelen fıkrı yazayım belkı bır faydam olur.
Bu işi timer yada wdt kullanarakta yapabılırsın fakat daha basite indirgersek manuel sayaclarla sayma yaparakta yapılabilir.
picin b1 portunu oku "0" ise işleme girme "1" ise 6sn lık saydırma programına gır.Bu saydırma işlemi 6sn lik bir dongu olacak sekılde tasarlanıcak.iç içe dongulerden olusan 6sn lık bu gecıkmenın en kucuk dongusunun ıcıne sürekli portb,1 ın halen set olup olmadıgı sorusunu koy ve set oldugu surecede bu donguler bosalmaya(6snlık zaman işlemeye devam etsın)tabııkı zaman dolmadan dongu ıcınde B1 pini "0" a dustu ıse dırek donguden cık.
eger zaman dolana kadar b1 set kaldı ıse ıstedıgın oldu demektır oradan istediğin yere dallan ısını gor ve gerı don.
Bu dongulu programı alt program ıcınede alabılırsın.
Aklıma gelen ılk ve basıt yontem buydu, umarım faydası dokunur.
Bu arada bu dongu ve 6sn lık gecıkme ıcın basic te belki daha pratık komutlar vardır ama anlattıgım seklı ıle bu programı yapmak asm dılınde dahı oldukca basıttır.
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.

futureng

cevap için sağol. Ama ASM den hiç anlamıyorum :) neyse biraz daha kafa yoralım bakalım. Cevabı bulursam buarada yayınlarım.
GimpTR.COM: Hayal Gücünüzün Gerçek Dünyadaki Görünüşü  http://www.gimptr.com

XX_CİHAN_XX

asm den anlaman şart degıl dostum ben sana sadece bır yontem onerdım basictede rahatlıkla uygulunabilir.
yapman gereken for next dongulerı ıle 6 sn lık bır zaman gecıkmesı yapıp bı dongulerın ıcıne portb,1 ın set olma kosulunu koyacaksın hepsı bukadar.
dongu tamamlanmadan portb,1 lojık "0"  olursa break komutu ıle donguden ıslem yapmadan cıkıcaksın.
Ama 6sn boyunca portb,1 lojık "1" oluyorsa ıstedıgın kosul tamamlanmıs demektır dongu bıtımınden ıstedıgın noktaya gıder ıslemelerını tamamlarsın.Gayet basit bir olay, mantık aynı asm veya basic farketmez...
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.

mavi

Bahsettiğin konunu ismi pwm yani darbe genişlik modulasyonu ve konuyu pbp bölümünde arayabilirsin 16f628 in dahili pwm si var pic basic konuyu destekliyor.
Telecommander Monster Of Network

XX_CİHAN_XX

Alıntı yapılan: "futureng"Ben istiyorum ki bu gelen 1 ve 0 sinyallerinden eğer 1 sinyali 6sn veya daha uzun olursa belirleyeceğim bir altprograma dallanmasını istiyorum.

Alıntı yapılan: "mavi"
Bahsettiğin konunu ismi pwm yani darbe genişlik modulasyonu ve konuyu pbp bölümünde arayabilirsin 16f628 in dahili pwm si var pic basic konuyu destekliyor.

@mavi pwm ile ne gibi bir alakası var anlamadım.
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.

z

1. Sayaç adındaki iki bytlık bir değişkene atıyorum 10000 gibi bir değer yükle.

2. Gözlemek istediğin pin 1 mi 0 mı?

3. 0 ise 1. adıma git.

4. Sayaç içeriğini 1 eksilt.
5. Sayaç değeri 0 değilse 2.adıma git.
6. Sana istediğin uzunlukta sinyal geldi demek artık kendi kodunu yaz.

En başta sayaç değerine 10000 yüklemiştik. Bu değer sinyalin ne kadar süre boyunca 1 olduğunu istemenle ilgili. Ne olması gerektiğini ya deneme yanılmayla yada yazdığın döngü içi kodların işlemciye nakadar zaman kaybettirdiğini hesapladıktan sonra istediğin süreye bölerek bulabilirsin.

Mesela 40 uS sürüyorsa sende 5 sn istiyorsan 5 milyon/40 eğer sonuç 2 byte'ı aşarsa sayaç değişkenini 3 byte yada 4 byte yaparsın.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

mavi

PWM ile alakası burada:





http://www.cpemma.co.uk/pwm.html


PWM gelen 5 voltluk sinyalin pozitif saykılının negatif saykıla oranına bakarak iş yaptırmaktır.Bir peryodun tamamı %100 dür.

Çok uzun 6 saniye gibi bekleyecekse pic le hiç uğraşmaya gerek yok   bir kare dala üreteci binari sayıcı ve bir kaç and kapısı ile istediği değerde istediği devreyi tetiklersin
Telecommander Monster Of Network

XX_CİHAN_XX

Dostum pwm ın ne oldugunu bılıyoruz cok sukur daha once cok kullandım.
Arkadaş pwm sinyali felan cıkarmak ıstemıyor onun derdı portb,1 pinine gelen lojık1 bılgısının suresıne gore ıslem yapmak.Basit bir ornek vereyım.
mesela o b1 e bır buton baglı buton bosta ıken o pıne lojık 0 gıdıyor.Butona bastıgın yada basılı tuttugun surece lojık1 gıdıyor.
Boyle bır durumda butona 6 sanıye basılı tutuldugunda lcd ye mesaj yazılacak dıyelımkı.Arkadasın yapmak ıstedıgı olayı bır ornekle acıkladım.Yanı burada pıne gıren sınyale gore ıs yapma durumu sozkonusu.Her hangı bır pınde pwm olusturma ıle bu durumun hıc bır alakası yoktur.Umarım anlatabılmısımdır.
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.

ibrsel

Alıntı Yap
Bir projem var projemde mesela Pic' in B1 portuna karışık olarak 1 ve 0 sinyalleri geliyor. Ben istiyorum ki bu gelen 1 ve 0 sinyallerinden eğer 1 sinyali 6sn veya daha uzun olursa belirleyeceğim bir altprograma dallanmasını istiyorum

Timer kullanarak bu işi oldukça hasas sürelerde yapabilirsin.
Butona basıldığında timer ı başlatırsın.
Buton bırakıldığında timer ı durdurursun.
Aradaki farkı bir değişkene yükleyip kontrol edersin.İstediğin süreye ulaşılmış ise istediğin işi yaptırırsın..

aslan_korhan

DEFINE OSC 4
X var word
X = 0

main:
if portb.0 = 1 then 
x = x + 1
pause 6
endif
if X = 1000 then goto tamam
if portb.0 = 0 then X = 0
goto main

tamam:
'Buradan sonra istediğini yap


Bu şekilde denedim ve tam 6sn olarak çalışıyor.
Dünyada 10 çeşit insan vardır. Binary bilen ve bilmeyenler.

ayhani

arkadaşlar ben programları parsi kullanarak yazıyorum aşağıdaki devrede picin RA.0 pinine bağlı butona 2 saniye basınca 1.program, 4 saniye basınca 1.program iptal edilip 2.program çalıştırılıyor. RA.1 pinine bağlı butona basarak sistemi resetliyorsunuz.
En iyi bildiğim şey hiçbir şey bilmediğimdir.