2016/11/23(水)ArduinoのI2C

一周以上の周回遅れでArduinoを触り始めている。

I2C使うときはTWIライブラリも標準で持ってて(Wire.h)かなり便利なのだが、これI2Cのクロック速度はいくらなんだろう、と。検索ではいまいちパッと出てこなかったのらライブラリの中身を直接確認した。中身はtwi.cとtwi.hで.cのほうに記載されてた。
  TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;

  /* twi bit rate formula from atmega128 manual pg 204
  SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR))
  note: TWBR should be 10 or higher for master mode
  It is 72 for a 16mhz Wiring board with 100kHz TWI */
(Arduino IDE1.6.12より)

atmega128とあるけどatmega328pも同様のはずで、これだとArduino UNO 16MHz標準で100kHzということらしい。もう少し早い400kHzで使いたいところだから、そういうときはコード内のどこかでレジスタ直接いじればいけそうかな。

ともあれここに書いてるよってことの備忘録。