PCF8574:Arduino用のI2C I / Oエキスパンダーについて

PCF8574TIチップ

あなたは確かに聞いたことがある PCF8574IC、個別に購入できるチップ、または他の多くのようにモジュールにすでにマウントされているチップ 電子部品 Arduinoボードとの統合を容易にするため。 この場合、それは入力と出力のエクステンダーです I2Cバス.

Arduinoにはすでに独自のものがあると思うかもしれません 統合I2Cバス、そしてそれは本当です。 しかし、PCF8574は、開発ボードの制限を超えてそのバスを拡張するのに役立ちます。これは、Arduinoが提供するもの以上のものを必要とする一部のメーカーにとって非常に役立ちます。

I2Cバスとは何ですか?

Arduino UNO ミリ関数

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)。
どちらもオープンドレインのCMOS接続であり、プルアップ抵抗が必要です。 また、あるデバイスが0を送信し、別のデバイスが1を送信する場合、問題が発生する可能性があります。そのため、回線は常に1(高レベル)に設定され、デバイスは常に0(低レベル)を送信します。

それは、 マスターとスレーブ それらは同じケーブルまたはトラックを介してデータを送信します。これは、クロック信号を生成する最初のケーブルまたはトラックによって制御されます。 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モジュール

PCF8574は I2Cバスデジタル入力および出力(I / O)エキスパンダー。 ICやモジュールで利用できるほか、さまざまなメーカーが製造できます。 いずれにせよ、それをArduinoボードに接続し、マザーボードが許可するよりも多くのデバイスを制御する能力を持っていることは非常に実用的です。

El PCF8574ピン配列 含まれているだけなので簡単です 8マツ 準方向(通信するチップが接続されているP0〜P7)であり、一方、Arduinoボードに接続する必要のあるSDAとSCL、およびモジュールに電力を供給するためのVCCとGNDがあります。 また、0つのアドレス指定ピンA1、A2、AXNUMXを忘れずに、通信の宛先となるデバイスを選択してください...

PCF8574ピン配列

所有する その他の特徴 あなたが知っておくべきこと:

  • オープンドレインであるその接続は、 入力と出力の両方として使用.
  • 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との統合

ArduinoIDEのスクリーンショット

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() 
{
}


コメントを最初に

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。