Wednesday, October 10, 2007

PSoC で I2C

 冬コミ向けのネタ仕込み関連で追加でやってみたいことがあり、PSoC で I2C を使う実験をしてみた。使ったのは秋月で売っているリアルタイムクロックモジュール(RTC-8564NB) と手持ちの高輝度赤色LEDと、プルアップ用と LED の電流制限用に抵抗少々。

 利用するユーザーモジュールとしては I2CHWモジュールを選択し、"Single Master Operation" 構成にした。リアルタイムクロックモジュールの動作を簡単に確認する方法は、こちらの記述 にある通り、CLKOUT端子に 1 Hz の信号を出力させて LED を光らせる方法を、API の使い方はデータシートを参考にした。あっという間に期待通りの動作を確認ができた。

 せっかくなので、リアルタイムクロックモジュールのレジスタへの書き込みだけでなく、読み出しについても試してみた。読み出しは書き込みと比べてちょっと面倒で、スタートコンディションを送信した後に、ダミーの書き込みをして、その後改めてスタートコンディションを送信して読みださなくてはならない。こうした合わせ技をするにはどうしたものかと少し悩んだが、これもデータシートに書いてあった。このような場合、I2CHW_bWriteBytes や I2CHW_bWriteCBytes の bMode パラメータを I2CHW_NoStop にして呼び出して、次にbMode パラメータを I2CHW_RepStart にして呼び出せばよい。

# ユーザーモジュール名やAPI に渡す定数の名称は、デフォルトでは大抵、配置地の名称に
# 合わせてモジュール名+"_数字" になるが、たまに例外がある。I2CHWモジュールでも
# 一部定数が固定になっていて Build All するときに怒られて驚く。まあヘッダファイルで
# 確認できるからいいのだが…

Labels: ,