Pengetahuan Dasar Pemrograman SPI (serial Pheriperal Interface) pada AVR dengan AVR Studio

Pada artikel ini saya  akan membahas pemrograman SPI dengan AVR Studio , setelah pada artikel  lain saya sudah bahas SPI dgn CodeVision bisa  anda baca disini 

Transfer data dengan SPI digunakan antara Master ( Microcontroller) dgn slave (microcontroller atau SPI device  spt MMC card, SPI ADC , dll)  dalam jarak dekat dan kecepatan cukup tinggi.

Komunikasi serial data antara master dan slave pada SPI diatur melalui 4 buah pin yang terdiri dari SCLK, MOSI, MISO, dan SS  sbb:

  • SCLK dari master ke slave yang berfungsi sebagai clock
  • MOSI jalur data dari master dan masuk ke dalam slave
  • MISO jalur data keluar dari slave dan masuk ke dalam master
  • SS (slave select) merupakan pin yang berfungsi untuk mengaktifkan slave

SPI Diagram

Transfer data SPI

Pin / kaki SS (slave select) merupakan pin yang berfungsi untuk mengaktifkan slave sehingga pengiriman data hanya dapat dilakukan jika slave dalam keadaan aktif (active low). Dari gambar diagram SPi diatas anda sudah bisa membayangkan bagaimana cara SPI mentransfer data antara Master dan slave. Intinya ada di  register geser 8 bit.  Tiap clock dari SCK akan mempertukarkan 1 bit data , jadi untuk mempertukarkan register di master dan slave perlu 8 kali clock. contoh konkritnya begini: data di register geser master adalah 1111  1111 data di register gaser slave adalah  0000 0000

keadaan awal

kemudian pada clock pertama dan kedua  isi register berpindah sbb:

Setelah 8 kali clok data berpindah:

Jalur SPI pada AVR Atmega8535

Jalur SPI pada Atmega8535

Register yang terkait dgn SPI:

Sebelum kita memprogram SPI dengan AVR Studio kita perlu mengetahui 3 buah regsiter yg terkait dgn SPI yaitu:

.

1. Register Control SPI  ( SPCR )

bit SPIF diset =  1 ,  menyebabkan interupsi SPI .

bit SPE  di set =1  : untuk mengaktifkan fungsi SPI

bit MSTR diset =1 menjadikan microcontroller sbg Master SPI, artinya menjadi sumber pengendali.

bit DORD diset 1 maka bit yg dikirim  pertama LSB, jikaDORD= 0 bit yg pertama dikirim MSB
kombinasi Bit SPI2X, SPR1, dan SPR0 untuk menentukan sumber clock

000: SCK = system clock/4
001: SCK = system clock/16
010: SCK = system clock/64
011: SCK = system clock/1284
100: SCK = system clock/2
101: SCK = system clock/8
110: SCK = system clock/32
111: SCK = system clock/64

2. Register Status SPI (SPSR)
bit SPIF otomatis di set 1 ketika delapan bit data telah ditransfer dari master ke slave.
SPSR ini juga berisi bit SPI2X digunakan untuk mengatur frekuensi SCK
3. Register Data (SPDR)
Register ini berisi data yg akan ditulis atau dibaca.

Contoh Code inisialisasi dan baca-tulis SPI dengan AVR Studio
void inisialisasi_spi(unsigned char control)
{
DDRB = 0xA0; //Set SCK (PB7), MOSI (PB5) sbg output,

//konfigurasi Register Control (SPCR)
SPCR = 0x53; //SPIE:0,SPE:1,DORD:0,MSTR:1,CPOL:0,CPHA:0,SPR:1,SPR0:1
}

void menulis_databyte(unsigned char databyte)
{
SPDR = databyte;
while (!(SPSR & 0x80));  //tunggu sampai data selesai di transfer
}

unsigned char membaca_databyte(void)
{
while (!(SPSR & 0x80));  //tunggu sampai data selesai di terima
return SPDR;
}

Master  dapat dihubungkan dengan banyak slave

Master dihubungkan dengan banyak slave dengan cara berantai/ cascade

SPI_daisy_chained

Contoh aplikasi SPI lainnya bisa anda baca disini:
https://pccontrol.wordpress.com/2011/09/15/pemrograman-display-7-segment-dengan-spi-max7221/

referensi :

Advertisements

About pccontrol

Berisi Tutorial Menggunakan PC untuk mengontrol Peralatan dengan cara mudah & praktis untuk pemula.

Posted on 16/09/2011, in Menengah-3. Bookmark the permalink. Leave a comment.

Komentar ,Saran atau Pertanyaan

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: