Gelişen mikrokontrol teknolojileri ve artan bilgi birikimi sayesinde geliştirici düzeyinde daha yaygın kullanımına olanak tanımıştır. Burada elimden geldiği kadar bazı örnekler sunmaya çalışacağım... Görüleceği gibi ilk örneklerimizde çoğunlukla ASM üzerinde iken daha sonraları C üzerinde örnekler yer almaktadır. Hatta ilerleyen zamanlarda Arduino örneklerinin yer alması kaçınılmaz olacaktır.

PCF8574AT etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
PCF8574AT etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

9 Kasım 2020 Pazartesi

ENC28J60 ve Raduino ile LCD üzerinde IP görüntüleme ve IP değiştirme

Ethernet'e bağlanan cihazlarda sabit ip iyi olabilir, ama belli bir sayının üzerine çıktığı zaman ve özellikle üretilen cihaz sayısı birkaç yüzlere ulaştığında ip takibi, ve özellikle arıza, yenileme gibi işin içine girdiğinde ip takip etmek giderek zorlaşır ki işin içinden çıkılmaz bir hal alır.

Bu noktadaki çözümlerden biri değeri değiştirilebilir ip'dir. Hele ki her cihazın üzerinde cihazın ip'sini görebilir hale getirilirse, çok daha iyi olur.

Bu projede "ENC28J60 ve Arduino ile Cep Telefonu haberleşmesi" projesinde anlatılan projeyi bir adım öteye taşıyarak, IP değerini LCD ekran üzerinde görüntüleme ve aynı zamanda ip değerini değiştirilebilir hale getirmeyi amaçlanmaktadır.

NotProjeye bir buton eklenirse, istenildiği anda default ip değerine geri dönüşü sağlanabilir. IP ayarlarında daha fazla ayrıntılı değişiklik isteyen, kendi geliştirebilir.

Raduino


Arduino UNO modelinde program geliştikçe bir noktadan sonra bellek yetersizliği ortaya çıkmaya başladığı için, Arduino MEGA eşdeğeri ama UNO boyutlarında bir klon Arduino kullanılacaktır. Hele ki, bir de LCD ve ip değiştirme için kodların da ekleneceği düşünülür ise, iki veya üç tane UNO kullanımı gerekebilir. Böyle bir çözüm işi daha da karıştıracağı düşünülürse. Arduino MEGA kapasitesinde bir model kullanımı yerinde bir çözüm olabilir. Ya da ARM tabanlı bir işlemcinin kullanıldığı bir kart daha iyi olabilir.

Arduino MEGA kartı kullanımı mümkündür, ama bu daha önce paylaşımı yapılan ENC28J60 kartları ile uyum sorununu getirecektir. En azından SPI bacaklarının (MISO, MOSI, CLK ) uçları ne yazık ki farklı pin yerleşimine sahiptir. Bu noktada bizi ilgilendiren UNO pin uyumluluğu (özellikle SPI bacakları). Diğer çözüm SPI bacaklarını uyumlu hale getirmek, ama bu başka bir çözüm yoludur.

Yöneldiğimiz çözüm, UNO bacak uyumluluğu olduğu için, piyasada bir şekilde ulaşılan Raduino kartı oldu. Hiç bir değişiklik yapmadan ENC28J60 ethernet kartı bacakları kullanılabilme imkanı tanımaktadır.

Tek sıkıntısı Raduino üzerinde harici besleme girişi yer almamaktadır. Ama test amacı için uygulamalar da harici besleme girişi, USB portu üzerinden mobil telefon şarj cihazları ile çözülebilmektedir.

Daha fazla bilgi adresinden (http://kontrolcepte.blogspot.com/2017/04/raduino-yerli-arduino.html) ulaşılabilir.

LCD ve I2C

LCD olarak arkaplan aydınlatması olmayan bir model tercih edilecektir. Sonuçta arkaplan aydınlatması LED bile olsa bir enerji ihtiyacı vardır. Kendi adıma o LED'in harcadığı enerjiyi bile kıskanacak durumdayız, çünkü burada oldukça enerjiye ihtiyacı olan ENC28J60 var.

Şekil-1:LCD modülünün görünümü. Üzerindeki şeffaf plastik LCD'nin söküldüğü cihaz üzerinden geldi.

LCD haberleşmesi için daha önce paylaşımı yapılan projedeki i2c haberleşmesi kullanılacak. Mega2560'ın çok bacağı olsa bile, diğer projelerde kullanılabilmesi için sadece 2 hat ile haberleşmesini sağlamak için i2c haberleşmesini kullanır. Önceki projede kullanılan ENC28J60 kartı kullanmak isteğinden dolayı en az ek bağlantı gerektirdiği için bu yol seçildi.

Bu bölümün seçimi kullanıma göre değişecektir, çoğunlukla cihazın kullanım yerine göre senede birkaç kereden fazla ip değerine ihtiyaç olmayacaktır. Hele oturmuş bir sistem ise, yıllarca ihtiyaç olmayacaktır. İsteyen bu bölümü sadece ihtiyaç olduğu zaman ip değeri görüntüleyecek şekilde düzenleyebilir. Bu şekilde devrenin enerji tüketimi oldukça düşecektir. İş ek bir butona bakar. Aynı etkinlik ethernet bağlantısından bir komut gönderme şeklinde de yerine getirilebilir.

Sadece IP değeri görüntüleme açısından, LCD olarak 1x16 karakter LCD yeterlidir. Ama çoğumuzun elinin altında en azından 2x16 LCD vardır. Bu yoldan ilerleyerek, 2x16 karakter lcd kullanımı yolu seçildi

Sadece gerekirse, LCD sürücü kartı üzerindeki trimpot ile kontrast ayarı yapılması gerekir. Çok önemli değil ise de bazı üreticilerin LCD ürünleri arasında fark olabiliyor.

Raduino üzerindeki i2c bacakları UNO üzerinde yer aldığı AREF yanındaki konumdadır. (Arduino UNO modelinde olduğu gibi Analog girişlerin olduğu A4 ve A5 bacakları değil tabii. Arduino MEGA modelinde i2c bacakları 20 ve 21. pinlere denk gelir.)

ENC28J60 modülü


Bir önceki projede ayrıntıları anlatılan ENC28J60 entegresi üzerine kurulu bir karttır. Ethernet haberleşmesinin tamamını Arduino üzerindeki SPI bağlantıları üzerinden yürütülür.

Şekil-2:ENC28J60 modülünün görünümü.

Ethernet bağlantısı da RJ45 konnektörü üzerinden sağlanır. Projede kullanılan RJ45 konnektörünün içinde darbe trafosu bulunduğu (2 adet) için projede anlatılan devreler güvenle ethernet hattına bağlanabilir. Hatta yeni sürüm modemler (router) cross kablo kullanılsa bile devrenizin ihtiyacı olan ethernet bağlantısını sağlayabilmektedir.

RJ45 üzerindeki iki adet LED, ethernet modül için kablo bağlantısı yapıldı(hub veya router için) ve ethernet aktivasyonu göstermek için kullanılmaktadır.

Elbette piyasada birçok Arduino ile uyumlu ethernet modülü yer almaktadır. ENC28J60 bunlardan biridir. Kodu uyarlamanız halinde diğer ethernet modülleri ile de kullanabilirsiniz.

ENC28J60 3.3V besleme (kart üzerinde bulunan regülatör) ve 25MHz ile çalışmaktadır. İstenirse bağlanacak işlemciler için saat kaynağı olarak da çalışmaktadır. Yani işlemci için saat kristalı ihtiyacını ortadan kaldırır. Elbette bu seçenektir, Projede zaten Raduino kullanıldığı için (hazır modül) bu seçenek söz konusu olmaz. Eğer birleşik bir proje şeklinde geliştirilmesi düşünülürse mümkündür.

ENC28J60 için anlatılabilecek çok şey olduğu kesin, ne de olsa Microchip 100 sayfanın üzerinde bir datasheet hazırlamış. Ama amacımız ENC28J60 veri kağıdını Türkçe olarak yayınlamak olmadığı için, bu işi ayrıntılı öğrenmek isteyenlere bırakıyoruz.

Kutu

Bu projede bir değişiklik yaparak, projedeki modüllerin içine konulacak fazla karmaşık olmayan bir kutu eklemek istedim.

Çoğumuzun o veya bu şekilde bildiği 3D yazıcılar sayesinde 3D ile çizimi oluşturulan bir nesne plastik bir cisme dönüştürülebilmektedir(hatta metal). 3D yazıcılar birçok yöntemi kullansa da, çoğunlukla plastik eritilip üst üste yığılması yöntemi ile istenen nesne üretilebilmektedir.

Projede 3d yazıcılardan biri kullanılarak 2 parçalı bir kutu oluşturulmuştur.

Projede 3d modelin üretilmesi ve üretilen modelin 3d yazıcıda basılması anlatılmayacak. Onun yerine üretilmiş olan parçanın kullanımı ve 3d çizim dosyaları paylaşılacaktır. (stl dosyası olarak)

Şekil-3:Tinkercad üzerinde çalışması yapılan kutu görünümü.

Kutunun 3d modelin üretilmesinde (çiziminde) Tinkercad ismi ile anılan, web sitesi üzerinde çalışan bir uygulama kullanılmıştır. Çizimden elde edile 3d model dosyası bilgisayara indirilmiştir.

Şekil-4:iki parçalı kutunun içi görünümü.

Şekil-5:İki parçalı kutunun dış görünümü.


Kutu devrenin testi için gerekli olmasa da sadece bir seçenektir. Yine de devreyi kutuya koymanın elbette olumlu yanları var.
Şekil-6:İki parçalı kutunun birleşik hali.

Şema

Proje de Arduino bölümünü ayrı tutarsak, geriye sadece ENC28J60 ve birkaç tane ayrık eleman ilavesi ile devreyi oluşturuyor. Devre birçok elemanı SMD olacak şekilde tasarlandı ki, Arduino üzerinde kullanılabilecek bir modül olsun. Çünkü PCB üretiminde, kendi imkanlarımızla yapılabilecek bir yapıda olması açısından tek yüzlü karta montaj uygun görüldü.

Kısaca devre üzerinden geçecek olursak; R4,R4,R5,R6 dirençleri (49.9 Ohm %1) hat uygunlaştırma dirençleridir.).R1, R2 220R dirençleri RJ45 konnektörü üzerindeki dirençlere akım sınırlama elemanı olarak iş görür. R3 (2K) direnci ENC28J60 için R bias olarak çalışır. R16 (22k) ENC28J60 RESET bacağı için pull_up direnci olarak çalışacaktır. Aynı zamanda devre ilk açıldığında resetleme işlemi için RC zaman sabiti olarak işlev görür. R15 (10k) direnci INT bacağına pull-up direnci olarak iş görür, çünkü ENC28J60 herhangi bir durum, örneğin başlama gibi durumlarda cevap vermemesi halinde işlemcinin kesmeye gitmemesi için int çıkışı garantiye alınmış olur. Burada PCB çiziminde yer almayan ama, şemada gösterilen R8..R13 (1K) direnç devrede test amacı ile devreye eklenmiştir. Şemada gösterilmeyip de, PCB üzerinde gösterilen R14 (0R) jumper olarak devreye monte edilmiştir.

C1 (10uF) kondansatörü ENC28J60 iç beslemesi için gerilim regülatörü filtre kondansatörüdür. Bu regülatör 3.3Voltdan 2.5Volt üretir. C3 (100uF) ve C14 (100nF) kondansatörler U2 (LM1117) giriş filtereleridir. C2 (10uF) ve C13 (100nF) kondansatörleri U2 (LM1117) çıkış filtreleridir. C11 ve C12 (18pF) kondansatörleri ENC28J60 entegresinin osilatör destek kondansatörleridir. Diğer tüm kondansatörler filtre amaçlı devre üzerinde bulunmaktadır.

U2 (LM1117-3V3) gerilim regülatörüdür ve 5Voltdan devre için gereken 3.3V beslemeyi üretir. U3 (74HC125) Arduino ile ENC28J60 arasındaki gerilim seviyesini uygulaştırma amacı ile kullanılmaktadır. U1 (ENC28J60) bu projenin üzerine kurulu olan elemandır ki, ethernet haberleşmesi ile ilgili tüm işlemleri ve Arduino ile ilgili ileştimi yürütür. Arduino ile ethernet hattı arasında köprü görevini yerine getirir.

TR1 (HR911105A) ENC28J60 ile ethernet hattı arasındaki bağlantı ve elektriksel yalıtımı yerine getirir. BB (ferrit beat) ethernet veya HR911105A üzerinden gelebilecek yüksek frekanslı sinyallerin beslemeye ulaşmasını engeller. LED1..LED6 bu devreye test amacı ile monte edilmiş elemanlardır.

Buraya kadar her şey PCB üzerindeki bağlantıla ile sağlandı LCD ise 4 adet kablo +5V, GND SCL ve SDA ENC28J60 modül üzerindeki bağlantı noktalarına bağlanması gerekmektedir. (PCB'yi yeniden çizecek olanlar LCD için ENC28J60 modülü üzerine bir bağlantı konnektörü ekleyebilir.)
Resim 7: Projenin devre şeması. Raduino üzerinde diğer bacaklar gösterilmemiştir.(Raduino Arduino Mega formatında bir karttır.)

Devre üzerinde M1 olarak gösterilen veya PCB üzerinde J1...J4 olarak gösterilen (sıra pinler) Arduino UNO veya benzeri özellikle SPI hatları sıra pinler üzerinde yer alan Arduino modellerinin kullanımına uygundur.

Y1 (25MHz) kristal devrenin çalışması için gereken frekansı üretir.

Montaj

Öncelikle pcb tek yüzlü olarak verilse de isteyen gerekli değişiklikleri yaparak çift yüzlü bastırabilir. Bu şekilde köprüleme elemanlarından kurtulmak mümkündür.


Resim 8:PCB'nin üst eleman yüzü

Resim 9: PCB'nin alt yüzdeki bakır yolları.(üst yüzden görüldüğü şekildedir.)

Resim 10: PCB'nin alt yüzdeki elemanlar. (üst yüzden bakıldığında görüldüğü şekildedir.)


Devre montajına öncelikle dip elemanların montajı ile başlanır, U1 istenirse entegre soketi kullanılmadan entegreler doğrudan PCB üzerine monte edilebilirse de, eğer entegre soketi kullanımı, yanan elemanların değiştirilmesi gibi birçok sorundan kurtaracaktır. Montajı sonuna sıra pin ve HR911105A montajının bırakılması iyi olur. SMD elemanlar malzeme listesinde 805 olarak belirtilse de, SMD eleman çizimleri 1206 kılıf monte edilebilecek şekilde yapılmıştır.
Resim 11: PCB'nin üst eleman yüzünün model görünümü.

Resim 12:PCB'nin alt eleman yüzünün model görünümü.


Resim 13: PCB'nin monteli halinin üstten ve alttan görünümü. Bu görüntüde 2 adet ek pin yoktur.

Devre montajında tek yüzlü tasarım nedeniyle, çizimde oluşturulmuş tel köprüler unutulmamalıdır. Ne yazık ki, sıra pinler PCB'nin bakır yollarının bulunduğu yüze monte edilmelidir.

Proje planlanırken tabii işin içinde kutu yoktu. Dolayısı ile ENC28J60 modülü üzerindeki LED'ler kolaylıkla görülebiliyordu. Ama kutu projeye dahil edildiğinde LEDlerin görülebilirliği sınırlandı. Optik kanal gibi değişik çözümler olabilse de, bu tür çözümler tam erişim alanımda yer almıyor veya LASER kesici gibi özel cihazlara erişim gerektiriyor. Hali ile ek bir kart ile kutu yüzeyine taşımak benim açımdan daha sıcak bir çözüm olarak görülüyor.(Tabii ki kutunun açıklığı ile hizalama sorunlarını saymıyorum bile.) Ek LED kart kablo ile monte monte edildiği için kutudaki LED'lerin açıklığına göre ek kartı biraz sağa-sola çekiştirmek mümkün..

Ek PCB olarak fazla bir çizim yok, sadece 6 adet LED için 6 adet bacak (anot) ve bir tane ortak bacak (ortak katot) bağlantısı yeterlidir.

Şekil-14:EK LED kartı PCB görünümü. LED'lerin yerini tahmin edersiniz. Katot uçları ortak olacağına göre, LED'in katot uçları ortak yönde olması gerekiyor. Elimde başka proje için basılmış bir PCB vardı...

Şekil-15:EK LED kartı monte edilmiş görüntüsü. LED'ler ve kablolar

Şekil-16:ENC28J60 kartı üzerindeki LED'lerin yerine, ek LED kartı kablolar ile monte edilir. LED'lerin yönünü şaşırmamak yeterlidir.

Şekil-17:LED ek kartın yolları solda ve malzeme yerleşimi sağda verilmiştir.
Şekil-18:LED ek kartın 3 boyutlu modeli. Malzemeler açıkça görülmekte.

Malzeme Listesi

ENC28J60 kartı için Malzeme Listesi

LM1117-3V3 TO220U2
74HC125 SOICU3
ENC28J60 dip28U1
50R 1/4W dipR4,R5,R6,R7
220R 1/4W dipR1,R2
2K 1/4W dipR3
22k 805 kılıfR16
10k 805 kılıfR15
0R 805 kılıfR14
1K 805 kılıfR8..R13
100nF 1206 kılıfC4,...C10,C13,C14
18p 1206 kılıfC11,C12
10uF/25VC1,C2
100uF/16VC3
LEDLED1...LED6
HR911105ATR1
1 adet 40'lı erkek sıra pinJ1..J4


İstenirse, e ENC28J60 (28'li dar) için entegre soketi kullanılabilir. Raduino ve ethernet bağlantısı için ethernet kablosu unutulmamalıdır. Raduino için gerekli olan USB kablosunu söylenmesine bile gerek yok.

ENC28J60 projenin çalıştırılması

Besleme Raduino USB portuna bağlı USB kablosu üzerinden 5V olarak sağlanacaktır. İsteyen harici bir güç kaynağı veya taşınabilir cep telefon şarj aletlerini kullanabilir.
  1. LCD ekranı kutu içinde kendine ayrılan bölüme tak
  2. Raduino üzerine ENC28J60 modülünü pinlerin tümünün birbirine girmesine dikkat ederek, takın
  3. Birleşik ENC28J60 modülünü ve Raduino modülünü kutuya yerleştir.
  4. Kutunun üst parçasını yerleştir.
  5. USB kablosunu Raduino USB girişine takın. (Kare şeklindeki giriş)
  6. Ethernet kablosunun ENC28J60 modülünü üzerindeki RJ45 girişine takın.
  7. USB kablosunun diğer ucunu güç kaynağına takın.
  8. Son olarak ENC28J60 modülündeki RJ45 konnektörüne takılan ethernet kablosunun diğer ucunu modeme takın.
  9. Her şey tamam ise kutunun kenarındaki LCD ekran üzerinde ip değer görülecektir.

Resim 19: Cihazın montaj aşamaları


Resim 20: Cihazın montaj aşamaları

Resim 21: Cihazın montaj aşamaları.


İnternetten bağlantısı verilen programı indirin, Arduino IDE uygulamasına yükleyin açın ve Raduino üzerine yükleyin. (ip numarasını kendi ethernet sistemine uygun olduğundan emin olun.)

Her şey tamam ise, Raduino+ENC28J60 modülü çalışmaya başlayacak ve ethernete bağlanacaktır. Bunu modem üzerinden ve ENC28J60 modülü üzerinde yer alan RJ45 konnektörü üzerindeki LED'lerden izlenebilir.

Resim 22: Cep telefonu çalıştırılmış ve bir LED yakılmış halde görünümü. hedef ip (ENC28J60 ip) olarak belirtilen değer 192.168.0.45 olarak denendi.

Konu ile ilgili ayrıntılı bilgilerin "ENC28J60 ve Arduino ile Cep Telefonu haberleşmesi" projesinden ulaşabilirsiniz.

Cep Telefonu programı (Android)

Android Cep telefonu (veya tablet) programı "App inventor" ile yazıldı.(veya kodlandı)

App inventor sitesine üye olup, kendi uygulamanıza geliştirebilirsiniz. Oluşturduğunuz uygulamanızdan başka bir şeyi bilgisayarınıza bir şey indirmeniz gerekmez. Sadece internet bağlantısı gereklidir. Derlenen uygulama ister bilgisayara, isterse cep telefonunuza indirilebilir. Konu ile ilgili bilgiler kendi sitesinde yer almaktadır.

Şekil-23:Bilgisayarın ağ ayarlarında genel ip ayarları görülmektedir. Projemizde biz sadece "ip adresi:" ayarını değiştirmekteyiz. Daha doğru bir ifade ile zaten ağa bağlı olan projemizin sadece ip adresinin son değerini değiştiriyoruz.

ip değiştirme için geliştirilen uygulama "ENC28J60 ve Arduino ile Cep Telefonu haberleşmesi" uygulamasına entegre edilmemiştir. (cep telefonu uygulamasına) Sadece Raduino üzerine yazılan kodlamaya entegre edilmiştir. Çünkü cep telefonu uygulamasında sürekli ip değişimi yapılmaz. Tabii daha komplike bir uygulama daha fazla hafıza işgal eder.

Şekil-24:"ENC28J60 IP Değiştirme" uygulamasının cep telefonu ekranı üzerindeki görümü Bir ağda değişiklik yapılacak bölüm kırmızı daire ile gösterilmiştir. Ip ayarın tamamı da değiştirilmesi mümkündür. Ama buraya girilen değer kaydedilmez ve uygulamaya her bir girişte tekrar girilmesi gerekir.

Uygulama değiştirilmek istenen ip numarası (nokta ile ayrılmış 4 adet 0 ile 255 arasındaki rakam-sadece kutucuklara yazılacak), cihaz ip numarası, "Gönder" butonu ve "IP Kaydet" butonundan oluşur. Cihaz ip numarası noktalar ile ayrılmış 4 adet 0-255 arasındaki rakamdan oluşur. Bu Ethernet modül üzerinde yer alan LCD ekranda görülen numara olacaktır. Cihaz ip girişi tamam ise, "IP Kaydet" butonu basılarak, programın bir sonraki açılışında kullanılmak üzere kaydedilebilir. Pencerenin en üstünde yer alan noktalar ile ayrılmış 4 adet kutucuk değiştirilmek istenen ip değeri girişini temsil eder. Her bir kutucuğa 0-255 aralığında bir değer girilmesi gerekir. Girişler tamam ise sadece "GÖNDER" butonuna tıkla. Girilmiş ip değerinin ENC28J60 bağlantısındaki cihaza gider, ip değeri kaydedilir ve cihaz yeniden başlatılır. Sonrasında elbette gönderilen IP cihazın yeni ip değeri olur ki. LCD ekran üzerinde de görülebilir.

Bu noktada girilen yeni ip değeri sadece en sağdaki hanede değişiklik yapılması yerinde olacaktır. Modem (router) ip numarası değiştirilmek istenmiyorsa tabii.

"GÖNDER" butonuna basıldıktan sonra Raduino yeniden başlar ve cihaz yeni ip değerini alır. "ENC28J60 ile Cep" uygulamasını kullanarak yeni ip üzerinden LED yak/söndür işlemleri test edilebilir. Yeni ip ENC28J60+Raduino (Atmega2560) üzerine kaydedilir ve enerji kesilse bile, tekrar besleme verildiğinde kayıtlı ip üzerinden bağlantı kurmaya çalışacaktır.

Şekil-25:LCD ekran üzerinde görülen IP değeri. Bu son noktadan sonrası değiştirilmiş bir değerdir. Kayıtlı değeri: "192.168.0.55" dir.

ip konusunda proje anlatılanları kafanızda bir yere oturtulamıyorsa, internet üzerinde ethernet ve ip bağlantısı konusunda araştırma yapmanız gerekebilir.

IP Değiştirme programı

Android App uygulaması daha önce de belirtildiği gibi App inventor üzerinde geliştirildi.

Şekil-26:android uygulamasında kullanılan öğelerin isimleri.


Uygulamada değiştirilecek ip'nin girildiği bölüm, programı basit tutmak için 4 bölümü ayrı girilecek şekilde (her biri 0-255) bölündü. Bu giriş kutucukları "IP1", "IP2", "IP3", "IP4" olarak isimlendirildi.

Diğer bir öğemiz bilginin gönderildiği cihazın IP değeridir ki, "ip_no" olarak isimlendirildi. Buraya ip değeri noktaları da girilmesi gerekir.

Girilen cihaz ip değerini kaydetmek için bir buton bulunmaktadır."But_kaydet" olark isimlendirilmiştir.

Son olarak değiştirilmek istenen ip değerinin gönderildiği buton vardır ki, bu "gonder_but" olarak adlandırılmıştır.

Şekil-27:Android App için kodlama.

Sonuç

Proje için gerekli belgeleri buradan indirebilirsiniz. 

Projede istenen uygulama gerçekleştirildi. Daha fazlası elbette geliştirilebilir, ki çoğu uygulamada örneğin modem(router) cihazlarında bu uygulamaları görebilmekteyiz.

Yazılım açısından üzerinde harcanacak zamana bağlıdır.


21 Haziran 2019 Cuma

Arduino ile i2c LCD Sürme

Arduino ile i2c LCD Sürme

Arduino UNO ve benzeri bir Arduino modeli (veya mikrokontroller) ile bir cihaz tasarlanmak istendiği zaman bir noktadan sonra artık bacakları yetmediği çeşitli arayışlar içine gireriz.

Çözümlerden biri Arduino Mega gibi bir modele yönelmektir. Mega modelinin kartının büyük olması gibi bir sıkıntısı var.

Başka bir çözüm ise LCD kullanılıyorsa, LCD'yi bir I2C ile sürmek. Bu iş için hazır çözümler var ise de piyasada bulunabilen, ve hatta bir çoğumuzun malzeme stoğunda bulunan paralel LCD'ler ile bunu gerçekleştirebilmek pek ala mümkündür.

Şekil-1 :Projedeki malzemelerin toplu haldeki görünümü. Üstteki i2c için 4'lü kablo, soldaki PCF8574AT modülü, ortadaki 2x16 LCD ekran, ve sağdaki Arduino UNO

Bu projede Arduino UNO ile bir paralel bağlantıya sahip LCD'yi i2c üzerinden sürmek.

i2c
Bu protokol Philips tarafından bulunmuştur. (şu anda NXP olarak devam ediyor). Ama diğer firmalar patent sorunları ile karşılaşmamak adına two-wire (iki telli) olarak adlandırmak durumunda kalmışlardır. O yüzden diğer çip üreticileri bu protokole two wire ismini kullanarak donanımlarına eklemişlerdir. En çok bilinen i2c çipleri DS1307(saat) ve 24C01 vb.(eeprom) gibi çiplerdir.

i2c veya two wire gnd hattı hariç tutularak saat ve data hattı olarak adlandırılırlar iki hat üzerine aletlerin haberleşmesini oluşturur. Saat ve data hatları sadece gnd'ye çekilerek çalıştığı için her bir hat için birer pull-up direnci veya akım kaynağı gerektirir.

7 bit adresleme bilgisi gerektirdiği için 128 farklı adreste i2c aletleri adresleyebilir. Bazı çiplerde harici adresleme için bacaklar yer alırken, bazı çiplerde bu adres seçme bacakları bulunmaz. Bu çipin üreticisi ve birlikte kullanılacağı düşünülen diğer donanımlara bağlıdır.

İki veri yolu biri saat kaynağı özellikle ana kontrol çipi tarafından üretilir (master çip) ve kontrol edilir, veri hattı ise verinin akışı yönüne göre değişiklik gösterebilen veri iletim hattıdır (veri kaynağı master veya uydu sistemi-slave olabilir). Bu aletler açık kollektörlüdür. Yani i2c hattı üzerine pull-up direnci ile hatların lojik-1 seviyesine çekiliyor.

Şekil-2 :i2C hattında başlama ve durdur durumlarının dalga şekli,

Saat hattı değişirken veri hattı kararlı kalması zorunludur. Aksi durumda bu i2c hattında bulunan çipler tarafından farklı anlamlarda yorumlanır.

i2c iletişimi bir BAŞLA durumu ile başlar. Saat hattı "1" konumunda iken veri hattı "1-0" geçişi ile oluşturulur.

i2c iletişimi DURDUR durumu ile sonlandırılır. Saat hattı "1" konumunda iken veri hattı "0-1" geçişi ile oluşturulur.

Bir i2c hattı üzerine bir aktif master konabilmesine rağmen (ki hatta birden fazla master konabiliyor) bir veya birden çok slave alet bağlanabiliyor. Tabii birbirleri ile çatışmadığı sürece.
Bir master BAŞLA durumu yayınladığında birden fazla slave olduğunda hangi slave aletin hedeflendiğinin bilinmesi gerekir. Bunun için her slave aletin kendi özel adresi vardır. (bazı belgelerde bu adrese ID olarak adlandırmaktadır) Aslında en yüksek anlamlı 4 bit aletin kullanıldığı alana göre tanımlanmış bir kod ise de, bu bitleri izleyen 3-bit adres bitleridir. Bazı aletler için 3 bit için seçme bacakları vardır veya değiştirilebilir . Kalan en düşük anlamlı bit ise oku/yaz bittir.

İlk zorunlu bayt bu şekilde tanımlandıktan sonra ikinci bayta geçmeden 1 saat çevrimi süresinde yapılan iletişimin kabul edildiğini belirten bir bitlik bir iletişim yapılır. Yani bu ilk baytı kabul eden slave aleti veri hattını lojik-0 konumuna çekerek yayınlanan adresin kabul edildiğini belirtir. Bu kabul aşaması her bayt arasında yapılır. Son alınan bayta kadar. Son bayt alındıktan sonra veri hattı lojik 1 konumunda kalarak kabul değil bilgisi iletilir. Kabul bilgisini hangi alet veri alıyorsa (master veya slave) veriyi alan alet tarafından yayınlanır.

PCB incelendiğinde görüleceği üzere 3 adet 10k pull up direnci ile adreslerin +5V'a çekilmiştir. Bu nedenle çip seçim adresi 111'dir. Bu pinler lojik-0'a çekilme seçeneği vardır. Bu sayede aynı çip içeren modüller ile birden fazla LCD ekran pek ala aynı i2c hattına bağlanabilir.
Çip kodu olarak PCF8574AT olduğu için sabit slave adresi 0111 ile başlayacaktır. Dolayısı ile PCF8574A takılı olan modülün adresi 0111111x şeklinde olacak ve x burada oku/yaz bitini temsil edecektir.
PCF8574AT
PCF8574AT8 bit I/O genişleme modülü olarak üretilmiş bir çiptir. Tabii ki uygulamamızda kullanımına uygun i2c haberleşme hattı üzerinden işlemci ile iletişim kurabilme kapasitesine sahiptir. Ayrıca çip I/O pinleri giriş olarak olarak düzenlendiği zaman gelen bilgiye uygun bir kesme bilgisi üretebilen bir bacağı da vardır. Kesme bacağı açık kollektörlüdürü ve kesme bilgisi okuma esnasında üretiliri.(Bu projede kullanılmayacağı için üzerinde fazla durulmayacaktır.)

PCF8574AT port pinleri işlemci tarafından gönderilen bilgiye göre çıkış veya giriş olarak düzenlenebilir. Projemizde kullanım alanı olarak incelendiğinde portlar çıkış olarak düzenlenmektedir.
Şekil-3 :Modülün monte edilmiş haldeki görünümü

Sağdaki sıra pinler (üstten alta doğru);

  •  GND
  • +5V
  • SDA
  • SCL

şeklinde sıralanmaktadır.

LCD pinleri olarak düşündüğümüzde, E, RS,RW kontrol pinleri ve D4..D7 data pinleri kullanılmaktadır. Bu pinler PCF8574AT port pinlerine bağlanmakta kalan tek pin de LCD arkaplan aydınlatma LED'lerini yakıp söndürmek için kullanılabilmektedir.

i2c adresR5R7R8
0x38varvarvar
0x39varvaryok
0x3Avaryokvar
0x3Bvaryokyok
0x3Cyokvarvar
0x3Dyokvaryok
0x3Eyokyokvar
0x3Fyokyokyok
PCF8574AT için i2c adresini oluşturan adres seçme pinlerinde yer alan kısadevre durumlarına göre adreslerin tanımlarını oluşturan tablo.

Karakter LCD
LCD kelime olarak sıvı kristal ekran anlamında ingilizce kelimelerin ilk harflerinden oluşmaktadır. Özel bir sıvı içinde yer alan öğelerin elektrik alanı uygulandığı zaman birbirine göre konumlarını değiştirmesi esasına dayanır.
Şekil-4 :2x16 LCD ekran görünümü


Burada elektrik alanı birbirine paralel iki cam yüzey üzerine kaplanmış iletken metal levhalardan oluşur.Kaplamadan kasıt doğrudan metal malzemenin elektrik uygulanarak buharlaştırılması (plazma) ve bu metal buharının cam yüzeyinde yoğunlaştırılması ile elde edilir. Bu camların arasına sıvı kristal olarak bilinen malzeme ile konulur, ki aralık oldukça küçüktür.

Şekil-5 :Bir karakter LCD için ayrıntılı olmasa bile kesit görülmektedir.

Bu halde elektrik uygulansa bile tabii ki bir görünümde bir değişiklik olmayacaktır. Bir görüntü oluşturabilmek veya görüntüde bir değişiklik yapabilmek için ışığı kutuplamak gerekir. En basitinden camların iki yüzeyi üstlerine ışığı ince yarıklardan geçiren filtreler yapıştırılır. iletkenlere elektrik alanı uygulanmadığı zaman ışık camlar arasından sorunsuz geçer ve camlar saydam görülür.
Elektrik alanı uygulandığı zaman ışık sıvı kristaller tarafından etkilendiği için ışık camlar arasından geçemez ve ekran kararır.
Şekil-6 :LCD ekran arkaplan aydınlatması ile görünümü. (arka planda görülen ışık PCF8574AT modülü tarafından oluşturulmuştur.

Buradaki kritik durum DC gerilim uygulandığı zaman sıvı kristaller kararlılığını kaybeder ve ekran saydam duruma geçer. Onun için kararlı ve görüntü için değişken gerilim uygulanması gerekir. Bu tek bir ortak bağlantı ile olan LCD ekranlarda kolaydır. Uygulanan gerilimler ortak nokta ile birlikte belirli zamanlarda gerilim değerini değiştirmektir.

Asıl iş birkaç ortak nokta olduğu zaman ortaya çıkıyor. Bu noktada çoğunlukla uygulanan yöntem adreslenmeyen ortak noktaları Vcc/2'de tutmak, adreslenen ortak bacak ile Vcc ve GND arasında adreslenen diğer ögeleri de ters kutuplamada tutmaktır. İşte LCD sürücüleri, özellikle matris ekranlarda uygulanan yöntem budur.


Şekil-7 :LCD sürücüsü örneği olarak Novatek firmasına ait NT7603 çipinin blok şeması görülmektedir.

LCD sürücüleri istenen karakter LCD çiplerinde tutulduğu için sadece dışarıdan uygulanan veri iletişimi ile istenilen görüntüyü oluşturur. Ekranda gösterilen karakter bilgisi karakter jeneratörü olarak adlandırılabilecek sabit bellekte tutulur. Hali ile gelen veriler doğrultusunda LCD çipi bu karakter üreteçlerinden karakter bilgisini okur ve karakter olarak ekrana yansıtır.

Aynı LCD çip olmasına rağmen

1x82x8-
1x162x164x16
1x202x204x20
1x402x404x40

satır x karakter sayısı) gibi karakter LCD'ler bulunmaktadır. (tablo olarak verilen LCD'lerin haricinde de karakter LCD'ler yer alabilmektedir)Ek olarak besleme, veri ve kontrol hatları birkaç bağlantı şeklinde farklılık gösterebilmektedir. Önemli olarak LCD'nin kullanılacağı yere göre arkaplan aydınlatmalı veya yansımalı olarak tipleri de bulunabilmektedir. Toshiba çipi içeren grafik LCD'ler üzerinde de karakter LCD gibi çalışabilen ürünler de vardır.

Karakter LCD çalışması ve bağlantıları 2 adet besleme,3 adet kontrol hattı ve 8 adet veri hattı mikrokontroller ile iletişim yapılır. Bunlara ek olarak 1 adet kontrast ayarı için giriş yer alır ki, buraya 10k trimpot ile istenilen kontrast ayarı yapılabilir. Burada 8 adet olarak belirtilen veri hattı, sürme teknikleri sayesinde sadece 4 veri hattı kullanımı ile kullanımı mümkündür. Tüm bu sürme hatları i2c sayesinde Arduino için besleme hariç sadece 2 hatta düşürmek de mümkündür.

Şema
Projede Arduino ve karakter LCD ayrı tutulmak kaydı ile malzemeler neredeyse SMD (yüzey montaj) yapısındadır. Hatta trimpot bile bacakları biraz kesilerek biraz da bükülerek yüzey montaj şekline getirilmiştir.

Kısaca devre üzerinden geçecek olursak; R1,R2,R3,R4 dirençleri Karakter LCD arkaplan aydınlatması LED akım sınırlama dirençleridir. Bu şekilde bağlantı oluşturulması LED bağlantılarının her zaman için aynı yapıda olmamasından kaynaklanmaktadır. R1,R3 veya R2,R4 çifti şeklinde bağlantı yapılmaktadır. Herhangi bir çift uygulanması durumunda diğer çift boş bırakılması gerekmektedir.projede R1 ve R3 çifti kullanılmıştır.
Şekil-8 :Projenin şeması. Monte edilmeyen malzemeler de şemada gösterilmiştir.

U1 (PCF8574AT) Arduino ile karakter LCD arasındaki iletişimi yani i2c haberleşmesini yönetmektedir. Arduino A4 ve A5 ile SDA ve SCL bağlantıları yapılmaktadır. SDA ve SCL bağlantı hatları üzerine R14-R15 çifti ile R16-R17 çifti pull-up direnci olarak herhangi bir çift bağlanmaktadır. Projede R14 ve R15 çifti tercih edilmiştir.

Karakter LCD pinPCF8574AT pin
D4P0
D5P1
D6P2
D7P3
EP4
R/WP5
RSP6
Bağlantı yer alamaktadır.

PCF8574AT P7 bacağı LCD arkaplan aydınlatma kontrolu için kullanılmaktadır.R10 (1k) direnç üzerinden R9(10k) pull-down direncine ve Q1 (BC817) transistörüne bağlanmaktadır. Q1 Emetör bacağı GND hattına bağlanmaktadır. Kollektör bacağı R3 veya R4 bacağına bağlanmaktadır. Projede hali hazırda R3 tercih edilmiş durumdadır.

Karakter LCD kontrast ayarı için iki ucu +5V ve GND'ye bağlı R6 (10k) trimpotun orta ucu LCD Vo bacağına bağlıdır. Elbette LCD+5V ve GND ucu bağlantıları da vardır.

Sözü edilen AT8574AT adres seçme bacaklarına R11,R12,R13 (10k) ve R5,R6,R7 (0R) dirençlerine ile yapılmaktadır. 0R olarak kastedilen kısa devre durumudur. Projede R11,R12,R13 10k direnç takılmış durumdadır ve istenirse başka bir değişiklik yapmadan R5,R6,R7 kısadevre edilerek i2c adres değişikliği sağlanmış olur.

Devre beslemesini Arduino üzerinden sağlayacak şekilde tasarlanmıştır.

R18 (1k) ve seri bağlı LED devresi besleme hatları arasına bağlanmıştır. Direnç ve LED özellikle devreye besleme bağlı olduğunda çalışır halde olduğunu göstermek üzere kullanılmaktadır. Özellikle program geliştirme esnasında sistemin çalışır halde olduğunu izlemek açısından oldukça kullanışlıdır.
Devre üzerindeki kondansatörler de filtre amaçlıdır.

Montaj
Devre montajında sıra pinler haricindeki elemanların tamamının SMD olması yüzünden elemanların hatasız monte edilmesi önemlidir. Daha sonra değiştirmeye çalışmak biraz deneyim gerektirir.
Şekil-9 :PCB'nin yollarının görünümü
Şekil-10 :SMD olarak tanımlanan elemanların yerleşimi

Şekil-11 :PCB üzerine eklenen köprülerin ve arkadaki LCD sıra pinlerin yerleşimi

Montaja doğrudan PCF8574AT başlamak; bacakların kısadevre olması halinde işlem yapmak için boş alan gereksimini yüzünden iyi olur.

Dirençlerin üzerinde değeri yazılı olduğu için minimum hata ile monte edilmesi mümkündür. Kondansatörlerin karıştırılması sorun değildir. Sadece 10uF kondansatör 805 kılıfında uygun bir yere lehimlenebilir. İsteyen 10uF elektrolitik kondansatör uygun iki besleme yolu üzerine lehimlenebilir.
Şekil-12 :Bakır yollar ve SMD elemanların birlikte görünümü

10k trimpot için dip kılıf özellikli malzeme biraz kırpma, biraz da bükme ile şekillenip SMD olarak devre üzerine lehimlenmektedir.
Şekil-13 :Bilgisayar ile üretilmiş PCB görünümü

Tüm SMD elemanlar lehimlendiktan sonra Karakter LCD için 16 pin dişi sıra pin kullanılmaktadır. bu sıra pin seçiminin LCD üzerine takılacak olan sıra pine bağlı olduğunu; istenirse doğrudan LCD üzerine erkek sıra pin ile bağlanabileceğini de ekleyelim. Besleme ve i2c hatları için 4'lü 90 derece erkek sıra pin lehimlenmektedir.
Şekil-14 :PCF8574AT modülün LCD ekran üzerine takılmış ve kabloları takılmış.

Şekil-15 :Arduino üzerine takılmış i2c ve besleme kablosu. (Klon olarak bilinen Arduino UNO kartı üzerinde i2c için sıra pin portu vardı. Bu sıra pin portu olmayan Arduino için elbette bilindik portları kullanılması gerekemektedir.)


Şekil-16 :Kabloları takılmış halde görünümü

Şekil-17 :İlk enerji verilmesi durumundaki görünümü. LCD ile ilgili bir program olmadığı için ekran kare kare bir görünüme sahiptir. (Trimpot ile ayar gerekebilir)



Malzeme Listesi

Arduino Shield kartı için Malzeme Listesi

PCF8574ATU1
22R 805 kılıfR1,R4
220R kılıfR2,R1
1k 805 kılıfR10, R18
10k trimpotR6
10k 805 kılıfR9,R11,R12,R13,R14,R15,R16,R17
BC817Q1
100nF 805 kılıfC1,C2,C3
10uFC4
0R 805 kılıfR5,R7,R8
10k 805 kılıfR10, R18
16'lı dişi sıra pinJ1
4'lü 90 derece erkek sıra pinP1

Tabii ki bu listeye ek olarak Arduino,karakter LCD ve bağlantı kabloları eklemek en azından denemeler esnasında yardımcı olacaktır.




Program
Piyasada satılan PCF8574AT için internet üzerinde araştırma yapabilirsiniz; burada konu edilen  bazı farklılıkların olacağı göz önüne alınız.. Elbette projede oluşturulma esnasından farklı bir yöntem izleme adına PCF8574AT bacak bağlantıları  kullanıldığı için kütüphanede biraz değişiklik yapılması gerekti.
Şekil-18 :İlk program ile çalışan LCD ekran

Şekil-19 :Programın test edildiği LCD ekran görünümü


Dolayısı ile proje belgeleri ile birlikte buradan indirebilirsiniz veya orjinal kütüphane üzerinde kendi bildiğiniz gibi değişiklik yapabilirsiniz.

örnek kod:;

/YWROBOT
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_K_I2C.h>

LiquidCrystal_K_I2C lcd(0x3f,16,2);  // set the LCD address to 0x3f for a 16 chars and 2 line display

void setup()
{
  lcd.init();                      // initialize the lcd 
  lcd.init();
  // Print a message to the LCD.
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("14-06-2019");
  lcd.setCursor(0,1);
  lcd.print("PCF8574AT Test");
;
}


void loop()
{
  ;
}

Güncelleme
Projelerde çoğunlukla kendi üretimimiz olan, PCB'ler kullanıldı. İşi  biraz daha ileri götürüp,PCB üretiminden ekmek yiyen iş yerlerine üretimi yaptırılınca işin rengi biraz olsun değişmektedir. Tabii az miktada PCB üretimi biraz masraflı olmaktadır. Ama ürün miktarı fazla olduğu zaman PCB başına düşen maliyet azalmaktadır.
Şekil-20: PCB çift yüzlü ve delik içi kaplamalı. Hani çoğunlukla uğraştıran köprü bağlantılarından kurtaracaktır.
Montaj açısından özellikle konnektör bağlantılarında oldukça kolaylık sağlayacaktır.
Şekil-21:Montaj olarak kendi üretimini veya piyasaya üretimi yaptırılan bir ürün üzerinde aman aman bir fark yoktur. Resimde monte edilmiş bir halde görülmektedir. PCF8574AT hemen sağındaki boş yerler i2c adres seçme  için kullanılır. Kartın solundaki boş dirençler farklı LCD arkaplan aydınlatma bacak için kullanılmaktadır.


Şekil-22: LCD üzerine takılmış ve besleme uygulanmış haldeki görünümü. Mavi LED beslemenin var olduğunu göstermektedir.
Şekil-23: Hazır test programı çalıştırılırken...

Not: Güncelleme başlığı altında verilen bilgiler, PCB üretimi yapan firmalar tarafından üretilen PCB'lerin genel yapısı hakkında bilgi içermektedir ve sadece karşılaştırma içindir. 

Translate

Sayfalar

Etiketler

74C922 (1) 74HC125 (2) 74HC138 (1) 74HC20 (1) 74HC590 (1) 93C46 (5) adc (2) adım motor (1) Android (1) Arduino (5) Arduino UNO (5) at90S2313 (7) atmega128 (1) Atmega128 (1) atmega16 (5) atmega32 (4) Atmega328p (5) Atmega8 (44) attiny (1) attiny2313 (18) avr (71) barometre (1) bilgisayar ses (1) Biplor step motor (1) Bluetooth (2) bootloader (1) cep telefonu (1) CGRAM (1) CGROM (1) DHT11 (1) DS1302 (1) DS1307 (5) ds1820 (3) EDMCPR6YOY (1) ENC28J60 (3) ethernet (3) F2631XH-44 (1) fiber optik (2) floresan ekran (4) frekans (1) FT232BL (9) FT232RL (1) FTDI232 (3) GLCD (2) grafik LCD (8) HC06 (2) HH10D (2) HITCHACHI (1) higrometre (2) HP03S (1) HR911105A (1) i2c (1) isp (2) kapasitemetre (2) karakter LCD (5) kızılaltı (2) klavye (2) kondansatör (1) L2432 (1) L298 (1) LAN (1) LCD (22) LCD ekran (2) led (8) led ekran (14) led matris ekran (4) LM044L (1) LM1117-3V3 (2) LM35 (8) lm358 (1) LM75 (2) max3232 (1) MCP3550 (1) nea02017 (2) panasonic (1) PCF8574AT (2) PCM1602 (3) programlayıcı (1) RCM2048R (1) rs232 (16) rs485 (14) saat (14) sayıcı (1) Seri (3) Sharp (1) Step motor (1) şifreli kilit (2) T6963C (3) TC1602.TC2004 (1) termometre (13) tester (1) transistör (1) tuş takımı (2) tx179 (2) uf-150 (1) USB (14) voltmetre (1) wifi (1) YMC162 (2) zamanlayıcı (2)

İzleyiciler