2015年
8月
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2015-08-09 AVRでI2C

_ MCP3425のくせ

マイコンでICと通信するために、UARTやSPIを使ったことがあったが、これらは基本的には一対一の通信である。一方、I2Cは、原理的には128個のICと二本の線で通信できる。

電子工作をしていて、16bitのADコンバーターであるMCP3425をI2Cでマイコンから読み取ることにした。3つのMCP3425を使うことにしたのだが、これを二本の線だけで通信できるのは素晴らしいと思っていたのだが、買ってから資料をよく読むと、アドレスが八種類あるのだが、普通に買うと一種類のアドレスのICとなり、これらを同時に使うことができないことが分かった。六本も使うのは悔しいので、クロックを共通にして、四本で3つのICを使うことにした。

I2CをAVRから使うのは始めてだったので、最初はうまく通信ができなかった。読み取りの時にPINでは無くPORTから読んだり、いくつかのバグを発見して、一応の通信はできるようになったが、まだ何か変であった。

接続してから一回目はうまく読み取れるのだが、二回目以降がうまく行かないことに気がついて、資料をよく読みなおしてみたら、読み取るときの最終データに対しては、ACKを送らないという約束になっているようだ。ううん、ややこしい。

でも、これでMCP3425との通信ができるようになり、ADコンバーターとしてもそれなりに精度もあって使いやすいことが分かった。参照電圧も不用だし。