How to make

Raspberry Pi だけで構成する汎用AVR開発環境


Raspberry Pi だけ(AVRライタ不要)でブートローダを持たないATtinyやATmegaに
Arduino IDE から
スケッチを書き込むことができる開発環境を作ります。

現行の Arduino IDE 1.8.x に対応します。


-改訂情報-
  • 配線接続図(図6)に重大な誤りがあったのを訂正

  1. 概要
  • Raspberry PiのGPIOを利用したAVRライターの事例がWebに沢山あります→ Google検索例
  • AVRライタソフトAVRDUDEのARM版はRaspberry PiのGPIOに対応しています。Arduino IDEでスケッチの書き込みを行っているのもAVRDUDEです。
  • Arduino IDE内蔵のAVRDUDEをGPIO経由で書き込むよう設定すればRaspberry PiとArduino IDEでAVRライタ不要のAVR開発環境を作ることがきると考えて試行してみました。
  • しかし,Arduino IDE内蔵のAVRDUDEはGPIOをうまく制御できません。次善の策としてGPIO制御可能なAVRDUDEをオーバーライドして動かすようIDEを設定してうまく行きました。
  • この成果をArduino IDEのボードマネージャで簡単にインストールできるようファイル群を編成しクラウドに置きました。
  • ボードマネージャでインストールした環境はArduino IDEの設定フォルダに収容されます。IDEをバージョンアップしても、その環境は引き継がれます。
  1. 開発環境の導入
    1. Arduino IDEをインストールします。
      1. arduino.ccのソフトウエア提供ページからLinux ARM用Arduinio IDEをダウンロードしインストールします。
      2. 念のため,IDEインストール後に手持ちのArduino UNOなどを接続してスケッチが書き込めるか確認します。
    2. ボードマネージャから開発環境をインストールします。
      1. インターネットに接続されていることが必須です。
      2. Raspbianで使用するユーザアカウントがパスワード入力なしでsudoのコマンド実行ができるよう設定されていることが必須です。 初期ユーザアカウント pi はパスワードなしsudoの実行が可能です。
      3. 下の直接リンクURLをコピーします。
        https://kimio-kosaka.github.io/_RasPiduino/package_RasPiduino_index.json
      4. Arduino IDEを起動し「フィアル」→「環境設定」と進みます。図1
        「追加のボードマネージャのURL」欄に先程コピーした直接リンクURLを貼り付け,[OK]をクリックして閉じます。図2

        図1 図2
      5. [ツール]→[ボード:]→[ボードマネージャ…]と進みます。図3
      6. ボードマネージャウインドウが開きます。
        最後尾までスクロールするとKosaka.Lab提供の4つの環境がリストされるはずです。
        先ず最初に_RasPiduinoをインストールします。図4

        図3 図4
      7. 残り3つ ATMegaCore-R, ATTinyCore-R, bitDuino13-R をインストールしてボードマネージャを閉じます。
        1. ATTinyCore-RはSpence Konde氏のATTiny-CoreをRaspberry Pi GPIO書き込みに対応させるよう改編しました。
        2. bitDuino13-Rはmaris_HY氏のbitDuino内のATtiny13をArduino IDE ver.1.8.xへの対応とRaspberry Pi GPIO書き込みに対応させるよう改編しました。
      8. 「ツール」→「ボード:」と進みボードリストの下の方にスクロールすると,RasPiduino〜bitDuino13の項目が見えるはずです。図5

        図5

  2. 動作テスト

    ATtiny85を用いた動作テストの例です。

    1. 図6のように配線します。(クリックで拡大表示)

      図6

    2. 書込み装置選択
      IDEのメニュー[ツール]→[書込み装置]と進み Raspberry Pi GPIO を選択します。
    3. ボード選択
      IDEのメニュー[ツール]→[ボード:]と進み[ATtiny25/45/85]を選択します。図A
    4. Chipの選択
      IDEのメニュー[ツール]→[Chip:]と進み[ATtiny85]を選択します。図B
    5. Clockの選択
      IDEのメニュー[ツール]→[Clock:]と進み[1MHz(Internal)]を選択します。図C

      図A ATtinyグループの選択

      図B Chipの選択

      図C Clockの選択

    6. 下のスケッチを入力します。。
      #define PIN 3
      #define DTIME 500
      
      void setup() {
        pinMode(PIN, OUTPUT);
      }
      
      void loop() {
        digitalWrite(PIN, HIGH);
        delay(DTIME);
        digitalWrite(PIN, LOW);
        delay(DTIME);
      }
    7. [マイコンボードに書き込む]ボタンをクリックします。
      コンパイルと書き込みが行われ,工場出荷状態のATtiny85であればLEDが約0.5秒間隔で点消灯するはずです。
    8. クロックを8MHz(Internal)に変更
      1. IDEのメニュー[ツール]→[Clock:]と進み[8MHz(Internal)]を選択します。
        注意:ここでクロック選択を誤ると,後ほど行う「ヒューズビット書き換え実験」でATtiny85が動かなくなります。
      2. 再度「マイコンボードに書き込む」ボタンをクリックします。
        LEDが約4秒間隔で点消灯します。これは,ATtiny85が内蔵クロック1MHzで動作しているのにクロック8MHzとしてスケッチをコンパイルして書き込んだために起こる現象です。次のヒューズビット書き換え操作でATtiny85を内蔵クロック8MHzで動作させます。
        今一度,IDEのメニュー[ツール]→[Clock:]と進み[8MHz(Internal)]となっていることを確認します。
    9. ヒューズビット書き換え
      メニュー[ツール]→[ブートローダの書き込み]と進みます。ダミーのブートローダ書き込みにより,ATtiny85のヒューズビットの書き換えとプログラムの消去が行われます。
      もういちど,スケッチをコンパイルして書き込むとLEDは約0.5秒間隔で点消灯するはずです。
  3. アドオンボード

    この汎用AVR開発環境向けのRaspberry Piアドオンボード(シールド)を製作しました。
    ボード上にICSP端子,ミニブレッドボード,ATmega328P用ソケットを搭載しています。ミニブレッドボード上にターゲットのATtiny,ATmegaを置きICSPラインをジャンパで配線してスケッチを書き込みます。ATmega328PソケットにはICSPとGPIOからのTXD,RXDとRTSによるReset信号が配線されており,ここにATmega328Pを装着しRasPiduinoのブートローダを書き込めばシリアルポート接続のArduino互換ボードとして動かすことができます。この開発実験ボードはキットとして頒布します。

     

  4. 関連情報
    1. ボードマネージャからインストールした開発環境のファイル群は ~/.arduino15/ 配下に収容されています。
    2. Arduino IDE で ATtiny 他の開発
      ここで制作した環境設定ファイルを改編して使用しています。
      各種 ATtiny, ATmega の Arduinoプログラミング環境でのピン割付表もここに収容しています。
    3. Raspberry Pi シリアルポート経由でArduinoと連携
      Arduinoブートローダを書き込んだATmega328PをRaspberry Piのシリアルポートにダイレクト接続して利用する方法です。
  5. 今後…
    1. Arduino IDE内蔵のAVRDUDEにGPIO対応AVRDUDEをオーバーライドするためと、root権限でGPIO対応AVRDUDEを実行させるために、かなりトリッキーな方法を使っています(Raspberry PiでGPIOを制御するにはroot権限が必要)。この副作用でATTinyCore等の定義ファイルに変更を加える必要がありました。簡単かつスマートに方法を探りATTinyCore等がそのまま利用できる環境を作ります。
    2. ATtiny10用の環境を作ります。

最後に注意
Raspberry PiのGPIOは5Vトレラントではありません。
5V回路にRaspberry PiのGPIO端子を接続するとRaspberry Piは深刻なダメージを受けます。


履歴

update 2017.11.11 動作テスト配線接続図(図6)に重大な誤り(GND-5V取り違え)があったのを修正
upload 2017.11.08 Kimio Kosaka

この記事の公開ライセンスは「クリエイティブ・コモンズ BY-NC-SA 4.0 国際」です。

Copyright © kosakalab All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.