Düğmeleri yeniden başlatma


32

Yakın zamanda düğme geri çekilmesi hakkında bir makale okudum ve örneğin bir Arduino (ATMega mC) ile çalışırken bunu aklımda tutmamın gerekip gerekmediğini merak ediyordum. Özellikle kesintilerle çalışırken sorun olduğunu kabul ediyorum.

Öyleyse, koddaki sıçramayı tespit etmek daha mı iyidir, yoksa bu donanıma dikkat edilmeli mi? Lütfen detaylandırın.


Yanıtlar:


17

Anahtarınıza kadar bir kapsama takılmasını şiddetle tavsiye ederim (umarım bir tanesine sahip olursunuz veya bir tanesini elinize alabilirsiniz). Anahtarlarında 5v'den -5v'ye, 4v'den -3v'ye, sonra 2v'ye, sonra 0v'ye kadar giden bir projenin olduğunu gördüm. Bir kapsamdaki mevcut çizime baktığımızda, çok çok büyük bir yükseliş vardı.

Özel durumunda, donanımdaki anahtarını çıkarması onun için çok gerekliydi.

Ancak, öte yandan, yazılımda kolayca kaldırılabilecek daha küçük bir etkiye sahip olan anahtarlar gördüm.

Ancak seçeneklerinizi tartmanız gerekir. Çok karmaşık bir ürün bilgisine sahipseniz, ek yükü hem size bir programcı olarak hem de cpu kullanımına eklemek işe yaramayabilir ve sadece biraz donanım eklemek için daha iyi olurdu. Şimdi, diğer yandan, maliyetleri ve ebatlarını düşürmeye çalışıyorsanız, olabildiğince fazla donanımı kaldırmak ve mümkünse hepsini bellenimde yapmak isteyeceksiniz.


Geçiş düğmesinin resmini çektim ve Wikipedia'da yayınladım: en.wikipedia.org/wiki/File:Switch_bounce.JPG
Thomas O

@ Tomo O bu sıçrama oldukça eğlenceli bir resimdir. Sadece Vincent Van Den Berghe'nin tüm sıçramaların böyle görünmeyeceğinin farkında olduğundan emin olmak istiyorum. Bu sıçrama 0-5v ile sınırlı, her zaman böyle görünmeyecek.
Kellenjb

2
@ Tomo O, bir yan not olarak, Oscope görüntülerini bu şekilde çeken başarısız öğrenciler için bir pratik oluşturduk. Ekrandaki flaş korkunç. Ayrıca, bir adım öteye gidiyoruz ve öğrencileri CSV veya labview gibi bir şey kullanarak gerçek veri noktaları toplamaya zorluyoruz, böylece daha sonra raporlarda ve veri analizlerinde kolayca kullanılabilir.
Kellenjb

@Kellenjb, HP-IB'yi destekleyen kapsamım için yakında bir yazıcı alıyorum. Ayrıca kameramdaki "Spor" modunun flaşsız ve bulanıklık olmadan kapsam ekranının iyi resimlerini çekebileceğini keşfettim.
Thomas O

1
@Lundin Gerçek zamanlı bir ortamda, çok fazla kesintiye güveniyorsunuz. Bir kesmeye bir düğmeye basarsanız, gerçek zamanlı sisteminizin tek bir düğmeye basarak birkaç kez kesilmesini istemezsiniz. Ayrıca 10 msn beklemek için kaynakları tahsis etmek de istemezsiniz.
Kellenjb

15

Profesyonel bir elektronik tasarımcıysanız, patronunuzun donanımda yapmanıza izin vermeyeceği ihtimali vardır. Nedeni basit: üretim partiniz yeterince büyükse, yazılım tamamen ücretsizdir , ancak ürettiğiniz her birim için donanım ödenmelidir. Dirençler ve kapasitörler kir ucuz olsa da, bunları bir PCB üzerine monte etmek, satın alma fiyatlarının 20 katına mal olabilir.

İster yazılımda, ister donanımda çıldırtın, yine de kaliteli butonları seçmek zorundasınız. Eşyadaki rezil 157ms butonu herhangi bir uygulama için uygun değildir .
Düğmeyi genellikle 32ms aralıklarla örneklerim , bu da herhangi bir iyi düğmenin geri yükleme süresini köprülemek için yeterlidir. Alps SKQG TACT Anahtarlarının oldukça hayranıyım .

Alps tact switch

Test ettiğim birkaç cihazda, başlangıç ​​sıçrama süresi 10ns'tan azdı. 100 000 devir çalışma ömrüne sahip olmasına rağmen 200 000 test ettik devir ve o zaman bile 32ms debounce yeterliydi. (Sanırım gerçek geri dönüş seviyesini ölçmeliydim, ama o zamanki asıl ilgi alanımız nihai ürünün davranışıydı. Her neyse, şartname dışı kullanıyorduk.)

Gerçekten bir donanım çözümü istiyorsanız, makalede teknik olarak en iyi çözüm olarak belirtilen SR flip-flop çözümünü kullanıyorum:

debounce circuit

Flip-flop, örneğin küçük bir VSSOP8 paketinde mevcut olan bir çift ​​NAND geçidi ile oluşturulabilir. Bu çözümün en büyük dezavantajı, SPST'nin daha yaygın olarak bulunabileceği bir SPDT düğmesine basmanızdır.


12

Düğmeleri çıkarmak için birçok farklı yol vardır. Yazılım veya donanımda yapıp yapmamanız proje gereksinimlerinize ve anahtar türüne bağlı olacaktır.

İşte farklı yöntemlere bazı bağlantılar:

http://www.ganssle.com/debouncing.htm

http://hackaday.com/2010/11/09/debounce-code-one-post-to-rule-them-all/


Ben soruyu gördüğümde ganssle ile bağlantı kuracaktım.
Kortuk

Ganssle makalesi, bu soruyu sormamın sebebiydi, sorumu birleştirdi :) Debounce kod parçacıklarına bağlantı için teşekkürler.
Vincent Van Den Berghe,

Yazılım / donanımın ne zaman kullanılacağını göstermek için birkaç kullanım senaryosunu özetler misiniz? (Bu muhtemelen öznel, ancak yine de bazı örnekler istiyorum)
Vincent Van Den Berghe

1
@ Vincent, Kellenjb nasıl karar vereceğini cevabını özetledi. Linkini tıklayamadım çünkü komik bir isim vardı, şimdi tıkladığımda ganssle!
Kortuk

Eğer oybirliği / genel kural buysa, gerçekten de, daha fazla örneğe gerek yok.
Vincent Van Den Berghe

6

Bu makale geri çekilme konusundaki "İncil" dir. Temas sıçrama herhangi bir uygulama ile ilgili bir sorun olabilir.

Anahtarlarda gecikme için ayarlama yapmak daha kolay olduğundan, temas sektirme miktarlarında farklılık gösterdiğinden, anahtarları yazılımdan çıkarmak genellikle en iyisidir. Anahtar serbest bırakmanın yeniden başlatılması da sıklıkla gereklidir. Anahtar üreticileri genellikle ürünleri için hemen çıkma miktarını belirtir, genellikle 10ms - 20ms arasındadır.


İnsanlar neden bunu oy kullanıyor?
Toby Jaffey

Anahtar serbest bırakma hakkında iyi bir nokta!
Vincent Van Den Berghe,

1
Oy vermedi, ancak bunu sadece yazılımda yapmak çok kötü bir fikir. Karakterize etmek iyi bir fikirdir.
Kortuk

"Genelde" dedim, durum buydu ve sebebini verdi. Ayrıca BOM maliyetini minimuma indirir ve güvenilirliği arttırır.
Leon Heller

Bu, yalnızca sinyal denetleyicinizin güvenli sınırları içinde kaldığında güvenilirliği artırır. Bu işlem, bileşen aşınmasını artırmadan bileşen sayısını azaltırsanız güvenilirliği artıracaktır. Ben senin mesaj kavramı ile aynı fikirde değildim demiyordum, ama sürekli sahaya yeni giren mühendislerle birlikte çalışıyorum ve bunun gibi bir cevap ve her şeyi yazılımdan çıkartacaklar. Her zaman karakterize etmelisin. Ben de size hakaret etmedim, ama ben de beğenmedim, sanırım yazılım gibi geniş bir cevap yeni geliştiricilerin donanımlarını riske atma riskini taşıyor.
Kortuk

1

Geçiş anahtarı, onlarca milisaniye boyunca devam edebilir. Bir zamanlayıcıda çalışan bir kesme yordamından bir anahtarı çağırıyorsanız, sıçrama sorun olmaz, çünkü anahtarı bir sıçrama fırtınasının ortasında yoklamasanız bile, yeni durumu hemen alırsınız. , ya da en kötüsü eski devlet olsun ve bir sonraki zamanlayıcıya dayalı ankete kadar yeni devlet görmüyorum. Bunun gibi zamanlanmış bir ISR'den sorgulama, yazılım çıkaran bir biçim oluşturur.

Bununla birlikte, bu anahtarı kesintiye neden olmak için kullanıyorsanız ve kesme hizmeti yordamının 10 milisaniyeden az bir sürede hızlı bir şekilde çalışmasını beklerseniz, donanımın kaldırılması gerekir, aksi takdirde bir anahtar olayı biraz rasgele sayıda sonuçlanabilir. kesintiye uğrar ve kesinlikle beklenenden çok daha fazla. Öte yandan, kesme yordamı yeterince uzun sürerse, ISS bitmeden önce anahtar geçişi çözülecek ve siz iyi olacaksınız, ancak iyi yapılandırılmış ISR'ler bu kadar uzun sürmez.


Kesintiye neden olan anahtarın olması iyi bir fikirdir. Ancak, bir kez aldığınızda, daha fazla kesintiye izin vermeyin - bunları kapatın ve bunun yerine belirtilen gecikme süresi için bir zamanlayıcı başlatın.
Lundin

@ Lundin - eğer zamanlayıcılar mevcutsa, sadece zamanlayıcı yaklaşımını uygulamak için zamanlayıcıyı kullanabilir ve anahtarın hiç kesinti oluşturmasına zahmet etmeyebilirsiniz.
JustJeff,

0

Herhangi bir şey yapmanın en iyi yolu size en uygun olanıdır. Ancak bir mikrodenetleyiciniz varsa, yalnızca bir kod çabası pahasına yazılımdan çıkabilirsiniz.

Yazılımdan çıkmanın en temel yolu, en uzun sıçrama süresinden daha farklı olan zamanlardaki düğmeleri kontrol etmektir. 50 ms 'normal' anahtarların hemen çıkma süresinde bir üst sınır gibi gözüküyor, bu nedenle yazılımınızı bu şekilde düzenleyebildiğiniz zaman açık:

forever loop
   wait (at least) 50 ms
   check buttons
   do procesing
end loop

Ve bunun için MCU'nuzdaki çip üzerindeki zamanlayıcıları kullanın.
Lundin

Bu elbette mümkün, ancak çok fazla program yazabilirsiniz.
Wouter van Ooijen 11:11

3
Kaliteli ürünlerdeki profesyonel yazılımlar her zaman çip zamanlayıcıları kullanacaktır. Hobileri döngü veya ölü beklemeli yoklama için bazı "NOP" ile kurtulabilirler. Ancak bunu gerçek ürün gereksinimleriniz ne olursa olsun, gerçek ürünlerde yapmak için hiçbir neden yoktur. “Zamanlayıcının nasıl çalıştığını bilmiyorum ve bu ölü döngü tembel benliğimin yazması için 10 saniye sürüyor” bir mühendis için geçerli bir argüman değil.
Lundin

Bullock. Profesyoneller, (eldeki projeye bağlı olarak) (diğer şeylerin yanı sıra) “donanımı mümkün olduğu kadar etkili kullanma” veya “profesyonelin zamanını olabildiğince etkili kullanma” anlamına gelebilecek şekilde etkili olmalıdır. Bu nedenle, sizin comming'iniz kesinlikle bazı durumlarda (muhtemelen ele aldığınız tüm vakalar) uygulanır, kesinlikle tüm durumlarda geçerli değildir.
Wouter van Ooijen 11:11

Çip üstü zamanlayıcıyı uygulamak en fazla zamanınızı alır. Bu pek karmaşık bir şey değil, günlük ekmek ve tereyağı mühendisliği. Daha iyi bir çözüm ve genel olarak daha iyi bir kalite elde etmek için projenize bir saat bile yatırım yapamıyor musunuz? Evet, eğer programlama hakkında pek bir şey bilmiyorsanız, bu size bir hafta sürebilir. Ama o zaman belki de ilk başta yazılımla çalışmamalısın ... belki de onunla daha fazla çalışmalısın , bu yüzden bu basit küçük şeyi çabucak uygulamayı öğreneceksin.
Lundin

0

Henüz bahsedilmemiş olan geri bırakma yaklaşımlarından biri, VDD'ye diğeriyle toprağa bağlı bir çift atış anahtarının kullanılmasıdır. Bunu (yazılım veya donanım yoluyla) mevcut durumuna zayıfça çekecek bir pime besleyin. Böyle bir yaklaşım, çift atmalı bir anahtarın avantajlarını sağlayacak, ancak iki değil, sadece bir G / Ç pimi gerektirecektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.