«

»

Jun 12

Mengatur Kecepatan I2C pada AVR

Menggunakan I2C di lingkungan arduino cukup mudah, khususnya ketika memanfaatkan pustaka Wire yang disertakan dalam instalasi. Namun, pustaka Wire memiliki default frekuensi SCL 100 kHz, sehingga untuk beberapa divais yang lebih lambat, akan menimbulkan masalah (tidak terjadi komunikasi).

Untuk mengatur kecepatan I2C, kita harus melakukan penyesuaian pada frekuensi TWI – Two Wire Interface, yang terdapat dalam file hardware/libraries/Wire/utility/twi.h dan hardware/libraries/Wire/utility/twi.c.

Default setting yang terdapat dalam twi.h adalah:

#ifndef TWI_FREQ
#define TWI_FREQ 100000L
#endif

Sementara default setting yang terdapat dalam twi.c adalah (menggunakan prescaler = 1):

TWBR = ((CPU_FREQ / TWI_FREQ) - 16) / 2;

** TWBR adalah register 8-bit.

Persamaan aktual yang tertulis dalam datasheet adalah:

SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR * prescaler))

Sebagai contoh, untuk mendapatkan frekuensi SCL 10 kHz dengan CPU clock 16 MHz, maka nilai TWBR adalah 198 (asumsi prescaler = 4).

Pengaturan prescaler dilakukan melalui register TWSR bit TWPS0 dan TWPS1.