あなたは確かに聞いたことがある PCF8574IC、個別に購入できるチップ、または他の多くのようにモジュールにすでにマウントされているチップ 電子部品 Arduinoボードとの統合を容易にするため。 この場合、それは入力と出力のエクステンダーです I2Cバス.
Arduinoにはすでに独自のものがあると思うかもしれません 統合I2Cバス、そしてそれは本当です。 しかし、PCF8574は、開発ボードの制限を超えてそのバスを拡張するのに役立ちます。これは、Arduinoが提供するもの以上のものを必要とする一部のメーカーにとって非常に役立ちます。
I2Cバスとは何ですか?
I2Cという名前は 集積回路間 または集積回路間。 そのバージョン1.0は、フィリップスによって1992年に作成されました。 その後、2.1年に2000番目の100が登場し、3.4年に特許が失効して自由に使用できるようになると、今日では標準になりました(2006 kbit / sで、最大XNUMX Mbit / sまで可能です)。
現在、業界で広く使用されています コミュニケーションのため、また、XNUMXつのICに統合されたさまざまなマイクロコントローラーと周辺機器を通信するプロジェクトについてメーカーから非常に高く評価されています。
El I2Cはバスです シリアル通信でよく知られています。 2チャネルのみの同期通信プロトコルを使用します(XNUMXつ目はありますが、リファレンスまたはGNDに結合されています)。実際、TWI(XNUMX線式インターフェイス)とも呼ばれます。
- XNUMXつは時計(SCL)用です。
- その他のデータ(SDA)。
それは、 マスターとスレーブ それらは同じケーブルまたはトラックを介してデータを送信します。これは、クロック信号を生成する最初のケーブルまたはトラックによって制御されます。 I2Cバスに接続されている各周辺機器には、送信を指示するために一意のアドレスが割り当てられます。 ただし、マスターが常に同じである必要はありません(マルチマスター)。転送を開始するのは常にマスターです。
の記事ですでに説明したように Arduino I2C 前に参照したように、各ボードにはこれらのI2C接続がさまざまな場所にあります。 これは、プレートの各バージョンで適切に使用できるようにするために覚えておく必要があることです。
- Arduino UNO:SDAはA4にあり、SCKはA5にあります
- アルドゥイーノナノ:前と同じ。
- アルドゥイーノミニプロ:同じ。
- Arduinoメガ:SDAはピン20にあり、SCKは21にあります。
- プレートに関する詳細情報。
スケッチにI2Cを簡単に使用できることはすでにご存知でしょう。 Wire.hライブラリ このシリアル通信のさまざまな機能を備えています。
- ベギン ():Wireライブラリを起動し、マスターかスレーブかを指定します
- requestFrom():マスターがスレーブにデータを要求するために使用します。
- beginTransmission():スレーブで送信を開始します。
- endTransmission():送信を終了します。
- 書く()-マスターからの要求に応じてスレーブからデータを書き込むか、マスターの送信をキューに入れることができます。
- 利用可能():読み取るバイト数を返します。
- 読んだ():スレーブからマスターに、またはその逆に送信されたバイトを読み取ります。
- onReceive():スレーブがマスターからの送信を受信したときに関数を呼び出します。
- 要求に応じて ():スレーブがマスターにデータを要求したときに関数を呼び出します。
へ もっと Arduinoのプログラミングと機能についてダウンロードできます PDFチュートリアル.
PCF8574とは何ですか?
PCF8574は I2Cバスデジタル入力および出力(I / O)エキスパンダー。 ICやモジュールで利用できるほか、さまざまなメーカーが製造できます。 いずれにせよ、それをArduinoボードに接続し、マザーボードが許可するよりも多くのデバイスを制御する能力を持っていることは非常に実用的です。
El PCF8574ピン配列 含まれているだけなので簡単です 8マツ 準方向(通信するチップが接続されているP0〜P7)であり、一方、Arduinoボードに接続する必要のあるSDAとSCL、およびモジュールに電力を供給するためのVCCとGNDがあります。 また、0つのアドレス指定ピンA1、A2、AXNUMXを忘れずに、通信の宛先となるデバイスを選択してください...
所有する その他の特徴 あなたが知っておくべきこと:
- オープンドレインであるその接続は、 入力と出力の両方として使用.
- La ピーク電流 出力として機能する場合は25mA(シンク、電流がPCF8574に向かって流れる場合)、300 µA(ソース、電流はPCF8574から流れる場合)です。
- La 緊張 電源は2.5と6vです。 スタンバイ消費量は非常に少なく、わずか10 µAです。
- すべての出力 ラッチがあります、外部アクションを必要とせずに状態を維持します。 状態を変更したいときにだけ行動する必要があります。
- あなたは8を得ることができます 可能な方向、 つまり、最大8つのデバイスと通信するか、8つのモジュールを使用して最大64のデバイスに拡張します。 アドレス(ピンA0、A1、A2)は次のようになります。
- 000:アドレス0x20
- 001:アドレス0x21
- 010:アドレス0x22
- 011:アドレス0x23
- 100:アドレス0x24
- 101:アドレス0x25
- 110:アドレス0x26
- 111:アドレス0x27
- 認める 中断 (INT)常に監視せずにデータを検出するための特別なラインによる。
Arduinoとの統合
Arduinoとの接続は非常に簡単です。VccをArduinoボードの5vピンに接続し、GNDをArduinoのGNDに接続するだけです。 一方、PCF8574SDAおよびSCLモジュールのピンは ピンで接続する 14(A5 SCL)および15(A4 SDA)。 それだけでそれは機能し始めます、明らかにあなたはあなたが通信したいデバイスを接続するためにPxを使うことができます...
それならそれは欠けているだけでしょう スケッチの例から始める ArduinoIDEで。 次のような追加のライブラリを使用せずにそれを行うことができます...
#include <Wire.h> const int address = 0x38; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { for (short channel = 0; channel < 8; channel++) { // Escribir dato en cada uno de los 8 canales Wire.beginTransmission(address); Wire.write(~(1 << channel)); Wire.endTransmission(); // Lee dato del canal delay(500); } }
入力として:
#include <Wire.h> const int address = 0x38; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { short channel = 1; byte value = 0; // Leer el dato del canal Wire.requestFrom(pcfAddress, 1 << channel); if (Wire.available()) { value = Wire.read(); } Wire.endTransmission(); // Mostrar el valor leido por el monitor serie Serial.println(value); }
またはまた ライブラリを使用する、できるPCF8574など ここからダウンロード このライブラリに付属している例自体から、これに類似したコードを使用します。
#include <Wire.h> #include "PCF8574.h" PCF8574 expander; void setup() { Serial.begin(9600); expander.begin(0x20); /* Setup some PCF8574 pins for demo */ expander.pinMode(0, OUTPUT); expander.pinMode(1, OUTPUT); expander.pinMode(2, OUTPUT); expander.pinMode(3, INPUT_PULLUP); /* Blink hardware LED for debug */ digitalWrite(13, HIGH); /* Toggle PCF8574 output 0 for demo */ expander.toggle(); /* Blink hardware LED for debug */ digitalWrite(13, LOW); } void loop() { }