Picproje Elektronik Sitesi

MİKRODENETLEYİCİLER => Atmel => Konuyu başlatan: veliusta - 05 Şubat 2016, 18:51:39

Başlık: Ynt: Keypad ve PullUp
Gönderen: veliusta - 05 Şubat 2016, 18:51:39
Arduino ile kütüphanesiz 4x4 keypad yapmaya çalıştım. Yapmayı başardım fakat aynı anda 4-5 tanesi basınca sapıtıyor ve ISIS'te simulasyonunu denerken sarı oluyor pinler
Hata MCU'nun PullUp undan mı kaynaklanıyor. Direnç ile mi pullup yapmalıyım?

Sorun nereden kaynaklanıyor olabilir?



void setup(){
  pinMode(6, INPUT_PULLUP);
  digitalWrite(5, LOW);
}


mesaj birleştirme:: 06 Şubat 2016, 09:52:18

Sorunu buldum.

(http://www.circuitstoday.com/wp-content/uploads/2014/05/hex-keypad-arduino.png)

R1'e enerji verdiğimde ve 1 butona bastığımda sorun yok. Fakat 1 ve 4 ye aynı anda bastığımda 1 ve 4 kısa devre oluyor.
Çünkü C1'e Hem 0 hem 1 gidiyor. Sorunu nasıl çözeceğim.

C1'i okurken R1'i çıkış diğerlerini giriş olarak mı ayarlıyacağım?
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: 8051-ARM - 05 Şubat 2016, 20:20:15
Tarama yaptığın bacaklara diyot bırakırsan sorunun çözülür.
Başlık: Ynt: Keypad ve PullUp
Gönderen: bc_esd - 05 Şubat 2016, 20:48:51
Keypad işlemlerini 74HC922 ile yapsanız daha iyi olur.
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: Kabil ATICI - 05 Şubat 2016, 21:28:24
tarama bacaklarına diyot ve pull-up direnci ile çözülebilir. (klayve devrelerini bir inceleyin.

74C922 veya 74C923 (HC değil) kullanılabilir, ama aynı anda basılan tuşlara cevap veremez. Basılan tuşlardan birine kilitlenir ve tuş bırakılana kadar taramayı askıya alır.
Başlık: Ynt: Keypad ve PullUp
Gönderen: veliusta - 05 Şubat 2016, 22:08:12
Benim istediğim şey. Tüm tuşlara aynı anda basıldığında cevap verebilmesi. Yani 65536 tane olasılığıda istiyorum.

Diyot ekledim biraz düzeldi ama tam değil.

(http://resmet.net/images/2016/02/05/wewe.png)

Serial Monitörde 31 olması gereken yerde 255 gönderiyor. Anlamadım.
Alt satırlardada durumlar aynı sadece Son buton değerini gönderiyor.




mesaj birleştirme:: 06 Şubat 2016, 12:10:16

Tek tek bastığımda sorun yok. Sadece Sütünları kullandığımda sorun yok. Ama bir sütün full basılı iken(resimdeki gibi) bir başka satırdan basma kalktığımda tüm satırdaki butonların toplam değerini ekliyor.

mesaj birleştirme:: 06 Şubat 2016, 12:41:08

49 yerine 51 gönderiyor; ]http://resmet.net/images/2016/02/05/Untitled.png]  (http://resmet.net/images/2016/02/05/Untitled.png)
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: 8051-ARM - 05 Şubat 2016, 23:18:38
Donanımsal değil yazılımla ilgili sorun var kodu paylaşırsanız sorun daha iyi anlaşılır.
Başlık: Ynt: Keypad ve PullUp
Gönderen: veliusta - 06 Şubat 2016, 01:23:28
unsigned long BIN_1, BIN_2, BIN_3, BIN_4, BIN_SON;

void setup(){
  pinMode(6, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  digitalWrite(2, LOW);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  BIN_1 = !(digitalRead(6))*1 + !(digitalRead(7))*2 + !(digitalRead(8))*4 + !(digitalRead(9))*8;
 
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, HIGH);
  digitalWrite(5, HIGH);
  BIN_2 = !(digitalRead(6))*16 + !(digitalRead(7))*32 + !(digitalRead(8))*64 + !(digitalRead(9))*128;
 
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(5, HIGH);
  BIN_3 = !(digitalRead(6))*256 + !(digitalRead(7))*512 + !(digitalRead(8))*1024 + !(digitalRead(9))*2048;
 
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  digitalWrite(5, LOW);
  BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
 
  BIN_SON = BIN_1 + BIN_2 + BIN_3 + BIN_4;
 
  Serial.println(BIN_SON);
}

Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: veliusta - 06 Şubat 2016, 22:55:19
@8051-ARM Yardım etmedin.
Başlık: Ynt: Keypad ve PullUp
Gönderen: pwm.c - 06 Şubat 2016, 23:42:01
veliusta, şu bağlantıyı denermisin:

(http://s14.postimg.cc/y5unh5srh/fullkeypad.jpg) (http://postimg.cc/image/y5unh5srh/)
Başlık: Ynt: Keypad ve PullUp
Gönderen: veliusta - 07 Şubat 2016, 00:46:38
pwm.c oldu fakat Ben bu diyotları keypadın içine nasıl sokacam.

(http://resmet.net/images/2016/02/06/534.png)
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: dursuncemal - 07 Şubat 2016, 00:46:59
Serial Monitörde 31 olması gereken yerde 255 gönderiyor. Anlamadım.

hocam seriale  BIN_SON  degiskenine tus okumadan el ile veri girip denedinizmi serial monitorden okudunuzmu ?zira burda sikinti yok gibi. olsa olsa tur donusumu olabilir birde buton degerlerini hesaplamadan once araya bir delay girseniz.
Başlık: Ynt: Keypad ve PullUp
Gönderen: veliusta - 07 Şubat 2016, 00:49:19
(http://store.nerokas.co.ke/image/cache/data/keypad%204x4-600x600.jpg)
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: dursuncemal - 07 Şubat 2016, 00:57:07
hic diyotsuz  calismasi lazim

  digitalWrite(2, HIGH);//  buralari digital   hi yerinegiris yapin(input);
  digitalWrite(3, HIGH);//buralari digital   hi yerinegiris yapin(input);
  digitalWrite(4, HIGH);//buralari digital   hi yerinegiris yapin(input);
  digitalWrite(5, LOW);
burayada bir delay girerseniz
  BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
Başlık: Ynt: Keypad ve PullUp
Gönderen: veliusta - 07 Şubat 2016, 01:08:24
Çalışmıyor diyotsuz.


unsigned long BIN_1;
unsigned long BIN_2;
unsigned long BIN_3;
unsigned long BIN_4;
unsigned long BIN_SON;

void setup(){
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);

  Serial.begin(9600);
}

void loop(){
delay(5);
 
  digitalWrite(2, LOW);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  delay(5);
  pinMode(3, OUTPUT);
  delay(5);
  BIN_1 = !(digitalRead(6))*1 + !(digitalRead(7))*2 + !(digitalRead(8))*4 + !(digitalRead(9))*8;
  delay(5);
 
  digitalWrite(3, LOW);
  pinMode(2, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  delay(5);
  pinMode(4, OUTPUT);
  delay(5);
  BIN_2 = !(digitalRead(6))*16 + !(digitalRead(7))*32 + !(digitalRead(8))*64 + !(digitalRead(9))*128;
  delay(5);
 
  digitalWrite(4, LOW);
  pinMode(3, INPUT);
  pinMode(2, INPUT);
  pinMode(5, INPUT);
  delay(5);
  pinMode(5, OUTPUT);
  delay(5);
  BIN_3 = !(digitalRead(6))*256 + !(digitalRead(7))*512 + !(digitalRead(8))*1024 + !(digitalRead(9))*2048;
  delay(5);
 
  digitalWrite(5, LOW);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(2, INPUT);
  delay(5);
  pinMode(2, OUTPUT);
  delay(5);
  BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
  delay(5);
   
  BIN_SON = BIN_1 + BIN_2 + BIN_3 + BIN_4;
  delay(5);
  Serial.println(BIN_SON);
}


10K dirençte ekledim.
Başlık: Ynt: Keypad ve PullUp
Gönderen: pwm.c - 07 Şubat 2016, 01:19:39
diyotsuz olmaz gibi ama hala emin değilim. imkansızı başarmakta mümkündür.
kullandığınız keypad yapıştırmalı ise yapacak bişey yok ama tuşlu olanlardansa pcb üzerine 805 kılıf diyotlar eklenebilir ancak ciddi bir cerrahi müdehale ister.
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: dursuncemal - 07 Şubat 2016, 01:21:36
 hocam karisiklik var sanki


  pinMode(3, INPUT);/////ok
  pinMode(4, INPUT);/////ok
  pinMode(2, INPUT);/////ok
  ilgili port output
  ilgiliport   low
  delay(5);
  BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
  delay(5);
   
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: veliusta - 07 Şubat 2016, 01:22:59
Karışıklık yok.
Output yapmayı çok erken almışım.
Başlık: Ynt: Keypad ve PullUp
Gönderen: dursuncemal - 07 Şubat 2016, 01:30:37
unsigned long BIN_1;
unsigned long BIN_2;
unsigned long BIN_3;
unsigned long BIN_4;
unsigned long BIN_SON;

void setup(){
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(8, INPUT);
  pinMode(9, INPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);

  Serial.begin(9600);
}

void loop(){
delay(5);


  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  delay(5);
  pinMode(2, OUTPUT);
  digitalWrite(2, LOW);
  delay(5);
  BIN_1 = !(digitalRead(6))*1 + !(digitalRead(7))*2 + !(digitalRead(8))*4 + !(digitalRead(9))*8;
  delay(5);
 

  pinMode(2, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  delay(5);
  pinMode(3, OUTPUT);
  digitalWrite(3, LOW);
  delay(5);
  BIN_2 = !(digitalRead(6))*16 + !(digitalRead(7))*32 + !(digitalRead(8))*64 + !(digitalRead(9))*128;
  delay(5);
 

  pinMode(3, INPUT);
  pinMode(2, INPUT);
  pinMode(5, INPUT);
  delay(5);
  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);
  delay(5);
  BIN_3 = !(digitalRead(6))*256 + !(digitalRead(7))*512 + !(digitalRead(8))*1024 + !(digitalRead(9))*2048;
  delay(5);
 
 

  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(2, INPUT);
  delay(5);

  pinMode(5, OUTPUT);
  digitalWrite(5, LOW);

  delay(5);
  BIN_4 = !(digitalRead(6))*4096 + !(digitalRead(7))*8192 + !(digitalRead(8))*16384 + !(digitalRead(9))*32768;
  delay(5);
   
  BIN_SON = BIN_1 + BIN_2 + BIN_3 + BIN_4;
  delay(5);
  Serial.println(BIN_SON);
}
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: veliusta - 07 Şubat 2016, 01:33:35
Düzeltmiştim bende. Diyotsuz olmuyor.
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: dursuncemal - 07 Şubat 2016, 01:36:43
evet hocam hocam cok ozur en basini kacirmisim  ben port  cakismalarina  kilitlendim obur tafaftan veriyi kacirdik   pwm.c   ustanin dedigi gibi bu is diyotsuz olmaz   
Başlık: Ynt: Ynt: Keypad ve PullUp
Gönderen: 8051-ARM - 08 Şubat 2016, 23:20:28
Alıntı yapılan: veliusta - 06 Şubat 2016, 22:55:19
@8051-ARM Yardım etmedin.
Hocam kusura bakmayın yeni farkettim sorunu çözmenize sevindim.