FabISP の製作とプログラミング

最初のFabISPを切削、組み立て、プログラムするためのガイド

Fab ISP

サマリー

  • FabISPとは?
  • 歴史
  • ボードのファイル(画像)のダウンロードとボードの切削
  • コンポーネント
  • スモークテスト
  • ショートした基板のトラブルシューティング

  • AVRプログラミングに必要なソフトのインストール

  • FabISPの電源を入れる
  • Makefileの編集
  • FabISPへのプログラム(書き込み)
  • ボードにプログラムした後

FabISPとは?

FabISPはAVRマイコン向けの、FabLabで開発されたプログラマーです。これから製作する他の(AVR)マイコンボードにプログラムすることができます。

このElectronics Production の課題を通して、ボードを切削し、コンポーネントをはんだ付けして(プログラマーとしてのプログラムを)書き込みます。 これは私たちがこれから作る他のボードにプログラムするためにAcademyの終わりまで使用します。

  • 頑丈にするためにminiUSBコネクタを使用します

歴史

FabISPの歴史はとても興味深いです。Neil'の FabISPを元にDavid Mellis'の FabISP が生まれ、それを元にLimorの USBTinyISP が生まれ、それを元にDick Streefland のUSBTinyが作られました。

ボードのファイル(画像)のダウンロードとボードの切削

""](http://academy.cba.mit.edu/classes/embedded_programming/hello.ISP.44.traces.png)

基板部

""

ボードの外形

FabISP基板の切削

Milled Fab ISP

""

パーツの配置

パーツのラベルが書かれたFabISP画像をダウンロードします基板上にどんなパーツをどこに配置するかがわかります。

はんだごてとはんだを使い(またはクリームはんだでリフローして)基板にコンポーネントを実装します。

コンポーネント

基板の製作に必要な全てのパーツです
  • 1 ATTiny 44 microcontroller
  • 1 コンデンサ(キャパシタ) 1uF
  • 2 コンデンサ(キャパシタ) 10 pF
  • 2 抵抗 100 Ω
  • 1 抵抗 499 Ω
  • 1 抵抗 1K Ω
  • 1 抵抗 10K Ω
  • 1 6ピンヘッダ
  • 1 miniUSBコネクタ
  • 2 ジャンパ(抵抗0Ω)
  • 1 クリスタル 20MHz
  • 2 ツェナーダイオード 3.3 V
  • 1 usb mini ケーブル
  • 1 リボンケーブル
  • 2 6ピンコネクタ
Mini USB ヘッダ
  • miniUSBをはじめにはんだ付けします。

    一番取り付けが難しく、基板を壊しかねない部分になるため最初に実施します

  • (画像の)J2 USB が mini USB ヘッダのことです
  • はんだを盛りすぎた場合は、はんだ吸い取り線などを使って除去します
マイクロコントローラ
  • 次にマイコンをはんだ付けします。
  • 画像の"IC1 t44"がattiny44aチップです。
  • ニールの画像と方向を同じにした場合、チップの表面にある小さな丸(1ピン)が左上にきます
  • ピン配置図の赤丸の部分です
  • attiny44のデータシート

tiny44

クリスタル
  • 画像の"20 MHz"の部分です
  • パッドに予備はんだを流し込み、コンポーネントをのせます
  • ピンセットなどでコンポーネントを押さえて、両端をはんだ付けします。

    NOTE: </span> クリスタルには極性がありません。方向はどちらでも構いません

ダイオード (注意!)
  • ダイオードは極性があり、とても細い線 でマーキングされている方がカソード(C)です。
  • その線の方を画像で"C"と書かれている側のパッドに配置します。
  • ルーペなどで確認しましょう。

NOTE: ダイオードをつける前に1Kの抵抗をつけても良いかもしれません。

抵抗
  • "R" (R1, R2, etc) と書いてある部分は抵抗です
  • SMD (表面実装) 抵抗値の計算機です

NOTE: 抵抗は極性がありません、方向はどちらでも構いません

図-----値-----パーツ

  • R1-----1 K Ω -----1001
  • R2-----499 Ω -----4990
  • R3-----100 Ω -----1000
  • R4-----100 Ω -----1000
  • R5-----10k Ω -----1002
コンデンサ(キャパシタ)
  • "C" (C1, C2, etc)と書かれているのがコンデンサです
  • コンデンサには(値などが書かれた)マークはないので、部品が混ざらないよう注意して取り付けてください。

    NOTE: </span> コンデンサは極性がありません、方向はどちらでも構いません

図-----値-----パーツ

  • C1-----1 uf -----
  • C2-----10 pf -----
  • C3-----10 pf -----
ジャンパ
  • SJ1 と SJ2 はジャンパ(離れた配線を繋ぐ部分)です。
  • SJ1 はハンダで配線同士を繋ぎます
  • SJ2 には0Ωの抵抗をつけます
プログラム用 6 ピンヘッダ
  • J1 ISP はプログラム用の 6 ピンヘッダです
  • 方向はどちらでも構いません

Stuffed FabISP

"スモークテスト"

miniUSBケーブルでFABISPをコンピュータに繋いでみます。

  • もしコンピュータが繋いだデバイスの電源供給が大きすぎるためにUSBポートをシャットダウンしたというようなエラーがでた場合

基板がショートしていると思われるため、トラブルシューティングを見てください

もしなんのエラーも出ない場合は、AVRプログラムに必要なソフトウェアのインストールに進みます。 If you do not recieve any messages, proceed to "Install the necessary software for AVR programming."

ショートした基板のトラブルシューティング

  1. はじめに、はんだの接合部の見た目が光沢がなく滑らかでない充分に流れていなさそうな部分を溶かし、再度はんだ付けします。

  2. テスターですべての接合部について以下のようになっているかチェックします。

            - 電源供給部とグラウンドが繋がっていない
    
            - 基板上のすべての電源ラインがショートしていない (グラウンドと繋がっていない)
    
  3. FabISPならではの注意点Common problem areas on the FabISP are:

            - プログラム用の6ピンヘッダがすべて基板に繋がっている
    
            - miniUSBヘッダが基板のラインにすべて繋がっている
    
            - ピン同士は繋がっていない、きちんと離れている
    
            - ピンのはんだ付けがされているかテスターで確認する
    
            - 余分なはんだ付けを吸い取り線などを使って除去する
    

FabISP: プログラミング

  1. FabISPへのプログラムには、まずコンピュータのOSに必要なソフトと書き込むプログラム(ファームウェア)をダウンロードします
  2. 必要に応じてMakefileを編集します
  3. フューズ(fuse)の設定をしてボードにプログラムします
  4. ボードが正しく動いていることの確認します
  5. Then you need to open up the jumpers to make it a programmer.

必要なソフトと書き込むプログラム(ファームウェア)のダウンロード:

FabAcademyの電気を学ぶセッションでは、以下のソフトが必要です:

  1. Avrdude (AVRマイコンヘのプログラム用)
  2. GCC (Cコードのコンパイル)
自分のコンピュータのOSの手順にしたがってください:

Ubuntu ソフトウェアインストール

Get and install avrdude / GCC software and dependencies:

Open Terminal and type:

    sudo apt-get install flex byacc bison gcc libusb-dev avrdude   

Then type:

  sudo apt-get install gcc-avr

- type "y" when asked to do so by your system

Then type:

  sudo apt-get install avr-libc

Then type (may already be installed):

  sudo apt-get install libc6-dev
Download and Unzip the Firmware:

Move to the desktop

cd ~/Desktop  

Download the firmware from the Fab Academy Electronics Production page.

wget http://academy.cba.mit.edu/classes/embedded_programming/firmware.zip

Unzip the firmware

unzip firmware.zip

Mac OS のソフトウェアインストール

avrdudeのダウンロードとインストール / OSバージョンごとのGCCの導入方法:
  1. Crosspack AVRのインストールとダウンロード
  2. Get Make (XCode経由でのGCC導入):
    • Lion以降の場合は、XcodeをAppStoreでインストールdownload XCode from the Apple App store.
    • それ以前の場合は付属のOSディスクのデベロッパーツールメニューからインストール.

ファームウェアのダウンロード(以下のURLからコピーする):

FabISP Firmware (右クリックで保存)

ターミナルで保存した場所に移動(例ではデスクトップ):

  cd ~/Desktop/

firmware.zipを解凍します:

  unzip fabISP_mac.0.8.2_firmware.zip

解凍後に生成されたフォルダに移動します:

  cd ~/Desktop/firmware

Windows ソフトウェア/ ドライバーインストール

avrdudeのインストール / GCC とドライバーの設定 :
  1. 警告, WinAVR はシステムに悪影響を及ぼす可能性があります インストール後、OSのパス環境変数が壊れる可能性があります!
              インストール前に, [現在のパス設定についてメモを残してください](https://stackoverflow.com/questions/559816/how-to-export-and-import-environment-variables-in-windowse-g-xp)
    
  2. WinAVRのダウンロードとインストール

              - ここに[1手順ことのインストラクションガイドが記載されています](http://www.ladyada.net/learn/avr/setup-win.html)
    
  3. winavrへのパスのみが含まれている場合は、インストール後に、OSのパス環境変数を確認(修正)します:
    • (winAVRインストール後の)値のコピー
    • (インストール前に)保存していたパスの復元
    • winAVRが含まれているパスを追加する
    • コマンドプロンプトを閉じる
  4. Windowsバージョンにあったドライバーをダウンロードする
  5. FabISPのファームウェアをダウンロードする
  6. FabISPまたはUSBtinyをコンピュータに接続する
  7. ドライバーのインストール:

スタートメニュー>コントロールパネル>デバイスマネージャーを立ち上げる(もしくは"mmc devmgmt.msc"とコマンド)

  • "Other Devices"のなかに"FabISP"があります
  • "FabISP"を右クリックします
  • "Update Driver Software.."を選ぶ
  • "Browse my computer"を選ぶ
  • ステップ4でダウンロードしたフォルダを選択する
  • "ok"ボタンを押してUSBtinyまたはFabISPのドライバーをダウンロードする

FabISPの電源を入れる

ボードには電源が必要です:

  • miniUSBケーブルでプログラムを書き込むFabISPをコンピュータに繋ぎます。
  • さらに 6ピンヘッダにそのFabISPにプログラムするプログラマーを、繋ぎ電源を入れます。(すでにプログラマとして動作している別のFabISPやAVR社から提供されているATAVRISP2, USBtiny, AVR Dragon,など)

USBtinyプログラマと繋いだ例 programming Fab ISP with USBtiny

ATAVRISP2 programmerを使う場合,MakefileにATAVRISP2の設定がすでに入っているため、編集する必要がないので、step7は飛ばして良いです。

ATAVRISP2プログラマのインジケーターの意味

ATAVRISP2プログラマを使っている場合、FabISPの6ピンヘッダに繋いだ時点でインジケーターが点灯します。それぞれの意味は:

  • 緑: 6ピンヘッダが正しくはんだ付けされていて、(ターゲット基板の)AVRにも電源が供給されている
  • 黄色: AVRには電源が供給されているが、6ピンヘッダの部分が正しくはんだ付けされていない。(はんだの部分を再度温めて流し入れたり、はんだが守られているだけできちんと接続されていない部分がないか調べたり、ショートしていないか確認します。)
  • 赤: AVRに電源が供給されていない。- 回路がショートしていないか確認

Makefileの編集

Makefileはダウンロードしたファームウェアのディレクトリに入っています。このMakefileはデフォルトではAVRISP2で書き込みをするように設定されています。別のプログラマを使う場合、Makefileを編集する必要があります。

Ubuntu:

    nano Makefile

Mac:

Makefileをテキストエディットで開きます。

Windows:

MakefileNotepad++でMakefileを開きます。

Make の変更 - All OS:

開いたMakefileの以下の行に移動します:

      #AVRDUDE = avrdude -c usbtiny -p $(DEVICE) # edit this line for your programmer

      AVRDUDE = avrdude -c avrisp2 -P usb -p $(DEVICE) # edit this line for your programmer
  • もしUSBtinyや他のFabISPを使う場合は、"usbtiny"と書いてある行の"#"を削除して、"avrisp2"と書いてある行の頭に"#"と追加してコメントアウトし、Makefileを保存します。

</a>FabISPへのプログラム(書き込み)(All OS):

FabISPのファームウェアのディレクトリに移動します。(このチュートリアル通りに作業していた場合、デスクトップ上にあるかと思います)

ターミナルまたはコマンドラインインターフェースを立ち上げて、ファームウェアのあるディレクトリに移動します。

Ubuntu / Windows type:

  cd Desktop/firmware

For Mac users who downloaded the modified firmware:

  cd Desktop/fabISP_mac.0.8.2_firmware
ファームウェアをコンパイルします。

コマンド:

  make clean    

正常に動作した場合、以下のメッセージが表示されます。

akaziuna@Titan:~/Desktop/firmware$ make clean
  rm -f main.hex main.lst main.obj main.cof main.list main.map main.eep.hex
  main.elf *.o usbdrv/*.o main.s usbdrv/oddebug.s usbdrv/usbdrv.s

コマンド:

  make hex

  正常に動作した場合、以下のメッセージが表示されます。

  akaziuna@Titan:~/Desktop/firmware$ make hex
  avr-gcc -Wall -Os -DF_CPU=20000000     -Iusbdrv -I.       -DDEBUG_LEVEL=0
  -mmcu=attiny44 -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o
  avr-gcc -Wall -Os -DF_CPU=20000000     -Iusbdrv -I.       -DDEBUG_LEVEL=0
  -mmcu=attiny44 -x assembler-with-cpp -c usbdrv/usbdrvasm.S -o usbdrv/usbdrvasm.o
  avr-gcc -Wall -Os -DF_CPU=20000000     -Iusbdrv -I. -DDEBUG_LEVEL=0
  -mmcu=attiny44 -c usbdrv/oddebug.c -o usbdrv/oddebug.o
  avr-gcc -Wall -Os -DF_CPU=20000000     -Iusbdrv -I. -DDEBUG_LEVEL=0
  -mmcu=attiny44 -c main.c -o main.o
  avr-gcc -Wall -Os -DF_CPU=20000000     -Iusbdrv -I. -DDEBUG_LEVEL=0
  -mmcu=attiny44 -o main.elf usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o
  main.o
  rm -f main.hex main.eep.hex
  avr-objcopy -j .text -j .data -O ihex main.elf main.hex
  avr-size main.hex
     text       data        bss        dec        hex    filename
        0       2020          0       2020        7e4    main.hex
次に、AVRを外部発振器(クリスタル)を使って動かすためにfuseの設定をします

コマンド:

  make fuse

正常に動作した場合、以下のメッセージが表示されます:

akaziuna@Titan:~/Desktop/firmware$ sudo make fuse
avrdude -c usbtiny -p attiny44  -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9207
avrdude: reading input file "0xDF"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDF:
avrdude: load data hfuse data from input file 0xDF:
avrdude: input file 0xDF contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.
そして、ISPとして動作させるためにボードに書き込みます。

コマンド:

make program

正常に動作した場合、以下のメッセージが表示されます。

akaziuna@Titan:~/Desktop/firmware$ sudo make program
[sudo] password for akaziuna:
avrdude -c usbtiny -p attiny44  -U flash:w:main.hex:i

    avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9207
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
 To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: writing flash (2020 bytes):

Writing | ################################################## | 100% 5.68s



avrdude: 2020 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex contains 2020 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 3.36s



avrdude: verifying ...
avrdude: 2020 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

avrdude -c usbtiny -p attiny44  -U hfuse:w:0xDF:m -U lfuse:w:0xFF:m

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9207
avrdude: reading input file "0xDF"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xDF:
avrdude: load data hfuse data from input file 0xDF:
avrdude: input file 0xDF contains 1 bytes
    avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xFF"avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xFF:
avrdude: load data lfuse data from input file 0xFF:
avrdude: input file 0xFF contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.00s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

成功!!!おめでとうございます!

エラーが出る場合

  • もしエラーがでた場合、エラー文を読んで、支持に従ってください。
  • avrdudeがボードに接続できていないようだったら、"ショートした回路のトラブルシューティング"を読んだり、インストラクターに対処法を相談してください。

ISPが正しく動いているか確認します:

Ubuntu 11.10:

コマンド:

  lsusb

If your FabISP has been successfully programmed, you should see a list of the USB devices plugged into your computer. The FabISP will be listed in a line like the following:

  Bus 002 Device 004: ID 1781:0c9f Multiple Vendors USBtiny
  • Note: Ubuntu 10.10 lists the device as something like:

    Bus 002 Device 004: ID 1781:0c9f Multiple Vendors
    

Mac:

System Profiler > Hardware > USB > Hubを見ます:
細かく手順を説明すると:

  1. メインツールバーのアップルメニューをクリックします
  2. "このmacについて"を選択します
  3. "システムレポート"を選択します
  4. 左側にメニューがあるので

    - "ハードウェア"の項目が展開されていなければ、クリックして展開します。
    - "USB"を選択
    - USB装置ツリーにある"Hub"を展開します
    - "FabISP"がその下にあるはずです
    
  5. FabISPが正しくプログラムされていれば、コンピュータ上で認識されます。

Windows:

スタートメニュー>ハードウェアとサウンドを開いてください。FabISPが一覧に表示されているはずです。

ボードにプログラムした後

  • 下の画像にあるはんだのジャンパを取り除きます。そうすることで他のボードにプログラムできるプログラマーとして使うことができるようになります。

  • 5V電源を使わないAVRボードにプログラムする場合は、0Ωの抵抗を取り除いてください。

    この抵抗を取り除いた場合は、ターゲットボードに対してFabISP経由で電源供給をしないため、別電源をターゲットボードに接続する必要があります。

Fab ISP without jumpers

Original tutorial by:

  • All content © 2013 Anna Kaziunas France (except where otherwise noted) Some rights reserved.

  • Remixed/Updated by Eduardo Chamorro, Fab Lab Seoul 01.2017

  • 日本語訳 Asako Okazaki ,Fab Lab Kamakura 01.2019

Licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License