3 Şubat 2017 Cuma

Arduino Aracılığı ile LCD'ye Yazı Yazan Character Device Uygulaması

 Amaç
       Terminalden girilen metni character device ve Arduino aracılığı ile LCD ekrana yazdırmak

 Kullanılan Malzemeler:

·         1 adet Arduino Genuino Uno
·         1 adet LCD Ekran (16x2)
·         1 adet Breadboard
·         1 adet Potansiyometre
·         1 adet 220ohm direnç
·         Bağlantı kabloları

   Devre Bağlantıları:

                
LCD ve Arduino arasındaki bağlantı aşağıdaki gibidir.
·      LCD RS pin à digital pin 12
·      LCD Enable pin à digital pin 11
·      LCD D4 pin à digital pin 5
·      LCD D5 pin à digital pin 4
·      LCD D6 pin à digital pin 3
·      LCD D7 pin à digital pin 2
Ek olarak 10k potansiyometre +5V ve toprak girişlerine, çıktısı  LCD ekranın V0 pin’ine bağlanır.  220 ohm resistor ise arka ışığı ayarlamada kullanılır.






Devre Şeması


                            



                                                UYGULAMA
      KODLAR
            Arduino Taslağı


          C Program Kodu( unocom.c )



          Character Device Driver Kodu( FormatDev.c )

 





          Makefile




1-       Arduino cihazı ile seri port üzerinden bağlantı kurulur. Bu sebeple öncelikle cihazın seri porttan okuma yapmasını sağlayacak taslak kodu Arduuino IDE arayüzü ile cihaza gönderilmelidir. Bu noktadan sonra IDE’ye ihtiyaç duyulmaz.






2-       Terminal aracılığı ile Makefile ve C kaynak kodlarının bulunduğu dizine girilir.
# make
Komutu ile character device driver modülü ve c programı derlenir.



3-       Aynı dizinde
# sudo insmod FormatDev.ko
Komutu ile modül eklenir.

# dmesg
Komutu ile kontrol edilebilir.

4-       Bu aşamadaki komutların çalışması için super user olarak girilmesi gerekmektedir. Dolayısıyla önce
# su
Komutu ve UNIX şifresi girilir.
# mknod /dev/FormatDev c 91 3
Komutu ile majör(modül kaynak kodundan alınır) ve minör(keyfidir) numaralarını belirterek bir character device oluşturulur. Bu character üzerinden okuma ve yazma yapılabilmesi için gerekli izinler verilmelidir.
# chmod a+rw /dev/FormatDev
Komutu ile cihaza gerekli izinler verilir.
(Opsiyonel: # exit komutu ile su’dan çıkış yapılabilir.)

NOT: Adım 3 ve 4’ün sırası önemli değildir, yerleri değişebilir.

5-      #cat /proc/modules | grep Format
#cat /proc/devices | grep Format
Komutları ile de cihazın eklenip eklenmediği kontrol edilebilir.



6-       Terminal aracılığı ile C kaynak kodu derlenir ve çalıştırılabilir dosya (executable) hâline getirilir.
# gcc –o parname param.c
Komutu param.c dosyasını derler, daha sonra kaynak kod ile aynı dizinde “parname” adlı çalıştırılabilir bir dosya oluşturur.

7-      # ./unocom Sistem Prog.
Komutu ile terminal üzerinden dosya çalıştırılır. Aradan yukarıda da belirtildiği gibi 5 saniye geçtikten sonra argüman olarak girilen metin LCD ekranından okunabilir.

Farklı metin denemeleri




Eğer argüman girilmez ise program aşağıdaki hata ile sonlanır.


Ard arda girilen komutlardan sonra kernel günlüğü.

  Görüldüğü gibi C programı, character device sürücüsü ve Arduino cihazı sorunsuz bir şekilde iletişim kurmaktadır. Dolayısı ile yazma haricinde okuma gibi dosya işlemleri de bu seri cihaz üzerinde gerçekleştirilebilir.


8-      #sudo rm /dev/FormatDev
Komutu ile oluşturulan character device dosyası kaldırılabilir.

#sudo rmmod FormatDev.ko
Komutu ile de eklenen modül kaldırılır ve character device kaydı sistemden silinir.

# dmesg
Komutu ile kontrol edilebilir.


C Programı, Char. Dev. Driver ve Arduino Veri Akış Diyagramı


 Ek Bilgiler
-           Metni LCD ekranının üst satırına yazdırmak için taslak kodunda 19. satırın
     # lcd.setCursor(0,0)
    şeklinde değiştirilmesi yeterlidir.

-          # lcd.clear()
Komutu ile LCD ekranı temizlenebilir.

-          Daha önceki ödevimizdeki ilgili kod bloğu kullanılarak Arduino’nun LCD ekranına matematiksel 4 işlem sonucu yazması sağlanabilir.

 Kaynakça


Ödev Grup Arkadaşlarım: 
  Kübra Gültop
  

16 Aralık 2016 Cuma

Dört İşlem Yapan Proc Uygulaması

     /proc Dosya Sistemi Nedir?
  /proc bir sanal dosya sistemi olduğu için çok özeldir. İşlem bilgisi psüdo-dosya sistemi olarak da anılır. 'Gerçek' dosyalar bulundurmaz fakat sistem bilgisi (örn. sistem hafızası, bağlı cihazlar, donanım konfigürasyonu, vs.) bulundurur. Bu sebepten dolayı çekirdek için bir kontrol ve bilgi merkezi olarak düşünülebilir. Aslında, bir çok sistem bu dizindeki dosyalara çağrı yapar. Örneğin; 'lspci' komutu 'cat/proc/pci' komutunun eş anlamlısıyken, 'lsmod' komutu 'cat/proc/modules' ile aynıdır. Bu dizindeki dosyaları düzenleyerek sistem çalıştığı anda çekirdeğin parametereleri okunup düzenlenebilir.
 Bu dizindeki dosyaların en ayırt edici özelliği, hepsinin dosya boyutunun 0 olmasıdır(kcore, mtrr ve self hariç.)

      Dört İşlem Yapan Proc Uygulaması
    Sistem proglamlama dersinde aldığımız bu grup ödevinde bizdenen istenenler aşağıdaki gibidir:
 
    "Ödevde toplama, çıkarma, çarpma, bölme işlemlerini, işleme alınacak sayıları       parametre olarak alan ve sonucu loga yazan bir proc uygulaması yapılacak. Örneğin uygulama ismi dortislem olsun ve terminale; 
echo 3 + 5 > dortislem
girildiğinde 3 + 5 = 8 sonucunu log’a yazmış olacak."

     proc.c Dosyası

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/string.h> 
#include <asm/uaccess.h>


      Makefile Dosyası


     Uygulama

1-) İlk olarak terminal açılır , Makefile ve c uzantılı kaynak kodun bulunduğu dizine girilir.

2-) $ make     à    komutuyla Makefile dosyası içinde belirtilen objeler oluşturulur.

3-)  Makefile dosyası derlendikten sonra modülü eklemek için aşağıdaki komut kullanılır.
$ sudo insmod proc.ko

4-)  Modülün eklenip,eklenmediğini kontrol etmek için aşağıdaki komut ile loga bakılır.
$ dmesg
c uzantılı kaynak kod dosyanızda modül eklemenin başarılı olduğu durumda dosyadaki ilgili printk komutlarının içerdiği metinler log dosyasının sonuna eklenir.

5-)  ‘home’ dizinine gittikten sonra
$ su     à    komutuyla root’a giriş yapılır.

6-)  ‘proc’ ların bulunduğu dizine gidilir.









7-)  Ödevde istendiği gibi aşağıdaki komutla sayıları ve işlemi parametre olarak alıp ; dortislem ‘e gönderir. 
# echo 4 + 5 > dortislem    


# dmesg komutuyla loglara bakılır.


Ve görüldüğü gibi parametreleri ve sonuç loga yazılmış olur.

8-)  Diğer 3 aritmetik işlemi (çıkarma, çarpma, bölme) de test etmek için adım 7 aşağıdaki gibi tekrarlanır.

Çıkarma işlemi:


Çarpma işlemi:


Bölme işlemi:

Geçersiz parametre girildiğinde ise:















9-) Aşağıdaki komutla modül kaldırılır. 
# sudo rmmod proc.ko    

Modulün kaldırıldığından emin olmak içinde, kaldırmanın başarılı olduğu durumda yazdırdığınız herhangi bir metin varsa ‘dmesg’ komutuyla log’a bakılıp anlaşılabilir.

 Ödev Grup Arkadaşlarım:
  İlyas Tunç Aşlamacı (Grup lideri)