コンピューターとの通信にUSBを使用します。多数のマイクロコントローラーを使用している場合、マイクロコントローラーの1つだけをコンピューターに直接接続することになるでしょう。他のマイクロコントローラーは、メインのマイクロコントローラーからコマンドを取得する必要があります。
選択する通信は、いくつかの要因に依存します。
- 必要な帯域幅(16MHzで実行していると仮定します)
- 複雑さ(配線とコーディング)
- 双方向、またはマスタースレーブ
ほとんどすべてのオプションには、AVRマイクロコントローラーのサポートが組み込まれています。追加のハードウェアを必要とする組み込みオプションよりも合理的に好むオプションはありません。サポートが組み込まれているため、ソフトウェアの複雑さはすべて似ています。ポートを構成し(レジスタを使用)、送信するデータを別のレジスタに配置し、別のレジスタにビットを設定して送信をトリガーします。受信したデータはすべて別のレジスタで検出され、ユーザーが処理できるように割り込みがトリガーされます。どのオプションを選択しても、唯一の違いはレジスタの場所の変更と、構成レジスタの変更です。
USARTループには次の機能があります。
- CLK / 16の最大ボーレート= 1MHz(16MHzクロックで)、これは約90KB / sの転送速度です。
- 完全な双方向通信(マスターまたはスレーブの指定なし)
- マイクロコントローラーの各ペア間に別々のワイヤが必要です-Atmega32u4はネイティブで2つのUSARTポートをサポートし、実際にネットワークに接続できるマイクロコントローラーの数を制限しますマナー)
注:これはRS232通信の取得にも使用しますが、RS232には10Vが必要なため、これらの電圧レベルを取得するにはドライバーが必要です。マイクロコントローラー間の通信では、これは役に立ちません(電圧レベルのみが変更されます)。
RS485:
- 基本的に、異なるモードでUSARTポートを使用します。帯域幅に利点はなく、配線をわずかに単純化するだけでなく、複雑にします。これは推奨されません。
2線式インターフェース:
これはI2Cとも呼ばれます。これは、すべてのデバイスが同じ2本のワイヤを共有することを意味します。
両方のワイヤにプルアップ抵抗が必要です
低速です(プルアップ抵抗の値が制限されているため、デバイスの数が増加し、ワイヤの長さが増加するにつれて容量が増加するため)。このAVRマイクロコントローラーの場合、速度は最大400 kHzです-USARTよりも低速です(ただし、この速度は静電容量の制限に依存します)。その理由は、デバイスがデータワイヤをLowに駆動しますが、ワイヤを再びHighにフロートさせることで(プルアップ抵抗)、反対の遷移が達成されるためです。
すべての通信が同じ制限帯域幅を共有していると考えると、さらに遅くなります。すべての通信が同じ制限された帯域幅を共有するため、通信が遅延する可能性があり、データが送信される前にネットワークがアイドルになるまで待機する必要があります。他のデータが絶えず送信されている場合、データが送信されるのをブロックすることもあります。
これは、マスターがスレーブをアドレス指定し、コマンド/リクエストを送信し、その後スレーブが応答するマスタースレーブプロトコルに依存します。一度に通信できるデバイスは1つだけなので、スレーブはマスターの終了を待つ必要があります。
どのデバイスもマスターおよび/またはスレーブとして機能できるため、非常に柔軟です。
SPI
これは、マイクロコントローラー間の一般的な通信に推奨/使用するものです。
高速-最大CLK / 2 = 8MHz(16MHzのCLKの場合)であり、最速の方法です。これは、クロック専用の独立したワイヤにより実現可能です。
MOSI、MISOデータ、およびSCKクロックワイヤはネットワーク全体で共有されます。つまり、配線が簡単になります。
これはマスター/スレーブ形式ですが、どのデバイスもマスターおよび/またはスレーブにできます。ただし、スレーブ選択の複雑さのため、(ネットワーク内の)共有配線では、2線式インターフェイスとは異なり、階層的にのみ使用する必要があります。IE。すべてのデバイスをツリーに編成する場合、デバイスはその子に対してのみマスターであり、親に対してはスレーブのみである必要があります。つまり、スレーブモードでは、デバイスは常に同じマスターを持ちます。また、これを正しく行うには、MISO / MOSI / SCKに抵抗をアップストリームマスターに追加して、デバイスがダウンストリームと通信している場合(スレーブとして選択されていない場合)、通信が他の部分の通信に影響を与えないようにする必要がありますネットワーク(抵抗を使用してこれを行うことができるレベルの数が制限されていることに注意してください。両方のSPIポートを使用したより良いソリューションについては、以下を参照してください)。
AVRマイクロコントローラーは、スレーブ選択時にMOSI信号を自動的にトライステートにし、スレーブモードに切り替えます(マスターの場合)。
階層ネットワークが必要な場合もありますが、ほとんどのネットワークはツリーのような方法で編成できるため、通常は重要な制限ではありません
各AVRマイクロコントローラーが2つの個別のSPIポートをサポートするため、上記を少し緩和することができます。そのため、各デバイスは2つの異なるネットワークで異なる位置を持つことができます。
とはいえ、ツリー/階層に多くのレベル(2つ以上)が必要な場合、上記の抵抗器を使用したソリューションは手間がかかりすぎて機能しません。この場合、ツリーの各レイヤー間でSPIネットワークを変更する必要があります。これは、各デバイスが1つのSPIネットワークの子に接続し、他のSPIネットワークの親に接続することを意味します。接続のツリーが1つしかないことを意味しますが、利点は、デバイスがその子の1つとその親の両方と同時に通信でき、手間のかかる抵抗がないことです(常に正しい値を選択するのが難しい) 。
MOSIワイヤとMISOワイヤが別々になっているため、マスターとスレーブの両方が同時に通信できるため、速度が2倍になる可能性があります。追加の各スレーブのスレーブ選択には追加のピンが必要ですが、これは大きな負担ではありません。10種類のスレーブでも10の追加ピンしか必要とせず、通常のAVRマイクロコントローラーに簡単に対応できます。
CANは、指定したAVRマイクロコントローラーではサポートされていません。他にも良い選択肢があるので、この場合はとにかくおそらく重要ではありません。
推奨はSPIです。これは高速で、配線が複雑すぎず、面倒なプルアップ抵抗を必要としないためです。SPIがニーズを完全に満たさないまれなケースでは(おそらくより複雑なネットワークで)、複数のオプションを使用できます(たとえば、両方のSPIポートと2線式インターフェイスを使用し、一部のマイクロコントローラーをペアリングします) USARTループを使用!)
あなたの場合、SPIを使用すると、当然、コンピューターにUSB接続されたマイクロコントローラーがマスターになり、コンピューターから各スレーブデバイスに関連コマンドを転送することができます。また、各スレーブから更新/測定を読み取り、コンピューターに送信することもできます。
8MHz、0.5mのワイヤ長では、問題になるとは思いません。ただし、その場合は、静電容量(グランドと信号線が近づきすぎないように注意し、異なる導体間の接続にも注意してください)、および信号終端にも注意してください。まれに問題が残る場合は、クロックレートを下げることができますが、必要ではないと思います。