Gokrtl

Gökhan Kartal (TeknoDay)
Staff member
Katılım
27 Şubat 2019
Mesajlar
11,209
Bu gün gelen pcf8574 ile beraber seriyi tamamladım. Dün i2c seri haberleşme modülünü alarak 2x16 lcd ekran pinlerine lehimlemiştim.
Bu gün de gelen pcf8574 seri haberleşme modülünü 4x4 keypadimin pinlerine lehimleyerek nodemcu'nun pinlerini yeterli hale getireceğim.
Normalde i2c seri haberleşme modülü olmadan 2x16 lcd ekramınızdan 12 pini, pcf8574 seri haberleşme modülü olmadan da keypadimizden 8 pini nodemcu ya bağlamamız gerekiuordu. Yalnız nodemcu bize bu kadar pini sağlamıyor. Bu iki seri haberleşme modülü sayesinde toplamda 20 olan pin adedimizi 8'e düşürdük.

Biraz daha düşürelim mi? :)
Pcf8574 seri haberleşme modülümüzün üzerinde bulunan input VCC, GND, SCL ve SDA pinlerinden yararlanacağız.
İlk önce i2c ile pcf8574 arasındaki bağlantıyı yapalım. İ2c seri haberleşme modülümüzden çıkan VCC, GND, SCL ve SDA pinlerini pcf8574 modülümüzdeki dişi header tarafında aynı pinlere denk gelecek şekilde jumper kablo ile bağlıyoruz.
Daha sonra pcf8574 modülümüzün erkek header tarafından jumper kablo çıkarak nodemcu da VCC-->3.3v, GND-->GND, SCL-->D3, SDA-->D4 pinlerine bağlıyoruz. Gördüğünüz gibi VCC ve GND pinlerini saymazsak sadece 2 dijital pini kullanarak sistemi kurmuş olduk.

Yalnız burada önemli bir durum var. i2c modülü ile pcf8574 keypad modülü birbirinden farklı yapıda modüller. O yüzden bana göre çok mantıklı olan bu bağlantının çalışmama ihtimali var. İki modülüde incelediğim de ikisinin de üzerinde PCF8574T çip olduğunu fark ettim. Eğer birbirinden farklı yapıdaki bu iki modülün pin bağlantıları doğru yapılmış ise sorunsuz bir şekilde çalışacağını düşünüyorum.
Bunu öğrenmenin 2 yolu var. Birincisi dene ve gör, ikincisi ise @taydin veya @uyesercan 'a sor. :D
Sercan halihazırda bu devreyi kurmuş olduğu için daha ayrıntılı bilgi verebilir belki.

Diyelim ki olmadı. İki modül yapı farkından dolayı bize destek vermedi. Bu durum da yinede kârdayız.
Çünkü bu iki seri haberleşme modülünü ayrı ayrı da nodemcu ya bağlasak VCC ve GND hariç 4 digital pini kullanmış olacağız. 20 neredeee 4 nerede.

20200916_112043.jpg



seri_haberleşme_1.jpg


i2C Scanner Kodu;

Kod:
// --------------------------------------
// i2c_scanner
//
// Version 1
//    This program (or code that looks like it)
//    can be found in many places.
//    For example on the Arduino.cc forum.
//    The original author is not know.
// Version 2, Juni 2012, Using Arduino 1.0.1
//     Adapted to be as simple as possible by Arduino.cc user Krodal
// Version 3, Feb 26  2013
//    V3 by louarnold
// Version 4, March 3, 2013, Using Arduino 1.0.3
//    by Arduino.cc user Krodal.
//    Changes by louarnold removed.
//    Scanning addresses changed from 0...127 to 1...119,
//    according to the i2c scanner by Nick Gammon
//    https://www.gammon.com.au/forum/?id=10896
// Version 5, March 28, 2013
//    As version 4, but address scans now to 127.
//    A sensor seems to use address 120.
// Version 6, November 27, 2015.
//    Added waiting for the Leonardo serial communication.
//
//
// This sketch tests the standard 7-bit addresses
// Devices with higher bit address might not be seen properly.
//
 
#include <Wire.h>
 
 
void setup()
{
  Wire.begin();
 
  Serial.begin(9600);
  while (!Serial);             // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}
 
 
void loop()
{
  byte error, address;
  int nDevices;
 
  Serial.println("Scanning...");
 
  nDevices = 0;
  for(address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();
 
    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println("  !");
 
      nDevices++;
    }
    else if (error==4)
    {
      Serial.print("Unknown error at address 0x");
      if (address<16)
        Serial.print("0");
      Serial.println(address,HEX);
    }   
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
 
  delay(5000);           // wait 5 seconds for next scan
}
 
Son düzenleme:
Burada hata var. D1 ve D2'yi kullanacaksın. I2C pinlerin aynı olacak sadece keypad ve lcd I2C adresleri farklı. Adresleri nasıl bulunduğunu bildiğini varsayıyorum.
 
Sendeki Arduino değil ama örnek bir şema buldum, bağlantı aynı.

I2C-Keypad-Connections.png
 
Burada hata var. D1 ve D2'yi kullanacaksın. I2C pinlerin aynı olacak sadece keypad ve lcd I2C adresleri farklı. Adresleri nasıl bulunduğunu bildiğini varsayıyorum.
Bu konuyu ayrıca açtım. Bizim alış-veriş sistemi ile alakası yok. O yüzden pin numaraları şimdilik farketmiyor.
Burada önemli olan sadece 2 tane pin kullanarak hem lcd yi hem keypadi kullanabilir miyiz?
Modül yapılarını inceledim. Yazılım tarafında doğru kodlama yapıldığında kesinlikle sadece 2 pinin işimizi göreceğine inanıyorum.
 
i2c ve PCF8574 ün sadece iki pin üzerinden haberleşmesi ve Scanner kodlaması ile tarayarak haberleşme kodunun bulunması hakkında bir video hazırladım.


seri_haberleşme_1.jpg
 
Son düzenleme:
@Gokrtl,

Keypad a bağlı modul ile lcd nin arkasındaki modul üzerindeki entegreler aynı mı? Bende kullanmadığım lcd modulu var. O mudulu i/o çoğaltıcı olarak kullanabilmeyi umuyorum.
 
@Gokrtl,

Keypad a bağlı modul ile lcd nin arkasındaki modul üzerindeki entegreler aynı mı? Bende kullanmadığım lcd modulu var. O modulu i/o çoğaltıcı olarak kullanabilmeyi umuyorum.
Benim bu işten anladığım şu. Elinde keypad, lcd veya başka bir çok pinli cihaz var ise bu cihazın pinlerini rast gele pcf8574 modüle bağlıyorsun.
Sonra modülü geliştirici kartta SDA ve SCL pinlerine bağlıyorsun. Bu pinler yoksa dijital 1 ve 2 pinlerine bağlıyorsun.
Sonra Scanner kodunu geliştirici karta yükleyip çalıştırıyorsun. Bu yazılım çok pinli cihazı tarayarak bağlantılarını tespit edip bu bağlantıları kullanabilmen için de "0x20" gibi bir kod veriyor. Sonra o kodu kendi yazılımın içinde kullanarak cihazla haberleşiyorsun.
Muhtemelen çok pinli cihazın pin yerlerini modül üzerinden değiştirip tekrar scan edersek farklı bir kod üretecektir.
Tüm bu yukarıdaki anlattıklarım varsayımdır. Test edilmemiştir.
Şimdiye kadar test ettiğim sadece iki modülün bir biri ile bağlanıp kodları ayrı ayrı alabilmesidir. Gerisi şimdilik muamma.
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,788
Mesajlar
99,009
Üyeler
2,464
Son üye
s4met

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