ArduinoをISPに変える方法—ATmelATtiny85のプログラミング
公開: 2017-06-13ショートバイト:プロジェクトでビルド済みのArduinoボードを使用するのは、やり過ぎであるか、単に大きすぎる場合があります。 ATtiny85は安価ですが、驚くほど高性能なマイクロコントローラーであり、プロジェクトのフットプリントを削減するのに役立ちます。 プロジェクトで使用するためにATtinyをプログラムする方法は次のとおりです。
Arduinoプラットフォームは学習のための素晴らしいツールですが、サポートされているArduinoボードが必要な場所に完全に適合しない場合があります。 Arduino Uno (最も一般的なモデル)のサイズは約65mmx50mmであるため、一部のプロジェクトで最大のコンポーネントになる可能性があることを簡単に確認できます。 Nanoのようにはるかに小さいボードは他にもあります(私のNanoの模造品は43mm x 17mmで、4.5倍小さいです)が、それでも、大きすぎる場合があります。 たとえば、ウェアラブルデバイスを作成したい場合は、犬が夜間に着用するためのLEDが点滅しているだけかもしれません。 バッテリーなどを考慮に入れると、かなり大きくなる可能性があります。私たちの問題のヒーローであるATtinyラインをキューに入れます。 ATtinyの同名は明らかです。 約9mm四方のDIP-8パッケージ(デュアルインラインパッケージ– 8ピン)で見つけることができます。 その名のとおり、ATtinyはごくわずかですが、物理的なサイズだけではありません。 この記事で使用されているATtiny85には、8KBのプログラムフラッシュストレージ、512バイトのRAM、および512バイトのEEPROM (プログラムストレージ外の永続ストレージ)しかありません。
今問題は、これらの小さな人の1人をプログラミングすることです。 これについてはオンラインでいくつかのチュートリアルがありますが、それらが少し不完全であるか、説明が不足していることがわかりました。
ISP –システムプログラマー
インシステムプログラマー(ISP)は、思ったほど派手ではありません。 通常、ATmelチップのISPは、6ピンコネクタのUSBケーブルを備えたデバイスで構成されます。 ISPピンはArduinosで非常に簡単に見つけることができ、通常はUSBコネクタの反対側にあります。 ATmelチップはISPピンを介してプログラムすることを目的としていますが、Arduinoプラットフォームは、ISPデバイスの必要性を排除するためにボード上にUSB-シリアルアダプターを実装しています。 それにもかかわらず、ほとんどのモデルではないにしても、多くのモデルでISPピンを利用できるようにしています。
ATtinyチップにはArduinosが持っているUSB-シリアルデバイスがないため、ISPを使用してプログラムする必要があります。 ATmel ISPデバイスは、少なくともArduino自体のコストと比較してかなり高価です。そのため、ArduinoをISPとして動作するようにプログラミングすることで、コストと輸送時間を節約できます。
これを行うには、Arduino IDEを開き、サンプルスケッチからArduinoISPを選択します。
スケッチファイルを開くと、コードの予想される動作に関する情報が表示されます。 このファイルでは、ISPがArduinoIDEと適切に通信できるようにすばやく変更する必要があります。
220行目には、 setup()関数があります。
void setup(){ SERIAL.begin(BAUDRATE); pinMode(LED_PMODE、OUTPUT); パルス(LED_PMODE、2); pinMode(LED_ERR、OUTPUT); パルス(LED_ERR、2); pinMode(LED_HB、OUTPUT); パルス(LED_HB、2); }
BAUDRATEを19200に変更して、行が次のようになるようにする必要があります。
SERIAL.begin(19200);
私が読んだところによると、Arduino IDEは、このArduinoISPファームウェアとの互換性を壊すアップデートを受け取りました。 ArduinoとIDEは異なるボーレートで通信しようとしていたため、ファームウェアが適切にフラッシュしているにもかかわらず、ArduinoをISPとして利用できませんでした。
ATtinyライブラリ
Arduino IDEはさまざまなマイクロコントローラーとボードをサポートしていますが、残念ながらATtinyシリーズは含まれていません。 これは、私たち自身が彼らのサポートを得る必要があることを意味します。
私のために働いた方法は、ArduinoIDEプリファレンスの下のAdditionalBoardsManagerURLに以下のURLを追加することでした。
IDEを再起動し、[ツール]->[ボード]->[ボードマネージャー]でボードマネージャーを開き、ATtinyパッケージを検索してインストールします。
それが完了したら、ATtinyをプログラミングするための回路の構築を開始できます。
ISPの構築
ISPを構築する方法はいくつかあります。 部品を再利用できるようにはんだ不要のブレッドボードに組み込むことも、私が行ったようにすべてをはんだ付けして半永久的な解決策を作成することもできます。 慎重にすべてをはんだ付けしている場合は、必要に応じてArduinoを別のプロジェクトに再利用できます。
ArduinoISPスケッチの最初の30行を見ると、ISPとして機能するようにArduinoを設定するための次の情報を見つけることができます。
ピン10 | ピンをリセットするには ターゲットマイクロコントローラー |
ピン11 | SPIマスターアウト 奴隷制 |
ピン12 | SPIマスターイン 奴隷制 |
ピン13 | SPIシリアルクロック |
オプションで、ステータスを示すためにLEDを次のピンに接続できます
- ピン9–ハートビート–ISPが実行されていることを示します
- ピン8–エラー–エラーが発生したことを示します
- ピン7–プログラミング–ターゲットとのアクティブな通信を示します
これらのLEDには抵抗が必要になることに注意してください。
ここでは、ATtiny85のピン配置と、Arduinoに戻すために必要な適切な接続を確認できます。 かなり大雑把な図ですが、便宜上、ATtiny85のピンにラベルを付けました。 ただし、ピンは図のように1,2,3..8でアドレス指定されておらず、対角線のテキストでラベル付けされているため、ArduinoIDE内で指定されていることに注意してください。
これは、さまざまな接続のより詳細な図です。 すべてのLEDはオプションですが、トラブルシューティングに役立ちます。ArduinoISPスケッチファイルで推奨されている3つのステータスLEDに加えて、5Vからグランド(もちろん抵抗を使用)に接続するだけのLEDがあります。次に、点滅テストでATtinyをテストするために2番目のピン(IDEのピン3)に接続されたものがあります。 リセットピンをグランドに接続するコンデンサに注意してください。これは、ArduinoがISPとして機能するために必要です。
これは私がATtinyマイクロコントローラー用に構築したArduinoISPです。 プログラム中にATtinyを保持するためにDIP-8ソケットを使用したことがわかります。 また、ATmega328PのようなATmegaチップをプログラミングするためのDIP-28ソケットを取り付けるのに十分なスペースを右側に残しました。 アップグレードは非常に簡単で、Atmegaチップに必要なピンをATtinyと同じように接続するだけで済みます。
Arduino ISPを組み立てたら、ぜひ試してみてください。 Arduino自体をプログラムするのではなく、接続されたArduinoを介してプログラムする適切な設定を選択してください。
ボードには、ATiny 25/45/85オプションを選択し、プロセッサの選択でATtiny85を選択し、最後に、プログラマーからISPとしてArduinoを選択します。 これにより、IDEは、ターゲットシステムとの通信方法を含め、ターゲットシステムについて知る必要のあるすべてのことを知ることができます。 これで、まばたきのスケッチを表示して(または、ハードコアの場合は自分で入力して)試してみる準備ができました。LEDの点滅に使用するピンを、使用したピンに切り替えてください。回路、私が提供した回路図を使用している場合、それはピン3です。 最後に、[スケッチ]-> [プログラマーを使用してアップロード]をクリックして、スケッチをコンパイルしてアップロードします。
void setup(){ pinMode(3、OUTPUT); } void loop(){ digitalWrite(3、HIGH); delay(1000); digitalWrite(3、LOW); delay(1000); }
合計で、一緒にはんだ付けされた私のArduino ISPは、おそらく約3〜4ドルの費用がかかります。 ATtinyチップも非常に安価で、通常は1個あたり約1ドルです。 ATtinyチップをプロジェクトに組み込む予定がある場合は、コードを更新したり、チップを再利用したりする可能性があるため、DIP-8ソケットを購入することをお勧めします。 ICを所定の位置にはんだ付けすることは可能ですが、コードを数回更新する場合のように、特に繰り返し露光すると、ICが簡単に損傷する可能性があります。
他の誰かがこのようなことをしましたか? Arduinoのものをもっと見たいですか? 以下のコメントでお知らせください。
また読む:RaspberryPiまたはArduino—初心者に最適なボードはどれですか?