番外編 PICの世界 

PIC24FJ64
はじめに 07.12.15
環境づくり 07.12.15
LED点滅 07.12.15
つぶやき コンピュータフォルダの整理 08.06.29




PIC18F14K50





PIC18F2550
picmon  09.09.08















はじめに
 Webのみなさんに刺激されてPICの実験をはじめました。PIC24FJ64GA002の次の特長が動機になっています。
1.秋月で購入できて価格的に使いやすい。
2.ROMが64kBRAMが8kBと大きく、十分余裕がある。
3.DIP28ピンでブレッドボードで使いやすい。
4.IDEとCコンパイラが無料で使える。とくにCコンパイラが使えるのは魅力である。
5.ChaNさんが手持ちのAVRライタが使える簡単なアダプタとライティングソフトを開発してくれた。
6.16ビットの処理ができる。
これ以外にも多くの利点があるようです。初期投資が@\450.-のデバイスだけではじめられるのはハードルを低くしています。

hexファイルの書き込みはAVRとまったくといっていいほど同じです。C言語は当然の事ながら基礎は同じですから慣れていけると思います。あと、IDEとデバイス固有の性質を理解するのが必要なところです。
物忘れと競争ですが例によってぼつぼつと行きましょう。




環境づくり
IDE(MPLAB IDE)のインストール
Microchip社のページのDesignグループからMPLAB IDEのページへ行きます。下の方にダウンロードのファイルがありますから、名前を登録してから、「MPLAB IDE v8.00 Full Release Zipped Installation」をダウンロードしました。

zipファイルを解凍すると7種のファイルができますが、そのうちの「Install_MPLAB_v8.exe」を実行するとインストールされます。
指示に従ってデフォルトの場所にインストールをしました。デスクトップにショートカットができますが、ダブルクリックをするとIDEが立ち上がった直後に終了されてしまいました。Webで訪ねると「TMPファイルが書かれるディレクトリパスに2バイト文字があるとエラーのためにそのようになる」とのことでしたが、私の場合は2バイト文字を使っていません。しかし、documents and settings ディレクトリにユーザーディレクトリがありますから、この空白文字が原因ではないかと考えて、C:\WINDOWS\Tempの中にさらにtempディレクトリを作ってそれに変更しました。
余談ですが、TMPのコピーを保存しようにも時間が経てばどこに保存したのか忘れてしまいます。そこでTMPをoldTMPと名前を変えて別物としておき、新たにTMPを作りました。必要が生じたときは名前を戻すだけでokです。

これでダブルクリックでIDEが立ち上がりますが、私のPCの場合には30秒ほどかかります。何かにつけて重たい感じです(買い換えろ?)。

Cコンパイラのインストール
Microchip社のソフトウエアページから「MPLAB C30 v3.02 Student Edition 」をダウンロードしました。MPLAB_C30_v3_02-StudentEdition.exeがそのまま届きましたから指示通りインストールしています。StudentEditionで無料ですから2ヶ月経つと最適化機能が使えなくなるそうですが必要とするほどのプログラムを作ることは無いと思います。

ライタの準備
ChaNさんが開発されたシステムを準備しました。
ハードウエアCOMポート接続のSPIブリッジライタを使います。私の場合は90S2313でなくtiny2313を使っています。これにPIC用アダプタを付けました。ChaNさんのサイト「AVRライタ集」の「PICライタとして使う」で発表されているものです。ショットキダイオードはVFが低いもの( <0.3V )と指定されていますので秋月で購入したTOSHIBAのHN2S01FU(VF=0.23V)を使いました。3回路入っていますが小さいのでまとめてハンダ付けしています。
ソフトウエアは同じ場所にある「PIC24用書き込みプログラム」をダウンロードしました。zipを解凍して得られる「ser2spi_r3.hex」を上記ライタに書き込みました。
また、PC用書き込みソフトのpic24spはAVRのときと同様に -pb1 を書き込んだiniファイルとともに一つのフォルダに置き、使用を簡単にしています。なお、オプションは大文字となっていますが小文字でも正常に働きます。



LED点滅
西も東もわからない世界に入りましたから、ここは先人の教えに従うことにします。すんさんが丁寧な手ほどきを書いてくれていますから勉強させていただきました。
すんさんのページをPIC24Fの紹介と実験→LEDピカピカテスト と進みます。回路図にあるとおりにブレッドボードに組み立てハードを完成させます(大袈裟?)。ライタを接続して、電源を確認して(3.3と5V、間違うと壊れる)、DOSプロンプトで pic24sp -pb1 -R を実行しました。−−−途中の紆余曲折は省略して−−−チップの属性が表示されてときはほっとしました。

次はソフトです。同じページの MPLAB IDEのProject Wizard にしたがってコンパイルを試みます。途中に若干わからないところがありましたが試行錯誤で通過して、さてコンパイルボタンを押すとエラーが帰ってきました。どうやらdelay.sが読み込めていない様なので、main.cと同じ場所に取り込みますと無事コンパイルが終了しました。ここに書くほどには簡単では無かったのですが、解説をトレースする内に少しずつわかってきます。あらためてすんさんのIDEのProject Wizardは素晴らしい教科書だと思いました。力作に感謝します。
右も左もわからないときは、しっかり先輩に付いてゆくこと−−−これが一番です。

 左の写真は実験用のブレッドボードです。左の端の電源端子は5Vを意図していて、3端子レギュレータで3.3Vに落としています。
慌て者で電源の逆接続をするものですから、逆向きの整流用ダイオードを入れてあります。5Vを逆接属しても3端子の入力には-0.7Vしかかからないので壊れることはないと思います。また、短絡対策として100mAのポリスイッチを入れてあります。

プログラム用端子は裏側に6P端子を用意して、PICの書込端子と連結しています。




つぶやき:コンピュータフォルダの整理
今日は2008年6月29日です。pic24をさわってから半年経っています。久しぶりにさわってみようとしましたが、ファイルの場所はもちろん、どこをどうすれば良いのか見当すらつかなくなっています。頭脳の経年変化もありますが、難儀なものです。それを考えに入れてページは入念に書くことにしていますがやはり自分でさえ読めなくなっています。そこで、

インストール済みのIDEはそのままにして、pic専用のデータファイルフォルダを F:\PIC\ として新設して、この中に MPLAB.exe へのショートカット と F:\PIC\PROG のプログラムフォルダをおくことにしました。 F:\PIC\ のショートカットはデスクトップにおいています。

これから作るプログラムはプログラム名を付けたフォルダを\PROGにおくことにします。また、p24FJ64GA002.gld も使いやすいように\PROGにコピーしました。
今後の作業手順は、
@デスクトップからF:\PIC\を呼び出す。
A\PROGに新しいプログラムフォルダを作る。
BIDEを起動してプログラムを作り、makeボタンでmakeする。
CデスクトップからC:\a10_11フォルダを開く。この中に、avrsp(x)のライタプログラムと.iniファイルがおかれている。
Dコマンドプロンプトを起動して、pic24sp.exe と プログラム.hex をD&Dして書き込む。
ということになります。(自分の備忘録です)

すんさんの「LEDピカピカテスト」をおさらいしました。
1.プログラム main.c と delay.s を同名で led01 フォルダに作りました。
2.IDE MPLAB を立ち上げます。
3.Project → Project Wizard → device=PIC24FJ64GA002 → Microchip C30 toolsuite → MPLAB C30\bin\pic30-gcc.exe を選びます。
4.Create New Project File = led01フォルダをあけて led01.mcp を指定して保存します。
5.Step Four でプログラムファイルの追加を聞かれますから、main.cとdelay.sを add します。
これでウイザードは完了します。
6.Viewメニューで Project と Output にチェックを入れて表示させます。
 すんさんの説明には Linker Script に p24FJ64GA002.gld がありましたが、PROG フォルダにあれば良いようです。
7.Makeボタンでコンパイルします。
8.hexファイルができていますから、コマンドプロンプトから書き込みます。

フォルダの整理とLEDピカピカのおさらいができました。(アー シンド!)





PIC18F14K50

 私のページは製作日記・思考日記のようなもので時間を追って記録してゆくものなのですが、この項目に関しては実験をはじめた頃に比べるとirukaさんのソフトが大幅に進歩しています。したがって過去の記録が「過去の出来事」の意味しか持たなくなります。条件が変わったからといって過去の日記を訂正することはできません。変更の記録を追加するか、そうでなければ削除する以外に方法がありません。この項目を書き始めたのは半年ほど前ですが、環境の変化から削除をして、新たに書くことにしました。(2010.04.07)

 irukaさんの研究はPIC18F14K50のUSB機能をうまく利用して、このデバイスだけでPIC/AVRライタ、USB-シリアル変換機能、USB-IOの3種の機能を実現できるというものです。
その上に、このPICはHIDaspxライタで書くことができるのでPIC環境をまったく持たなくても実験できます。これらの点が興味を持ったところです。

最初の実験回路(PIC18F14K50)
ブレッドボードに電源回路、プログラム書込回路(HIDaspxと接続)、周辺RCを実装してプログラム書込テストをしたところベリファイに成功したので基本回路を組み立てました。当初、プログラムのトラブルでLVPがoffになって書き込めなくなりましたが、006P電池で回復の方法がわかりましたので図の中に付け加えています。

左はPIC18F14K50に書き込むだけのボードで、右はUSB-IOの実験picmon.exeも使えるものです。



図の中に書きましたが、このデバイスはUSBの D+、D- 端子の最大入力電圧が3.6Vになっているので、プログラム書込時は 3.3V で運用することになります。プログラム時以外はこれらの端子にUSB信号以外の電圧はかかりませんからバスパワーの5Vで良いことになります。
万能基板に組み立てたものに、ブートローダプログラムとライタ/IOモニタプログラムを書き込むと、PCからIO端子のHL変更ができることをテスタで確認できました。

関係ソフトウエア(PIC18F14K50)
irukaさんが作られたソフトウエアのzipファイルの所在と内容を示します。(2010.04.07現在。名称、場所ともに変わる可能性が大きいです。(リンクを探すのに苦労しています)
picspx-2009-0904-classic.zip
   PICspx.exe --- HIDaspxライタを使ってPIC18F14K50に書き込むソフトです。 (avrdude-GUIのpicspx.exeとは別物です)
pic18boot-2010-0406.zip
   loader-18F14K50.hex --- ブートローダです。
   picboot.exe --- ブートローダ制御ソフトです。
   picmon.exe --- モニタソフトです。picboo制御下、picmon制御下ともに使えます。
pic18spx-2010-0406.zip
   picmon-18F14K50.hex --- PIC/AVRライタとUSB-IOモニタファームです。
   picspx-gcc.exe --- PIC/AVRライタを使用するソフトです。(avrdude-GUIのpicspx.exeはこれの拡張版です)
   picspx-gcc.ini --- 上記の設定ファイルです。同じフォルダに置きます。
   picwrite.exe --- PIC18書込用ライティングソフトです。
usbserial.zip
   cdc-18F14K50.hex --- USB-シリアル変換用ファームです。


USB-シリアル変換器(PIC18F14K50)
最初に作った回路です。ブートローダとアプリケーションの関係がわかりにくかったときに、「serial.hex ..... 出来上がったHEXです. そのまま焼いて使えます.」と書いてありましたので実験しました。USB-シリアルの変換は専用ICを使えば良いのですが、専用ICより安く配線も楽ですから実用になれば嬉しいことです。 irukaさんのページはここです。
最初の実験段階はブレッドボードで、原作どおりの回路にしたのですが、万能基板で組み立てるときに変更しています。
水晶発振回路の22pF*2は、省略の報告を時々見ますので確認のために省いてみました。結果的には動いています。なお、12MHzのセラロックにも変えてみましたが通信はできませんでした。
LEDはなくても支障はないのですが、パイロットランプ代わりに1つだけ残しています。ブートローダは組み込まないので関係のスイッチは付けていません。

ライタはHIDaspxだけしかありませんので、上記ファイルの、cdc-18F14K50.hex を PICspx.exe を使って書き込みます。
>PICspx.exe cdc-18F14K50.hex
*Device:PIC18F14K50  DEV_ID:0x4766
Erase ...
Writing   ... 1be0
Verify Ok.... 1be0
Writing Fuse ...
WARNING: config LVP=OFF -> ON .
CONFIG: 00 32 21 1e 00 00 05 00 03 c0 03 e0 03 40

>
書き込みに15分、ベリファイが終了するまでには計40分かかりました。このPIC18F14K50で作ったライタを使いますと5秒で終わります。

teratermと実験用ターゲットボードを使うと19200bpsの実験装置ですが期待通りの結果が得られました。一般の変換器として使えるのではないかと思います。

インストールについては、2口のハブにセットしますとハブの口が変わるとインストールが再びされて異なったCOM番号で登録されました。シリアル番号がないUSB機器は接続したコネクタ毎にインストールされると聞いたことがありますが、その例になるのでしょうか。




bootloaderの実験(PIC18F14K50)  2010.04.07
HIDaspxによるPIC18F14K50のプログラム書き込みは遅いのですが、irukaさんのシステムはbootloaderがあって、この2kBのloaderを書き込んでおけばUSBから直接アプリケーションがライタ無しに、かつ、高速に読み込めるとのことです。そこでこのbootloaderの実験をしました。
実験回路と装置は次のとおりです。




irukaさんの原典どおりRC0とRC1にLEDをつけ、リセットスイッチをbootスイッチを付加しました。なお、上の写真は古いファームの時のものです。現在のものはbootloader modeでRC1のLEDは点灯しません。

bootloaderの書き込み
上記の各種ファイルがあるフォルダでコマンドプロンプトを開き、次の操作をしました。 なお、煩雑さを避けるためにフォルダ名は編集で削除しています。
>PICspx.exe -r                  // デバイスの確認
*Device:PIC18F14K50  DEV_ID:0x4766

>PICspx.exe loader-18F14K50.hex                   // ブートローダの書き込み 完了まで約13分
*Device:PIC18F14K50  DEV_ID:0x4766
Erase ...
Writing   ... 0800
Verify Ok.... 0800
Writing Fuse ...
WARNING: config LVP=OFF -> ON .
CONFIG: 00 32 2a 1e 00 88 05 00 03 c0 03 e0 03 40
------------------------------------------------------ここで補助電源を切り、USB接続に変更。RC0のLEDが点滅する。
>picboot.exe -E            // 書き込みに続いてpicbootを起動し、
TARGET DEV_ID=14 VER=1.1(Bootloader)   // アプリケーションがあれば消去する。
Erase ...

>picmon.exe                            // bootloaderでpicmonを起動するとモニタできる。
TARGET DEV_ID=14 VER=1.1(Bootloader)
PIC> p                                 // ポート情報を表示せよ。
   PORTA(f80) 00 0000_0000
   PORTB(f81) 00 0000_0000
   PORTC(f82) 04 0000_0100
    LATA(f89) 32 0011_0010
    LATB(f8a) b0 1011_0000
    LATC(f8b) 60 0110_0000
   TRISA(f92) 3b 0011_1011
   TRISB(f93) f0 1111_0000
   TRISC(f94) fc 1111_1100
PIC> q                                 // picmon終了
Bye.
bootloader書き込みについてベリファイが成功していること、アプリ領域消去にエラーなく、picmonが実行されているのでbootloaderは正しく書き込まれたと判断し、接続をUSBに変えて、picmonをテストしました。


bootloaderによるアプリケーションの書き込み
AVR/PICプログラマ機能とPICモニタ機能を持つ picmon-18F14K50.hex をUSBから書き込みます。
>picboot.exe picmon-18F14K50.hex            // アプリケーションの書き込み
TARGET DEV_ID=14 VER=1.1(Bootloader)
Erase ...
Writing ... 2820
Verify Ok.... 2820                           // 数秒で書き込めます
-------------------------------------------// 書き込めたので、AVRターゲットボードをつないで
                        デバイス情報を読んでみる
>picspx-gcc.exe -r                           // AVRライタ起動
TARGET DEV_ID=14 VER=1.1
Detected device is ATmega168P.
Device Signature  = 1E-94-0B
Flash Memory Size = 16384 bytes
Flash Memory Page = 128 bytes x 128 pages
EEPROM Size       = 512 bytes

>
ブートローダによる読み込みは高速です。感覚的には瞬間に終わりました。
アプリケーションの更新やアプリケーションの変更がライタ無しに行え、かつ高速であるのが特長です。
なお、リセットするとアプリケーションに制御が移ります。bootスイッチを押した状態で(RC2=L)リセットするとbootloaderに制御が移ります。 bootloaderではRC0のLEDが点滅し、picmon-18F14K50.hex実行中はLEDが点灯しません。

bootloaderの書き込みは所定の番地からのものだけだそうです。a,b2つのアプリを書き込んであるときにaを更新してもbは影響を受けないそうです。
また、-Eオプションでは全アプリを消去します。bootloader自身は消去しません。



ライタとしての機能(PIC18F14K50)  2010.04.07
この装置の(私にとっての)最大の機能はAVRライタです。
ライタの追加配線は次のとおりです。
AVRライタのコネクタ  この装置のIO端子
1 MISO13 BP4
2 VccNC
3 SCK11 PB6
4 MOSI 9 RC7
5 RESET08 RC6
6 GND GND

コマンドプロンプトでの使い方はhidspxとほとんど同じです。hidspxに対してpicspx-gcc.exeが使われます。
次の例は、@ターゲットボードのデバイス情報読み取り、Aフラッシュメモリの読み出し、Bフラッシュメモリの書き込みとベリファイ をしたものです。
>picspx-gcc.exe -r                               // @ターゲットボードのデバイス情報読み取り
TARGET DEV_ID=14 VER=1.1
Detected device is ATmega168P.
Device Signature  = 1E-94-0B
Flash Memory Size = 16384 bytes
Flash Memory Page = 128 bytes x 128 pages
EEPROM Size       = 512 bytes

>picspx-gcc.exe -rp                               // Aフラッシュメモリの読み出し
TARGET DEV_ID=14 VER=1.1
Detected device is ATmega168P.
Flash Memory...
Reading   [##################################################]  16384,   1.80s
Passed.
:200000000C9434000C9451000C9451000C9451000C9451000C9451000C9451000C94510075
:200020000C9451000C9451000C9451000C9453000C9451000C9451000C9451000C94510036
:200040000C9451000C9451000C9451000C9451000C9451000C9451000C9451000C94510018
 -------------- 中略 -----------------------
:2017C000881F991F1A9469F760957095809590959B01AC01BD01CF010895F894FFCF632D0A
:2017E00028231E19140F0A4B2D28231E19140F0A01000000FFFFFFFFFFFFFFFFFFFFFFFF1E
:00000001FF
Total read/write size = 16384 B / 2.09 s (7.64 kB/s)

>picspx-gcc.exe foo.hex                           // Bフラッシュメモリの書き込みとベリファイ
TARGET DEV_ID=14 VER=1.1
Detected device is ATmega168P.
Erase Flash memory.
Flash memory...
Writing   [##################################################]   6132,   0.75s
Verifying [##################################################]   6132,   0.69s
Passed.
Total read/write size = 12264 B / 1.73 s (6.91 kB/s)

>
HUBを使わず、速度は .iniファイルで指定した -d1 です。このボードは12MHzですから -d0 にするともう少し速くなります。
HUBを使用すると読み出しで 3 kB/s 程度と遅くなります。senshuさんのPCでは逆に速くなると聞いていますが、私のPCでは遅くなっています。
HUBを使わなければ HIDaspx の2倍強の高速になって、使い勝手は素晴らしい感じです。HUBを使うと逆にHIDaspxの方が速い結果になります。
上の結果のようにmega168に6kBのプログラムを書き込むと瞬間的に終わってしまう感じになります。cp2102+tiny2313のChaNさんのライタにほぼ近い高速になっています。この手間と材料費でできるライタとして申し分ありません。


PICライタとして使う
ハードウエアとファームウエアにまったく変更を加えずに PIC18 と PIC24の一部 に適用できるそうです。
試しに PIC18F14K50 と PIC18F2550 に書き込んで見ましたが高速で書き込めます。上に書いたようにHIDaspxでPIC18F14K50にserial変換書き込みに40分ほどかかっていますが、これを使うと数秒で終わります。これを手にしましたから、HIDaspxが遅いことは追求しないことにしました。今後はHIDaspxを使うことはまずないからです。しかし、HIDaspxがあるからこそこれを作れたわけですから『感謝!』には変わりがありません。
書き込みソフトは picwrite.exe を使います。
HIDaspx用に準備したターゲットPICの書き込みコネクタはそのままで書き込むことができます。



PIC18F14K50の項おわり*********************











picmon2550 (18F2550)
 2009.09の記述です。その後ソフトウエアが変更されていると思いますので参考にとどめてください。
 ブートローダーを組み込んで、そこから何ができるかは理解していませんが、18F14K50が成功したのでpic18F2550にも挑戦しました。
ブレッドボードに組み立てましたが、不勉強の身にハード・ソフトともに紆余曲折がありました。とりあえず回路図を挙げます。



picmonのポートデータを読むのがとりあえずの目的ですから回路は最小限となっています。
注意する点を挙げますと、
 1 水晶は20MHzのものを使います。(20MHz水晶発振を逓倍して48MHzで動くように設定されていたと思います)
 2 電源は20MHz48MHzで使うために5Vとします。3.3Vでは無理です。4.2V以上必要です。
 3 VUSB端子(14番)は3.3Vレギュレータ端子ですから0.1〜0.33μFのコンデンサだけを接続します。
 4 MCLR端子(1番)は10kでプルアップします。これに気づくまで不安定な状態に悩みました。
 5 リセットスイッチを付けましたが、これは無くても実験できます。
 6 PGM端子(26番)は10kでプルダウンしておきます。LVP書き込みでは必要です。
 7 RC0に抵抗付きLEDを接続します。正常動作時には点滅します。
 8 書き込み用のHIDaspxとpicmon動作用のUSBケーブルは同時には接続しないことにしています。
   (18F14K50と違って共用端子が無いためにかまわないかもしれません)
といったところです。

次にプログラムのダウンロードです。が、これには注意が必要です。
bootloader-0000.hex(ファームウエア) を PICspx.exe で18F2550に書き込んで、picmon.exe で通信制御するのですが、このとき、 HIDaspxを動かすPICspx.exeは上記の18F14K50のものと同じなのですが、他の2つは同じ名前にもかかわらず全くの別物なのです。
irukaさんのHIDmon-2550のページにあるhidmon-0814.zipにあるものが必要です。(14K50のものでは動きません。念のため。)
この中で使うものは bootloader-0000.hex picmon.exe の2つと書き込みソフトPICspx.exeです。これらを2550フォルダにまとめておくと混乱が少ないかと思います。

ブートローダーの書き込みと実行:HIDaspxを使ってPICspx.exeソフトでbootloader-0000.hexを書き込みます。私の場合はverifyを含めて5分ほどかかっています。ライタを外すとLEDが点滅するはずです。
そのままUSBケーブルをつないでコマンドプロンプトからpicmon.exeを実行すると正しく認識されてプロンプトが PIC> になります。pコマンドや、p*コマンドでメモリが表示されると成功です。

実は私の場合はここで問題が出ました。連続使用では良いのですが、ボードの電源スイッチを切って再投入するとUSBが認識しなくなるのです。電源の立ち上がり立ち下がりが問題かも知れないと気づき(時間がかかっています)、ボードの入り口のバナナクリップでon,offするとエラーは起こりません。また、エラーが起こったものはverifyでプログラムが書き換えられていることがわかりました。
掲示板でkugaさんからブラウンリセットを設定すれば良い旨のアドバイスをいただき、それを元にsenshuさんが修正したブートローダーbootloader-2550-BROV.hexを作ってくださいました。

MCLRのプルアップブラウンリセット対策ローダーbootloader-2550-BROV.hexまでには時間がかかりましたがこれで安定したpicmonを得ることができました(多謝)。
2550フォルダにbootloader-2550-BROV.hexを追加して使っています。

                         ------------ picmon2550が動くまでの顛末でした -------------






~~~~~~~~~~~~~~~~

TOPページへもどる


inserted by FC2 system