先日ArduinoをPICライター代わりにした事を書いた。その際、書込みモードに設定するために外部電源から12Vを印加したが、今回は5Vのみで書き込んでみた。
まず5V書込み(Low Voltage ICSP)を実行するにはコンフィグビットのLVPを’1’にセットしておく必要がある。 PIC18F2550の工場出荷時設定はLVP=’1’なので問題ないが、ブートローダを書込むと’0’に変更してしまうので一旦ブートローダを書込むと5Vモードでは変更できなくなってしまう(LVPビットは12Vモードでなければ変更できないのだ)。
また、LVP=’1’の場合、通常動作時にRB5端子(PRMと兼用)をGPIOとして使用できなくなる。この端子はLにしておかなければ正常動作しないので、OpenStickとして動作させる場合IN16が使用不可となる(デジタル入力端子が一つ減る)。
これらの制約はあるが、12V印加が不要なのは便利かもしれない。
実験開始
まず書込むべきブートローダファイルをLVP対応に変更しなければならない。 具体的には’20M-18f2550.hex’の最後から8行目あたりにある次の記述「:010006008178」を「:010006008574」に変更し、’20M-18f2550LVP.hex’というファイル名で保存した。
次に回路を変更する。12V印加回路は取り除き、Arduinoの10番ピンをPGM、11番ピンをMCLRに接続した。
Arduinoのスケッチを5Vモード仕様に変更した。
あとは12Vを印加しない事以外、前回と同じ手順で(先程つくったLVP版)ブートローダの書き込みを行なった。
なお先程書いた通りPIC18F2550をLVP=’1’状態で使用する場合はPGM端子(RB5)をLに接続する必要があるので、OpenStickの回路を変更してGNDと接続しなければならない。
あとはいつも通り、OpenStick基板上のModeスイッチを押しながらリセットする事でブートローダが起動し、MyBootOSツールでOpenStickファームウェアを0x800番地から書込み、OpenStickConfigツールで作成した定義ファイルを0x4000番地から書込むとジョイスティックコントローラとして動作した。
この方法での弱点はRB5をGPIOとして使用できなくなる事であるが、そこまでデジタル入力を使う事は少なく、むしろOpenStick基板を変更するのが面倒な事が一番問題かもしれない。
また上にも書いた通り一旦通常のブートローダを書込むとLVP=’0′(5Vモード使用不可)になり5Vモードでは消去すらできず、12Vモードでしか変更できないので注意が必要である(但しそもそも5VモードではLVPを変更できないので最初から5Vモードだけを使うなら間違って使用不可にしてしまう心配はない)。
このあたりの管理を間違うとハマるかもしれない。
・Arduinoのスケッチ(5V書込み版)
・ブートローダ(LVP=’1’版)
ピンバック: ArduinoでPICマイコンに書込む~OpenStickLite(PIC18F14K50)編~ | ほいほい堂blog