DYAH LESTARI
Pendahuluan
Kondisi STOP dikirim sebagai sinyal untuk semua alat yang ada di bus
yang menunjukkan bahwa bus tersedia kembali (idle).
I2C Bus Event - Mengirimkan Satu
Byte Ke Slave
Setelah slave alamatnya cocok dan slave telah memberikan ACK, satu
byte dapat diterima dari slave jika R/W bit pada address di set ke READ
(set ke 1).
Sintax protokolnya sama dengan mengirimkan satu byte ke slave,
kecuali sekarang master tidak diperbolehkan menyentuh jalur SDA.
Master mengirimkan 8 pulsa clock di jalur SCL.
Slave sekarang mengontrol jalur SDA, jalur ini akan menjadi HIGH jika
slave ingin mengirimkan 1 atau tetap LOW jika ingin mengirimkan 0
I2C Bus Event - Menerima Satu Byte
dari Slave
I2C Bus Event - Memberikan
Acknowledge ke Slave
NACK adalah kondisi saat master membaca data dari slave. Jika saat
pengiriman data bit ke delapan dari master ke slave, slave tidak
menarik SDA menjadi LOW maka kondisi ini dinamakan NACK. Kondisi
ini dapat diartikan :
Slave tidak ada di bus (jika data yang dikirim adalah alamat)
Slave kehilangan pulsa dan tidak sinkron dengan jalur SCL master
Bus dalam kondisi stuck. Salah satu jalur mungkin tertahan LOW secara
permanent.
Pada kondisi ini master harus membatalkan transmisi dengan
mengirimkan kondisi stop ke BUS.
Register dalam TWI
TWDR selalu mengandung data terakhir yang ada di bus SDA. Pada
mode transmitter TWDR berisi byte berikutnya yang akan
ditransmisikan. Saat mode receiver, TWDR berisi byte terakhir yang
diterima. Data di TWDR tetap stabil selama TWINT flag dalam kondisi
HIGH
TWCR-TWI Control Register
1. Inisialisasi master
Inisialisasi sebagai master berarti mengeset frekuensi clock TWI (SCL). Hal ini
dilakukan dengan mengeset bit rate di TWBR dan bit prescaler di TWSR.
2. Mengirim kondisi start
1) Clear TWINT dengan memberikan logika 1
2) Set TWSTA bit untuk mengirimkan kondisi start
3) Set TWEN bit untuk inisialisasi TWI
4) Memonitor status TWINT flag
5) Mengecek byte ACK (menggunakan pengkondisian while karena frekuensi SCL sangat
kecil dibandingkan dengan frekuensi clock mikrokontroler. Byte ACK dapat
dibandingkan dengan memonitor status TWSR
Master Sebagai Transmitter
3. Mengirim alamat slave, data direction bit (write) dan menunggu sinyal
ACK
1) Menaruh 7 bit alamat slave dan direction control bit di TWDR
2) Clear TWINT flag
3) Mengaktifkan TWI dengan memberikan 1 ke bit TWEN
4) Memonitor status TWINT, TWINT flag akan berlogika 0 ketika data di TWDR
telah ditransmisikan
5) Cek kebenaran ACK
Master Sebagai Transmitter
7. Mengirim alamat slave, data direction bit (read) dan menunggu sinyal
ACK
1) Menaruh 8 bit data di TWDR (7bit alamat slave + data direction bit (read =
1)
2) Clear TWINT flag
3) Mengaktifkan TWI dengan memberikan 1 ke bit TWEN
4) Memonitor status TWINT, TWINT flag akan berlogika 0 ketika data di TWDR
telah ditransmisikan
5) Cek kebenaran ACK
Master Sebagai Receiver
void i2c_init(void)
Fungsi untuk inisialisasi bus I2C. Fungsi ini adalah fungsi pertama yang harus dipanggil sebelum
menggunakan fungsi-fungsi lain.
unsigned char i2c_start(void)
Memberikan Kondisi Start. Mengembalikan nilai 1 jika bus bebas atau 0 jika bus I 2C sedang sibuk
void i2c_stop(void)
Memberikan kondisi stop
unsigned char i2c_read(unsigned char ack)
Membaca satu byte data dari bus. Parameter ACK menunjukkan apakah ACK diberikan setelah
membaca satu byte.
unsigned char i2c_write(unsigned char data)
Menulis satu byte data ke bus. Mengembalikan nilai 1 jika slave memberikan ACK atau 0 jika tidak.
EEPROM AT24C01A
Memberi START
Mengirim alamat piranti
Mengirim alamat tempat data akan disimpan/word address
Mengirim data
Memberi STOP
Operasi page write
Memberi START
Mengirim alamat piranti
Mengirim alamat tempat data akan dibaca/word address
Memberi START
Mengirim alamat piranti (termasuk bit READ)
Membaca data (termasuk NO ACK)
Memberi STOP
Mengembalikan nilai berupa data yang dibaca
Operasi sequential write
Serial data dan clock diterima melalui SDA dan SLC. Setelah setiap byte
diterima, ACK bit di kirimkan. Kondisi START dan STOP dikenali sebagai awal
dan akhir transfer serial. Hardware melakukan pengenalan alamat setelah
penerimaan alamat slave dan direction bit. Alamat slave adalah byte pertama
yang diterima setelah maser memberikan kondisi START. Alamat slave berisi
7-bit alamat DS1307 yaitu 1101000 diikuti dengan direction bit (R/W), yang
pada mode write bernilai 0. Setelah menerima alamat slave, DS1307
mengirimkan ACK pada SDA. Setelah DS1307 mengenali alamat slave dan
write bit, master mengirimkan data ke DS1307. Proses ini mengeset register
pointer pada DS1307. Master dapat mengirimkan 0 atau data byte lagi.
Pointer register otomatis bertambah satu alamat setelah setiap byte diterima.
Master kemudian memberikan kondisi STOP untuk menghentikan penulisan
data.
Slave transmitter mode (mode baca)
Slave transmitter mode (mode baca)