pbp ile puls süresi ölçmek

Başlatan private_korsan, 31 Temmuz 2010, 00:52:46

private_korsan

herkese merhaba üzerinde çalıştığım bir projede sırayla 3 milisaniye ile 10 milisaniye arasında  pulsler üreten 4 adet girişim var.yapmak istediğim şey bu dört girişin high sürelerini ölçmek ölçtüğüm süreleri %30 oranında arttırarak çıkış yapmak sorunuma gelince birincisi bu süreler sabit değil sürekli değişiyorlar o yüzden sürekli ölçüm yapmalıyım diyelimki birinci pulsi ölçtüm 3 milisaniye çıktı üzerine %30 koydum 3.3 milisaniyelik çıkış yaptım ikinci üçüncü ve dördüncü pulslerde aynı olsun yani sonuç olarak ikinci çıkşımda 3.3milisaniye 3. çıkşımda3.3 milisaniye 4. çıkışımda 3.3 milisaniye sonuçta ben dört çıkışı sırayla gönderdiğimde 3.3*4=13.2 milisaniye geçmiş oluyor bu arada giriş sinyallerimde yerinde durmuyor doğal olarak 13.2 milisaniye sonra yenide okuma yapmak istediğimde doğal olarak birinci girişi kaçırmış oluyorum tekrar birinciyi beklemem sistemin o sırada boşta kalmasına ve hataya sebep oluyor bu işin mantığını bi türlü çözemedim sizce nasıl bir yöntem uygulamalıyım

radres

Şöyle bir şey çözüm olabilir mi acaba? İlk önce 4 adet girişi yakala yani ölç. Sonra 4 adet PWM çıkışı için PWM görev süresini belirleyerek çıkışa ver (tek komutla). Yani çıkışa vereceğin PWM için bekleme yapma denetleyici içindeki donanımsal PWM modülünü kullan. 4 adet PWM çıkışı olan ve hızlı frekansta çalışan bir denetleyici seçersen giriş sinyallerini kaçırma olasılığın düşer gibi geliyor.

Erol YILMAZ

4 adet girişi aynı anda mı ölçmen gerekiyor ?

Yoksa sıra ile ölçmen işini görüyor mu ?

private_korsan

aslında dördünüde ölçmeme gerek yok sadece birinciyide ölçsem yeterli çünkü bir turda 4 girişin süreside eşit fakat anlattığım gibi sadece birinciyi ölçtüm diyelim üzerine eklemeyi yapıp sırayla 2 -3 ve dörde gönderdim tekrar birinciyi ölçmem gerktiğinde birinci zaten yolu yarılamış oluyor onu bir tur daha beklersem çıkış yapamadığım için sistem hatalı çalışıyor bilmem anlatabildimmi valla anlatması bile zor oluyor ama
isterseniz ilk önce benim düşündüğüm yöntemi anlatayım (henüz denemedim şu an üzerinde çalışıyorum)birinci girişi bir adet 675 e girdim pulsin ile süreyi ölçtüp üzerine ekleme yapıp pulsout la birinci çıkışı vereceğim yanına bir adette 628 koyup 675 ten üzerine ekleme yaptığım çıkışı 628in bir piniyle yine pulsin ile okuyacağım 628 ile okuduğum süre zaten üzerine eklenmiş süre olacak sırayla 628 ten 2-3ve dördüncü çıkışları vereceğim bu sırada 675te yeni girişi bekleyecek yeni giriş geldiği zaman okuyup dördüncü çıkışın işinin bitmesini bekleyecek (o kısmı nasıl yapacağımı daha bulamadım) böylece bir döngü oluşturmayı düşünüyorumacaba bu şekilde olurmu? yada daha basit bir mantık bulabilirmiyim ne dersiniz?

Erol YILMAZ

Şimdi Basic'in sana sunduğu yazılımsal olayları bi kenarı koy çünkü aynı anda birçok iş yapman gerekiyor...
Donanımından tam olarak faydalanman gerekli.

Girişi INTERRUPT ile yapman gerekiyor...

Çıkışı ise yazılımla hesaplayıp delay komutları ile yapacaksın yalnız,,,,
INTERRUPT sürecin çok kısa olmalı ki,  delay komutlarının yapacağı hata min. seviyede olsun...

Çıkışı da Donanıma aktarabilsen harika olur.

private_korsan

hocam basic ten vazgeçmi diyosun yani!!!

Erol YILMAZ

Alıntı yapılan: private_korsan - 31 Temmuz 2010, 12:18:18
hocam basic ten vazgeçmi diyosun yani!!!
,

Hayır!
Donanıma hakim ol diyorum. Bunun yolu ne ise onu yap.

private_korsan

hocam aslında ne demek istediğinizi çok iyi anladım fakat o tecrübeye henüz sahip değilim sanırım daha çok çok çok çalışmam lazım.hemen araştırmalara başlıyorum teşekkürler

private_korsan

aslında bir sorum daha olacak pulsin ve pulsout komutlarıyla ilgili pulsin komutuyla pine gelen pulsin genişliğini ölçtük bildiğim kadarıyla ölçüm sonucu çevirim sayısı olarak çıkıyor oda 4mhz de 1 çevrim 10us okuduğum sonucu diyelimki sure diye bir değişkene aldım
çıkış yaparken (PulsOut PORTB.1,sure) kodunu yazdığımda yine çevrim cinsinde çıkış yapmış oldum peki pulsout komutundan önce sure=sure+100 demiş olsam bu 100 ifadesi ne cinsinde oluyor yine çevrim mi yoksa ms yada us mi

chailuck

Alıntı yapılan: private_korsan - 02 Ağustos 2010, 10:22:58
aslında bir sorum daha olacak pulsin ve pulsout komutlarıyla ilgili pulsin komutuyla pine gelen pulsin genişliğini ölçtük bildiğim kadarıyla ölçüm sonucu çevirim sayısı olarak çıkıyor oda 4mhz de 1 çevrim 10us okuduğum sonucu diyelimki sure diye bir değişkene aldım
çıkış yaparken (PulsOut PORTB.1,sure) kodunu yazdığımda yine çevrim cinsinde çıkış yapmış oldum peki pulsout komutundan önce sure=sure+100 demiş olsam bu 100 ifadesi ne cinsinde oluyor yine çevrim mi yoksa ms yada us mi
sure degıskenının ıcerıgı ne olursa olsun 100 arttırıyor.
dıyelım kı byte tıpınde atadın bu degıskenı 100 desimal olarak eklenir herhangi bir süre olarak degıl, pulsout komutu kullandıgın an arka planda sure degıskenının ıcerıgının sure cınsınden cıkıs verılır.
ancak 250 ise sürenin içeriği ve sen 100 eklediysen bu sefer bytetan taşma olacak ve 15E olması gereken ıcerık 5E olacak degısken tıpınıde buna gore uygun secmelısın.
basıc dılı yeterlı gelebılr ama surelerı olcmen gerek basıc dılınde asm de oldugu gıbı hangı komut kac komut saykılı gecıkme yapar bılemeyız,
bunun ıcın kesme kullanacaksan eger bırkac deneme yanılma ıle gecıkmelerını hesaplaman lazım.
hatta bence gırıslerını sureklı bır kesme ıle olc olcum yaptıktan sonra ılk uc degerını kaydet o sıra cıkıslar bos kalsın sonra sırayla baslayarak cıkısa %30 ekleyerek gonder boylece basta tahmını 10 sn cıkıslar bos kalmıs olacak ancak sonrakı cıkıslar gercek zamanlamaya cok yaklasmıs olacak.
İmkanın sınırlarını görmek için imkansızı denemek lazım. (Fatih Sultan Mehmet)  Ayıplarını gördüğünüz komşuyu kınamayınız. Sırlarını açıklamayınız.Çünkü gördüğünüz bu sır size emanettir, emanete hıyanet kötü ve çirkin bir filldir. (Hacı Bayramı Veli )  meyve veren ağacın taşlanması çok hoş ;)

F.T

otogaz sıralı sistemi yapacaksın.
Hakk şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.