electronics production
- Assignment: make the FabISP in-circuit programmer
![](https://lh5.googleusercontent.com/-n_ye0s3xr4o/USHotSOU_0I/AAAAAAAAEBs/kltprgYF6Ss/s560/DSC00746.JPG)
- This is what I made this week. Here I write down how I made it with some problems I got and how I solved them.
- 今週つくったものです。どのようにつくったかを、途中で起きた問題と、それをどのように解決したかを交えながら記します。
- What is this? これはなに?
- It is an AVR programmer, which is to write programs on an AVR micro controller.
- AVRライターです。AVRマイコンにプログラムを書き込むためのものです。
- What is ISP? ISPってなに?
- ISP is for In-System-Programmer or In-System-Programming.
- Wikipedia says..
- In-System Programming (ISP) is the ability of some programmable logic devices, microcontrollers, and other embedded devices to be programmed while installed in a complete system, rather than requiring the chip to be programmed prior to installing it into the system.
The primary advantage of this feature is that it allows manufacturers of electronic devices to integrate programming and testing into a single production phase, and save money, rather than requiring a separate programming stage prior to assembling the system. This may allow manufacturers to program the chips in their own system's production line instead of buying preprogrammed chips from a manufacturer or distributor, making it feasible to apply code or design changes in the middle of a production run.
- ISPとはIn-System-ProgrammerもしくはIn-System-Programmingの略です。
- Wikipediaによれば…
- In-System Programming (インシステム プログラミング、ISP) とは、ある種のPLDやマイクロコントローラやその他プログラム可能な電子部品において、事前にプログラムを書き込んでからシステムに組み込むのではなく、組み込み済みの状態でプログラムを書き込むことである。
この機能の主な利点は、システムの組み立て前に書き込み段階を別途設ける必要が無く、電子機器の製造者がプログラムの書き込みとテストを一つの製造工程で行なえることである。書き込み済みチップをそのメーカーや代理店から購入する代わりに、製造者がシステムの製造ラインでチップへの書き込みができるので、生産期間の途中でもコードや設計の変更が可能となる。
- Milling the circuit ons the Modela モデラを使った回路の切削
- 1. Fixing laminates on the Modela 生基板をモデラに固定する
- まずは生基板を用意してください。紙フェノールのものがよいそうです。できるだけ反りの少ない、フラットなものを選ぶのがコツ。
- ▼ その基板に、ぴったりと両面テープを貼ってください。
![](https://lh4.googleusercontent.com/-c6q878tWyiY/USHoR47B4QI/AAAAAAAAD7w/fqRrr9T5lnM/s560/DSC00696.JPG)
- ▼ 2枚重ねます。上の一枚が実際につかうもので、下は下敷きです。
![](https://lh5.googleusercontent.com/-exGvxSVHHYI/USHoSAv_h7I/AAAAAAAAD74/wAp9QEHYN3M/s560/DSC00697.JPG)
- ▼ 下の生基盤にも両面テープを貼ってください。
![](https://lh3.googleusercontent.com/-YZJDBew4aog/USHoSnZRMjI/AAAAAAAAD8A/GPYGYQqpKvE/s560/DSC00698.JPG)
- ▼ モデラの台を外してください。
- #
- ▼ 方眼の左下に合うように、生基板をしっかりと固定してください。
ちなみに、用意した生基板の大きさがデータの大きさに対して余裕がある場合は、方眼の線をちょっとはみでるぐらいに貼った方がいいです。
モデラでは、方眼の左下をX軸、Y軸の(0, 0)の原点とします。また、このあとその原点位置でZ軸の原点設定をします。生基板の端はわずかに欠けていたりするので、ちょっとはみでているぐらいがいいのです。欠けているとZ軸の原点が取りづらくなるので。
- #
- 台を元に戻してください。
- 1/64inchのエンドミルをコレットに装着し、コレットをモデラに装着してください。
- #
- ▼ クリアカバーについているネジを外し、金属部品を取り外して、これ単体でモデラに挿します。
モデラはここにこの金属部品が挿さっているかどうかで、クリアカバーが置かれているかどうか判断しています。カバーがついていないと、安全のためにエンドミルが回転しません。ただここでは、Z軸原点の位置調整をするのにカバーが邪魔なため、このようにモデラをわざとだまします。
![](https://lh5.googleusercontent.com/-cEornsFmTfk/USHoTjsPS0I/AAAAAAAAD8Q/-69b9hjbPQE/s560/DSC00701.JPG)
- ▼ VIEWを押します。ヘッドがX軸とY軸方向に動き、エンドミルの先がX,Yの原点に移動します。
![](https://lh4.googleusercontent.com/-W4I_BmWn8Lo/USHoWWxbURI/AAAAAAAAD8s/Fsg6cPHVzdg/s560/DSC00705.JPG)
- DOWNを押して、エンドミルの先を生基板の表面まで近づけてください。長押しすると一気に進みます。行きすぎたらUPを押してエンドミルを上に上げてください。
- ▼ 本来ここで目視で合わせていくのですが、ここでもっとやりやすい方法を紹介します。エンドミルをコレットに接続させているイモネジを外します。すると、エンドミルの先がこつっと生基板の表面にぶつかります。これで確実にZ軸の原点が取れるわけです。
![](https://lh6.googleusercontent.com/-hDTUw9Whi9o/USHoV9KX2MI/AAAAAAAAD8o/wuoWT9RLGwY/s560/DSC00703.JPG)
![]()
![]()
- Z軸の原点が取れたら、イモネジを締め直してください。これで生基板の準備は完了です。続いてソフトウェアの設定に移ります。
- 2. Setting up your data on Dr.Engrave
- FabLab推奨のFab ModulesではMODELAをどうしても動かせず…。
UbuntuとMacでいろいろと試しましたが解決できませんでしたorz
Neilに相談したところUSBシリアルコネクタの問題かもしれないということなので、いま使っているRoland純正のUSBシリアルコネクタから、FabLab推奨のものに替えてみようと思っています。これは解決策が見出せたらまたこのサイトにでもまとめようと思います。
- そのため今回はDr.Engraveというソフトで代用しました
- Dr.Engraveとは、MODELA MDX 15/20#に付属しているCAMソフトです。
CAMソフトですが、多少の図形なら描くことができます。
ちなみに人がコンピュータを用いて図形を描くことができるのがCAD(Computer-Aided Design)ソフト、その図形を切削したりレーザーカットしたり3Dプリントしたりするために、工作機械を制御するのがCAM(Computer-Aided Machining)ソフトです。
- Fab ISPの回路図データ(hello.ISP.44.traces.png)をダウンロードしてください。
- ▼ Dr.Engraveを開きます。
- ▼ hello.ISP.44.traces.pngをインポートしてください。(ファイル>インポート)
- ▼ 回路図上で右クリック>塗りつぶし。ピッチを0.1mmに。(すでになっていたらokです。)パス(エンドミルが動く軌跡)を、0.1mm間隔で生成してくれます。
![](https://lh5.googleusercontent.com/-xsie69PWh8U/USR-QwEMcNI/AAAAAAAAEEI/OKQBFcfwBIY/s560/fabacademy13.bmp)
![](https://lh3.googleusercontent.com/-jcnyQ5BP0Qg/USR-srSelyI/AAAAAAAAEEg/PRxAzhFhUfo/s560/fabacademy14.bmp)
- ▼ ぼくはこれを最初0.2mmにして、失敗しました。間隔が広く、削れていないところができてしまったのです。
![](https://lh4.googleusercontent.com/-zOTFvFVn07g/USMQw7fnq2I/AAAAAAAAEC4/UCTe2a1XIPc/s560/photo.jpg)
- ▼ 白い部分は無視されてしまうので、周りを取り囲んでいる白い部分がなくなってしまっています。なので自分で周りに四角い線を描きます。
基板の切り抜きに使うエンドミルは1/32inch(約0.8mm)です。このエンドミルが四角の線の上を動くので、約0.4mmの削りしろがつきます。つまり、実際に削る四角は、データの四角よりも四辺それぞれ約0.4mm内側になるということです。四角が0.4mmよりも回路に近接している場合、エンドミルが回路の部分まで削ってしまいます。
![](#)
- ▼ 全体を左下に合わせてください。この左下が、先ほど生基板を合わせたモデラの方眼の左下(X軸Y軸の原点(0, 0))となります。
- ▼ いま描いた四角を選択し、図形>プロパティ。
![](https://lh5.googleusercontent.com/-31IpbwO9bqg/USR_EAoIyPI/AAAAAAAAEFI/Vbkh2OUklWw/s560/fabacademy3.bmp)
- ▼ 色を赤にしてください。
![](https://lh3.googleusercontent.com/-r5ltbtgA42c/USR-ugbUsdI/AAAAAAAAEEw/BQwxdsr5htY/s347/fabacademy4.bmp)
- ▼ 回路図上で右クリック>プロパティ。こちらの色が黒になっているか一応確認してください。
![](https://lh3.googleusercontent.com/-5QzAoctj3b0/USR_LUYkDzI/AAAAAAAAEFg/2_u0uMgcR_8/s560/fabacademy8.bmp)
- ▼ ファイル>印刷>プロパティ。
![](https://lh5.googleusercontent.com/-2Ic8otEJmtg/USR_IfKEHzI/AAAAAAAAEFY/h1OJbyOuZP4/s560/fabacademy5.bmp)
- ▼ 黒のタブを選びます。回路図の色が黒なので、この黒の設定が適用されます。
XY方向の速度(エンドミル縦方向・横方向に動く速度):2.0mm/s
Z方向の速度(エンドミルが基板に刺さるときの速度):2.0mm/s
Zアップ位置(削らないところを移動する際、エンドミルをどのぐらい(Z軸原点から?#)上に上げて移動させるか):0.50mm
Zダウン位置(どの深さまで切削するか):-0.10mm
Z切削ピッチ(深さ何ミリずつで切削していくか):0.10mm(この場合Zダウン位置とZ切削ピッチが同じですが、たとえばZダウン位置が5mmでZ切削ピッチが1mmの場合、エンドミルは同じパスを5周することになります。この設定は、切削する素材のかたさとエンドミルの太さ(強さ)によって変える必要があります。エンドミルに無理をさせすぎると折れてしまいます。)
問題があったら適宜設定を変えてください。特にZダウン位置は-0.10mmでは切削できない場合もあると思うので、その場合は設定を変えてください。
また、赤のタブを選択してツール>なしを選んでください。赤いタブが「*」になったことを確認してください。
![](https://lh3.googleusercontent.com/-fIW0OckFru4/USR-yac14JI/AAAAAAAAEE4/oasXtIxMBbk/s479/fabacademy6.bmp)
- OKを押して印刷プロパティのウィンドウを閉じます。ついに、印刷!モデラが動き出します。
- ▼ 回路の切削が終わったら、自分で描いた四角の部分で基板自体の切削をします。エンドミルを1/32inchのものに換えてください。軸径(コレットに接続する部分)も1/64inchより太くなると思うので、コレットも軸径が太いミル用に換えてください。
![](#)
- ▼ 次に、印刷>プロパティにおいて、今度は黒をなしに、赤を以下の設定にしてください(問題があれば適宜変更してください)。
![](https://lh5.googleusercontent.com/-Jj3L-j1T9xo/USR-2gTmNmI/AAAAAAAAEFA/H0tXVuGVx0M/s479/fabacademy7.bmp)
- 赤の設定(エンドミルがさっきより太くなるので、Z切削ピッチを0.10mmから0.20mmにしています。)
XY方向の速度(エンドミル縦方向・横方向に動く速度):2.0mm/s
Z方向の速度(エンドミルが基板に刺さるときの速度):2.0mm/s
Zアップ位置(削らないところを移動する際、エンドミルをどのぐらい(Z軸原点から?#)上に上げて移動させるか):0.50mm
Zダウン位置(どの深さまで切削するか):生基板の厚さ+(余裕を持って)0.5mm程度
Z切削ピッチ(深さ何ミリずつで切削していくか):0.20mm
- 印刷。基板の周囲を切削していきます。基板の切削はこれで完了です。
- Solderging the electronic parts on the board 電子部品のはんだづけ
- 以下の電子部品を準備してください。
#
- ▼
![](https://lh5.googleusercontent.com/-iwITtVhfRDY/USHofsHfWnI/AAAAAAAAD-w/SkktK0kC2j4/s560/DSC00720.JPG)
- ▼ How to make (almost) anythingの日本人受講生の澤田暖さんのウェブサイトに載っていたこの方法を参考にしました。
![](http://fab.cba.mit.edu/classes/MAS.863/people/dsawada/images/w3-solder-1.jpg)
![](http://fab.cba.mit.edu/classes/MAS.863/people/dsawada/images/w3-solder-2.jpg)
![](http://fab.cba.mit.edu/classes/MAS.863/people/dsawada/images/w3-solder-3.jpg)
- ▼ AVR ISPが緑に光っていたら成功しています。
![](https://lh5.googleusercontent.com/-WDHgL4oSqaI/USHooLDh9UI/AAAAAAAAEAk/lgql5bYDMZY/s560/DSC00736.JPG)
- ▼
![]()
![]()
- ▼
- ▼
- ▼
- ▼
- Writing the program on the board プログラムの書き込み
- After typing and returning make hex, I got the error message below.
net42-dhcp152:firmware hiroseyuichi$ make hex
avr-gcc -Wall -Os -DF_CPU=20000000 -Iusbdrv -I. -DDEBUG_LEVEL=0 -mmcu=attiny44 -c usbdrv/usbdrv.c -o usbdrv/usbdrv.o
In file included from usbdrv/usbdrv.c:12:0:
usbdrv/usbdrv.h:455:6: error: variable 'usbDescriptorDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.h:461:6: error: variable 'usbDescriptorConfiguration' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.h:467:6: error: variable 'usbDescriptorHidReport' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.h:473:6: error: variable 'usbDescriptorString0' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.h:479:5: error: variable 'usbDescriptorStringVendor' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.h:485:5: error: variable 'usbDescriptorStringDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.h:491:5: error: variable 'usbDescriptorStringSerialNumber' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.c:70:14: error: variable 'usbDescriptorString0' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.c:89:14: error: variable 'usbDescriptorStringDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.c:111:14: error: variable 'usbDescriptorDevice' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
usbdrv/usbdrv.c:142:14: error: variable 'usbDescriptorConfiguration' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
make: *** [usbdrv/usbdrv.o] Error 1
v So I opened the files firmware/usbdrv/usbdrv.h and firmware/usbdrv/usbdrv.c then type const before each data type name of the variables listed on the error message.
Then I made it. If you are using Mac, click the apple mark on the left top with pushing option key to open System Profiler. It is similar to Windows' Device Manager. Make sure FabISP is on the USB list in the hardware list. It means your Mac is recognizing your FabISP.
- Mistakes I made and how to solve them まちがえたところとどのように解決したか
![](https://lh4.googleusercontent.com/-zOTFvFVn07g/USMQw7fnq2I/AAAAAAAAEC4/UCTe2a1XIPc/s560/photo.jpg)
![]()
![](https://lh4.googleusercontent.com/-vosaV21m-bM/USHomZiviDI/AAAAAAAAEAA/12jL8paTg6s/s560/DSC00731.JPG)
![](https://lh4.googleusercontent.com/-K_tEWRKSdLM/USHolBbgC6I/AAAAAAAAD_o/xKH9hyy0V_M/s560/DSC00727.JPG)
![](https://lh6.googleusercontent.com/-wFVRK8b1NIM/USHolevpHDI/AAAAAAAAD_s/2k0m70N3UHE/s560/DSC00728.JPG)
![](https://lh5.googleusercontent.com/-W2bAHbo1tpk/USHol1qWrwI/AAAAAAAAD_0/It2j1VGFrGs/s560/DSC00729.JPG)
![]()
![]()
![]()