Pengetahuan Dasar pemrograman C untuk I2C AVR dgn codevision

Pengetahuan dasar  I2C

I2C  adalah protokol komunikasi  serial yg biasa digunakan untuk komunikasi antara IC .

Komunikasi data secara I2C dilakukan melalui dua saluran, masing-masing adalah saluran data secara seri (SDA) dan saluran clock (SCL), kedua saluran ini dikenal sebagai I2C Bus yang dipakai menghubungkan banyak IC I2C untuk berbagai macam keperluan. IC-IC I2C itu dibedakan menjadi induk (master) dan anak buah (slave), yang dimaksud dengan induk adalah peralatan I2C yang memulai transfer data dan yang membangkitkan clock (SCK). Yang bertindak sebagai master adalah Mikrokontroler ataupun CPU pada komputer yang bertugas mengendalikan I2C Bus.

Agar data dapat didistribusikan oleh master dengan tepat ke beberapa slave, menurut konsep I2C, semua jenis IC I2C diproduksi dengan nomor group tersendiri yang diatur oleh philips, sehingga produsen IC lain yang memproduksi IC I2C harus mendaftarkan produknya ke Philips untuk mendapatkan nomor group.

contoh,

  • IC serial EEPROM  memiliki no group = 1010 biner,
  • IC Remote 8 bit I/O Expander  memiliki no group =  0111 biner.
  • dll

No group dimasukan ke 4 bit msb untuk  mensetting device adress  dan  3 bit berikutnya  A0, A1 ,A2  kaki  ic yg bersangkutan.  Dengan demikian pada I2C Bus total bisa dipasang paling banyak 8 IC sejenis.

contoh : IC EEPROM 24C02 kaki  A2,A1 dan A0 kita groundkan

maka device address Ic 24C02 tsb adalah 1010 000x  , x = 1 jika operasi baca , x=0 jika operasi tulis.

Berikut ini device address untuk IC EEPROM serial lainya.

Konfigurasi fisik Bus I2C

Konfigurasi fisik Bus I2C

Sinyal Dasar I2C

Sinyal dasar I2C meliputi sinyal START, STOP dan ACK sebagai berikut:

SCK merupakan sinyal clock untuk ‘mendorong’ data di SDA, dalam keadaan tidak ada transfer data SDA dan SCK harus dalam keadaan ‘1’. Data di SDA boleh berubah hanya pada saat SCK =’0’ seperti digambarkan dalam diagram waktu Gambar 2, isi SDA diambil peralatan I2C pada saat SCL berubah dari ‘1’ menjadi ‘0’. Jika terjadi perubahan SDA pada saat SCL = ‘1’, perubahan itu diartikan sebagai sinyal START atau STOP.

Diagram waktu sinyal sda dan scl

  • Sinyal START menandakan master akan mulai mengirim data,  sinyal ini terlihat di bagian kiri Gambar 3 berupa perubahan tegangan SDA dari ‘1’ menjadi ‘0’ pada saat SCK=’1’.
  • Sinyal STOP menandakan master akan mengakhiri komunikasi data, sinyal ini terlihat di bagian kanan Gambar 3 berupa perubahan tegangan SDA dari ‘0’ menjadi ‘1’ pada saat SCK=’1’.

Sinyal START dan STOP I2C

  •  Sinyal ACK, merupakan sinyal balasan dari slave setelah menerima data 1 byte. Pada kondisi ini, slave “menarik” sda menjadi low selama satu sinyal clock. Sinyal ACK ini dapat dilihat pada Gambar 4, dimana pengiriman sinyal ini menandakan bahwa slave telah menerima 1 byte data.

Transfer Data I2C

Cara Kerja I2C Bus

cara kerja I2C Bus dapat dibedakan menjadi format pengalamatan  7 bit dan format pengalamatan 10 bit. Inisiatif komunikasi transfer data pada I2C Bus selalu dimulai dari pengiriman sinyal START oleh master yang kemudian diikuti oleh address byte ( 7 bit address + 1 bit pengarah data ), dan dilanjutkan dengan pengiriman data untuk mode pengalamatan 7 bit, seperti diilustrasikan pada Gambar :

Format data I2C

. mode pengalamatan 7 bit

Seperti terlihat pada Gambar 5, pengalamatan dilakukan dengan mengirimkan 7 bit data, dengan 4 bit pertama (MSB) merupakan kode dari I2C Philips untuk mangalamati IC EEPROM jenis ATMEL. 3 bit berikutnya merupakan alamat untuk eksternal pin dengan jumlah kemungkinan alamat sebanyak 8 alamat (2³).

Mode pengalamatan 7 bit ini hanya dapat digunakan untuk EEPROM dengan kapasitas maksimal 8 byte. Sehingga untuk EEPROM dengan kapasitas diatas 8 byte menggunakan mode pengalamatan 10 bit.


Contoh menulis 1 byte ke EEPROM 24C02 



Pemrograman  I2C dengan bahasa C  codevision

Program membaca dan menulis  serial EEPROM  24c02

#include <mega16.h>
/* the I2C dihubungkan ke PORTB */

/* SDA di PORTB.3 */

/* SCL di PORTB.4 */

#asm

.equ __i2c_port=0x18

.equ __sda_bit=3

.equ __scl_bit=4

#endasm

/* header file untuk fungsi-fungsi i2c */

#include <i2c.h>

/* header untuk fungsi delay_ms */
#include <delay.h>

#define EEPROM_BUS_ADDRESS 0xa0

/*membaca 1 byte EEPROM */
unsigned char eeprom_read(unsigned char address) {
unsigned char data;
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_start();
i2c_write(EEPROM_BUS_ADDRESS | 1);
data=i2c_read(0);
i2c_stop();
return data;
}

/* menulis 1 byte ke EEPROM */
void eeprom_write(unsigned char address, unsigned char data) {

i2c_start();
i2c_write(EEPROM_BUS_ADDRESS);
i2c_write(address);
i2c_write(data);
i2c_stop();

/* 10ms delay untuk memberi waktu penulisan ke EEPROM */
delay_ms(10);
}

void main(void) {
unsigned char i;

/* inisialisasi I2C bus */
i2c_init();

/* write 55h ke alamat AAh */
eeprom_write(0xaa,0x55);

/* read byte dari alamat AAh */
i=eeprom_read(0xaa);

while (1); /* loop forever */
}

refererensi :

Advertisements

About pccontrol

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

Posted on 26/06/2011, in Menengah-3. Bookmark the permalink. 2 Comments.

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: