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

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

Master  dapat dihubungkan dengan banyak slave

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

Pemrograman AVR SPI dengan Codevision

Buka projeck baru, gunakan codewizard

set micon sebagai master

Fungsi Mengirim data: SPI(char data)

Menerima data: char hasil = SPI(0)

Contoh Program membuat Voltmeter dgn SPI ADC   AD7896  12 bit   :

Rangkaian Koneksi SPI   ADC dan AVR Code Program

/* 

   Digital voltmeter using an

   Analog Devices AD7896 ADC 12 bit

   using the SPI bus

#asm

    .equ __lcd_port=0x15

#endasm

#include <lcd.h> // LCD driver routines

#include <spi.h> // SPI driver routine

#include <mega8535.h>

#include <stdio.h>

#include <delay.h>

// AD7896 reference voltage [mV]

#define VREF 5000L

// AD7896 control signals PORTB bit allocation

#define ADC_BUSY PINB.0

#define NCONVST PORTB.1

// LCD display buffer

char lcd_buffer[33];

unsigned read_adc(void)

{

unsigned result;

// start conversion in mode 1

// (high sampling performance)

NCONVST=0;

NCONVST=1;

while (ADC_BUSY);    // tunggu konversi sampai selesai 

// baca byte MSB
result=(unsigned) spi(0)<<8;

//baca byte LSB , lalu gabungkan dengan  MSB

result= result | spi(0);

// konversi hasil pembacaan ADC , menjadi nilai Volt

result=(unsigned) (((unsigned long) result*VREF)/4096L);

return result;

}

void main(void)

{

// initialize PORTB

// PB.0 input from AD7896 BUSY

// PB.1 output to AD7896 /CONVST

// PB.2 & PB.3 inputs

// PB.4 output (SPI /SS pin)

// PB.5 input

// PB.6 input (SPI MISO)

// PB.7 output to AD7896 SCLK

DDRB=0x92;

// initialize the SPI 
// master mode

// no interrupts, MSB first, clock phase negative

// SCK low when idle, clock phase=0

// SCK=fxtal/4

SPCR=0x54;

// the AD7896 will work in mode 1

// (high sampling performance)

// /CONVST=1, SCLK=0

PORTB=2;

// initialize the LCD

lcd_init(16);

lcd_putsf("AD7896 SPI bus\nVoltmeter");

delay_ms(2000);

lcd_clear();

// baca input dan tampilkan ADC ke LCD

while (1)

      {

      sprintf(lcd_buffer,"Uadc=%4umV",read_adc());
      lcd_clear();
      lcd_puts(lcd_buffer);
      delay_ms(100);

      };

}

referensi :

About pccontrol

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

Posted on 25/07/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: