28 input içinde hızlı değişim algılama?

Başlatan Veli B., 13 Ekim 2011, 13:54:53

Veli B.

4 adet 74hc165 ile 28 bit giriş alıyorum. Bu bitler 28 inputa karşılık geliyor. SysTick ile her 20ms de bir girişleri okuyorum. Her bir input için 1 puls<>5 puls veya basılı tutma şeklinde 6 durum sözkonusu ve her hangi bir anda, her hangi birisi oluşabilir.
En hızlı şekilde durum tesbitini nasıl yapabilirim.
2-3 farklı yöntem denedim fakat istediğim kadar hızlı çalıştıramadım ve beynim durmuş durumda artık.

Yaşadığım temel sorun;
1 puls ile 3 veya 5  puls arasında ki ayrım konusu. 2 veya 3 veya 5 puls olup olmadığına karar verme aşamasında yapmam gereken bekleme, istemediğim bir durum.

Bu konuda çözüm önerisi olabilecek olan var mı?

CLR

Alıntı yapılan: katana - 13 Ekim 2011, 13:54:53
4 adet 74hc165 ile 28 bit giriş alıyorum. Bu bitler 28 inputa karşılık geliyor. SysTick ile her 20ms de bir girişleri okuyorum. Her bir input için 1 puls<>5 puls veya basılı tutma şeklinde 6 durum sözkonusu ve her hangi bir anda, her hangi birisi oluşabilir.
En hızlı şekilde durum tesbitini nasıl yapabilirim.
2-3 farklı yöntem denedim fakat istediğim kadar hızlı çalıştıramadım ve beynim durmuş durumda artık.

Yaşadığım temel sorun;
1 puls ile 3 veya 5  puls arasında ki ayrım konusu. 2 veya 3 veya 5 puls olup olmadığına karar verme aşamasında yapmam gereken bekleme, istemediğim bir durum.

Bu konuda çözüm önerisi olabilecek olan var mı?

Tuş okumada kullandığım tekniği sende uygulayabilirsin(74hc165 ile). Ama her girişte 1 tane 1n4148(toplam 28) olmalı ve toplam 1 tane 10k ve 2n2 ile sadece puls geldiğinde okuyabilirsin. Bu uygunsa anlatayım?

 
Knowledge and Experience are Power

Veli B.

#2
Int oluşturma için öneriniz sanırım. Kart tasarımı ve baskısı bitti. Ekleme yapmak oldukça sıkıntılı. Yazılımsal çözmeye çalışıyorum bu yüzden.
Aslında değişimi yakalama konusunda sorun yok. Değişimleri debug esnasında çok net görüyorum ve sorun yok. Sorun zamanlama konusunda.
Öneriniz için teşekkür ederim.

Ersin

#3
CPLD ile yapabilirsiniz.
Xilinx XC9572XL yeterli olmalı, onun dışında Altera EPM240 ile yapılabilir.EPM240 kesinlikle yeterli gelecektir yalnız LVTTL 3.3V desteklemektedir , Xilinx ile yaparsanız besleme 3.3V olup  XL serisi 5V tolerant tır.

Not: Mesajı yazarken , kartın yapıldığını yazmışsınız , bu pek çozum olmayacak gibi.

Veli B.

#4
Donanımsal değişikliğe başvurmadan çözmek istiyorum Ersin Üstadım. CPLD konusunda da bilgim yok :(
Sorunum sağlam bir algoritma kurmakta.
Atıyorum,
4. pin low oldu. İlgili pine ait flagı(3bit) açıyorum. SysTickten değeri kopyalayıp bir maskeleme değişkenine atıyorum. Tekrar okuma yapıyorum ta ki o pin tekrar Low  veya SysTick-(Maskeleme değişkeni+ dead time)>0 oluncaya değin. Dead time dediğim 2 puls arasında ki ölü zaman. SysTick-(Maskeleme değişkeni+ dead time)>0 olmuşsa 1 puls olarak kabul ediyorum ve 2. gelen pulsi yeni bir işlem olarak kabul ediyorum. Aynı mantık diğer pulslar içinde geçerli.
Eğer  SysTick-(Maskeleme değişkeni+ dead time)<0 ise flag içeriğini 1 artırıyorum.

Ersin

Mesajı yazarken siz 2. mesajı yazmışsınız, herhangi bişey tasarlanmadıgını düşünerek yazdım , sonra gordum 2 mesajda kartı yaptıgınızı.