Analog giristen buton kullanimi guvenli mi?

Endorfin35+

Kayıtsız Üye
Katılım
1 Mayıs 2020
Mesajlar
4,166
Ugrastigim guc kaynagi projesinde i/o sayisi konusunda biraz sikinti yasiyorum.

Diyot matrisi+buton ile ilerledim ancak kod karmasiklasinca sorun yasmaya basladim.

Tasarimi degistirerek buton basina bir adet pin kullaninca pinler yetmiyor. Ek donanim kullanmadan cozmek istiyorum.

Tek bir Analog giris ile butonlar uzerinden fakli seviyeler uygulayarak sorunu cozebilirim ancak zamanla veya hemen butonlar tam temas etmesiginde okunan deger sacma sapan olur kaygim var. Aslinda sadece 5 buton kullanacagim ancak yinede icimde kusku var.

Butonlar icin 1,2,3,4,5v seviyelerini ayarlasam saglikli calisir mi?
 
O seviyeler olur. Ama mekanik buton kullandığın için mutlaka "debounce" algoritması kullanman lazım, yoksa butonları okuma hızına bağlı olarak birden fazla buton okuma durumu var.
 
diyot matirisini bir daha deniyim olmadı analog girişi deneyeceğim.

debounce için çok basit bir mantık kullanıyorum bugune kadar beni üzmedi. Dez avantajı butonu bıraktığın anda işlem yapıyor.


Kod:
if (buton== HIGH)
{
    While (buton==HIGH);
    delay(buton_delay);   // 50ms
    
    işlem.....
}
 
Diyot matrisinde şöyle bir mantık kurdum;




PORTB 3,4,5 e girdim. PORTB de 6 ve 7 yok. Register de 8bit e muhtemelen 0 ile tamamlıyordur.

okuma mantığım şöyle;

Bağlantı noktalarımız A,B,C olsun. Port datası CBAXXX şeklindedir. Bizim ihtiyacımız olan sadece CBA bitlerini okumaktır. Bunun için bit kaydırma ile sağa doğru 3 bitlik kaydırma yapılır. işlem sonunda 000CBA datamız olur. Bu aşamadan sonra CBA datasın işlemek çok kolaydır. Okunan veriyi doğrudan Desimal karşılıkları ile karşılaştımak mümkndür. Bit kaydırma işlemini kod içerisinde sürekli yazmak yerine gerekli işlem define ile INPUT_HIGH olarak tanımlanmıştır. Normal kullanım olan if(digitalRead(Buton_1 == HIGH) sorgusu yerine if (Buton_1 == INPUT_HIGH) şeklinde sorgu yapılmalıdır.

#define INPUT_HIGH (PINB>>3)

Bu kurguda hata var mı? Kodlamada bir aşamadan sonra hatalı okumalar almaya başladım. Bread boardan şüphelendim. bir türlü hatayı bulamadım. Ancak tekrar deneyeceğim...
 
ADC kullanmak ve butonların yapılandırdığı bir direnç bölücüsü daha basit olur. Sadece buton sayısı artı 1 kadar direnç gerekir.
 
Aynı anda basma ihtiyacı yok. 1v ara ile 5 buton yeterli okuma toleranslarını da biraz geniş tutarsam olur bu işte.. 3-5 yıl sonra kontaklar direnç gösterince ne olacak :cheeky2: Normal kullanımda kontaklar direnç gösterse hiç sorun olmaz ama burda başka butona basıyormuş gibi olacak...

Baştan beri içime sinmeyen durum bu... Abartıyor muyum yoksa bilemedim ?
 
Aynı anda basma ihtiyacı yok. 1v ara ile 5 buton yeterli okuma toleranslarını da biraz geniş tutarsam olur bu işte.. 3-5 yıl sonra kontaklar direnç gösterince ne olacak :cheeky2: Normal kullanımda kontaklar direnç gösterse hiç sorun olmaz ama burda başka butona basıyormuş gibi olacak...

Baştan beri içime sinmeyen durum bu... Abartıyor muyum yoksa bilemedim ?

Eğer yanlış buton bilgileri gittiğinde birileri ölecek veya çok ağır maddi hasar meydana gelecekse düşünmek lazım bunları :)

Asıl paranoyayı bence güç kaynağının çıkış voltaj kontrolüne vermek lazım. Öyle bir tasarım olmalı ki, arıza durumunda çıkış voltajı sıfır olmalı veya AZALMALI. Kesinlikle artmamalı. Yoksa 5V ile çalışan binlerce liralık bir FPGA kartını bağlarsın ve güç kaynağındaki bir arıza nedeniyle karta 40 V gider.
 
Butonlar ile analog giristen deneme yaptim. Evdeki malzemeler tarih oncesinden oldugu icin butonlardan biri sikintili cikti. Zaman icinde olmasini bekledigim durumla hemen karsilastim.

Ancak aranan kan bulundu... Basit bir cozum buldum. Butonlar yerine transistor. Ve transistoru buton ile surme.. Bu yeni kurgu ile bozuk buton sorun cikarmiyor. Boyle icime sindi...

+5 transistor eklendi devreye... Ancak transistor ucuz :D

Birgun okuldan arkadasla bulustuk devre tasarimindan konu acildi... Sonunda bana sen asiri cimriler belgeselini izledin mi dedi...:katil1:
 

Forum istatistikleri

Konular
5,663
Mesajlar
97,402
Üyeler
2,438
Son üye
İbrahimSönmez

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top