Praktek Komunikasi Serial Sinkron-SPI Menggunakan Arduino - TeachMeSoft

Praktek Komunikasi Serial Sinkron-SPI Menggunakan Arduino

Praktek Komunikasi Serial Sinkron-SPI Menggunakan Arduino



Teori Singkat


Komunikasi data SPI merupakan komunikasi data digital serial secara sinkron sama seperti halnya I2C, yaitu membutuhkan jalur sinkronisasi pewaktu transmisi data serial. Perbedaannya adalah pada jumlah bus data bus I2hanya menggunakan satu jalur data (SDA) untuk berkomunikasi, sedangkan SPI menggunakan 2 jalur data (MOSI dan MISO) komunikasi tetap dijalankan secara half duplex karena bersifat komunikasi sinkron.

Kelebihan dari komunikasi serial sinkron SPI sama halnya dengan I2C yaitu memungkinkan untuk dilakukan komunikasi serial multi-node. Perbedaannya adalah SPI membutuhkan jalur tambah untuk memilih slave (SS) sebanyak piranti yang terhubung pada bus komunikasi Gambar 1 menunjukan bus SPI untuk komunikasi beberapa piranti sekaligus

Bus komunikasi SPI
Gambar 1. Bus komunikasi SPI

Secara umum, antarmuka SPI juga digunakan Arduino untuk berkomumikasi dengan sensor sekaligus. Dengan kelebihan bus SPI tersebut maka Arduino mampu membaca banyak sensor dalam satu bus saja, hal ini memberikan efektifitas perancangan system benam semakin tinggi.

Seperti yang ditunjukan oleh Gambar 1, pada bus komunikas SPI hanya terdapat 1-Master dan n-SLAVE. Berbeda dengan Bus I2C yang memperbolehkan n-MASTER dan n-SLAVE. Berbeda dengan bus I2C yang menjadi empat :MOSI (mater out-serial in), MISO (master in-serial out), SCK (Serial Clock), dan SS (Slave Select).

MOSI adalah bus transisi data satu arah dari MASTER menuju SLAVE yang sudah dipilih berdasarkan pin SS, sehingga hanya ada satu SLAVE saja yang dapat berkomunikasi dalam satu waktu. MISO adalah bus transmisi data satu arah dari SLAVE yang terpilih berdasarkan pin SS menuju MASTER. Komunikasi data hanya bisa dilakukan oleh MASTER-SLAVE saja, sedangkan komunikasi SLAVE-SLAVE tidak diperbolehkan.
Format paket transmisi data pada komunikasi serian sinkron SPI
Gambar 2. Format paket transmisi data pada komunikasi serian sinkron SPI

Format data komunikasi serial SPI berbeda dengan I2C  Perbedaannya adalah pada paket data yang dikirmkan seperti yang ditunjukan oleh gambar 2. Paket data SPI tidak mengandung informasi alamat SLAVE, hal ini karena SLAVE sudah dipilih secara perangkat keras melalui jalur SS pada Bus.

Sehingga secara umum, format data SPI lebih sederhana dari pada I2C. Panjang data komunikasi SPI bisa bervariasi tergantung jenis pirantinya. Pada UART hanya dibatasi satu data saja  untuk setiap paket pengiriman. Pada papan system Arduino, frekwensi detak bus SPI memiliki rentang yang lebar yaitu antara 125Kbps-8Mbps.

Pada papan Arduino UNO, bus SPI terhubung dengan 4 pin khusus yaitu :10 (SS), 11(MOSI), 12 (MISO) dan 13 (SKCK). Untuk memilih slave tidak hanya terbatas pada pin 10 saja, namun bisa dialokasikan untuk pin digital yang lain sebanyak yang diperlukan.


Alat dan Bahan Percobaan


Pada sesi ini akan diperkenalkan tentang cara melakukan serial papan Arduino dengan piranti SD/MMC menggunakan fasilitas SPI. Adapun alat dan bahan yang digunakan selama percobaan adalah :
  1. Sparkfun microUSB
    Bahan percobaan yang berfungsi sebagai penyimpan data digital berkapasitas besar.
  2. Papan Arduino UNO
    Bahan percobaan sebagai piranti utama untuk menguji komunikasi SPI dengan piranti Memory microSD.


Langkah Percobaan


Percobaan komunikasi data serial SPI oleh papan Arduino melibatkan dua aktifitas, yaitu perancangan antarmuka perangka keras dan pemrograman perangkat lunak. Adapun langkah percobaannya adalah sebagai berikut :
  1. Desain antarmuka perangkat keras
    Percobaan menghbungkan papan arduino Uno dengan piranti mikroSD. Gambar 3 menunjukan antarmuka perangkat keras sebagai percobaan.
    Antarmuka papan Arduino Uno dengan memori microSD
    Gambar 3. Antarmuka papan Arduino Uno dengan memori microSD

  2. Pemrograman perangkat lunak
    Percobaan yang akan dilakukan adalah melakukan komunikasi SPI antara papan arduino dengan microSD. Berikut ini contoh kode program yang harus anda buat untuk menguji komuikasi digital serial sinkron SPI dengan menggunakan Library : SPI.H dan SD.H
    #include <SPI.h>
    #include <SD.h>
    #define SS 10

    Sd2Card card;
    SdVo1ume volume;
    SdFi1e root;

    void setup(){
    Serial.begin (9600); //baudrate = 9600bps
    Serial.println("Inisialisasi microSD");
    if (!card.init(SPI_HALF_SPEED,SS)){ //apa kartu terdeteksi?
    Serial.println("inisialisasi gagal"); //jika tidak
    while(1);
    }
    else{
    Serial.println("inisialisasi berhasil"); //jika ya
    Serial.print("Card type: "); //tampilan informasi
    switch (card.type()){
    case SD_CARD_TYPE_SD1;
                    Serial.println("SD1");
                    break;
                case SD_CARD_TYPE_SD2;
                    Serial.println("SD2");
                    break;
                case SD_CARD_TYPE_SDHC;
                    Serial.println("SDHC");
                    break;
                default:
    Serial.println("Unknown");
    }
    }
    }

    void loop(){} //tidak melakukan apa-apa

    Ketik contoh kode program diatas, kompilasi dan upload ke papan Arduino. Kemudian pengamatan dilakukan menggunakan serial monitor pada Arduino IDE dan Simpulkan.


Tugas


Berikut ini deskripsi tugad yang harus anda lakukan terkait dengan tahapan-tahapan percobaan yang sudah dilakukan.
  1. Membuat file dengan nama nama_file.txt mengguankan notepad pada PC/Laptop kemudian simpan file tersebut pada microSD. Perlu diperhatikan bahwa nama) file tidak boleh lebih dari 8 karakter, contoh = “log.txt” seperti pada contoh kode program.
  2. Melakukan proses menyimpan data ke dalam file yang sudah dibuat pada microSD menggunakan papan Arduino. Ketik contoh kode program berikut, kompilasi, dan upload ke papan Arduino.
    #include <SPI.h>
    #include <SD.h>
    #define SS 10

    File myFi1e;

    void setup(){
    Serial.begin(9600); //baudrate = 9600bps
    Serial.printIn("Inisialisasi microSD...");
    if (!SD.begin(SS)){ //apa SD terdeteksi?
    Serial.printIn("inisialisasi gagal"); //jika tidak
    while(1);
    }
    else {
    Serial.println("inisialisasi sukses"); //jika ya
    Serial.println("menyimpan file...");
    myFi1e = SD.open("log.txt", FILE_WRITE); //mode tulis
    if (myFi1e){ //apa file tersedia?
    myFi1e.printIn("Nama = Joko Widodo"); //jika ya
    myFi1e.printIn("Alamat = Jakarta");
    myFi1e.printIn("Pekerjaan = Presiden");
    myFi1e.close();
    Serial.println("penyimpanan selesai");
    }
    else{
    Serial.printIn("gagal membuka file"); //jika tidak
    }
    }
    }

    void loop(){} //tidak melakukan apa-apa

  3. Melakukan proses data dari file yang tersimpan dan terisi pada microSD menggunakan papan Arduino. Ketik contoh kode program berikut, kompilasi dan upload ke papan Arduino.
    #include <SPI.h>
    #include <SD.h>
    #define SS 10

    File myFi1e;

    void setup(){
    Serial.begin(9600); //baudrate = 9600bps
    Serial.printIn("Inisialisasi microSD...");
    if (!SD.begin(SS)){ //apa SD terdeteksi?
    Serial.printIn("inisialisasi gagal"); //jika tidak
    while(1);
    }
    else {
    Serial.println("inisialisasi sukses"); //jika ya
    Serial.println("menyimpan file...");
    myFi1e = SD.open("log.txt"); //mode baca
    if (myFi1e){ //apa file tersedia?
    myFi1e.printIn("isi file:"); //jika ya,tampilkan
    while(myFile.available()){
    Serial.write(myFile.read());
    }
    myFile.close();
    }
    else{
    Serial.printIn("gaga1 membuka file"); //jika tidak
    }
    }
    }

    void loop(){} //tidak melakukan apa-apa

  4. Ulangi percobaan dengan mengisi informasi yang berbeda pada dile di dalam microSD.
  5. Membuat laporan percobaan yang berisi foto antarmuka perangkat keras dan kode program yang berhasil dibuat dan berjalan dengan benar.




Disqus comments