Home > PIC

PIC Archive

PICtoaster モジュール

  • 2007-06-22 (金)
  • PIC

PICtoasterをユニバーサル基板で組んでみた。

PICtoaster_componentside.jpgPICtoaster_solderside.jpg

ADM232の下に1個パスコンあり。あとPCBコネクタの上から4番目とPICの5番ピンを結ぶジャンパが陰になってて映ってない。

PICtoaster_componentside_.jpg

あーでもこれだと28pinものが焼けないorz

Program PICs by Sound

  • 2007-05-26 (土)
  • PIC

!音量注意!

Creative Commons License

この音波はRyoji Ikedaの新作ではない。思うところあって音声出力でPICをプログラムする実験をしてみた。そのためのサウンドファイルだ。
PICtoasterのファームを焼くにはこれまたPICライタが要る。そこで、最初のPICに書き込むためのブートストラップとしてこういうやり方もありかなと思って実験してみた次第。

ProgramPICsBySound.jpg

こういう感じで回路を組んでパソコンのヘッドフォン端子から音をとって書き込む。ローダを走らせるのではなく、音声信号を同期シリアルに変換し、空っぽのPICを直接焼く。左chがデータ、右chがクロックの役割をしている。

D1,D2は1N60などのゲルマかショットキがいいだろう。実験では手元に転がっていたサンヨーのSBなんとか(型番長くて失念…)を使った。コンデンサは全部パスコン用の0.1μなのでかなり適当な値。アペアンプ部分はコンパレータとして使っている(ただし正相)。ここはトランジスタでスイッチング回路を構成してもいい。

動作の検証のため、冒頭の短めなテストファイルをプログラムしてみる。
まずVppをONにし、続いてVddをONにする。その後サウンドファイルを再生。再生終了を見計らって、VppをOFF→VddをOFFで完了。書き込まれたプログラムはこれ(test00)で、GP0にLEDを繋ぐと点滅するはずだ。

ちなみにサウンドファイルは22050Hzサンプリングで275bps相当とした。作成はprocessingでwaveファイルを直接書き出し→QuicktimeでµLaw変換&aiff保存してある。

テストファイルで書き込み成功を確認した上でPICtoasterのファームを焼いてみた。こちらはちょっと長い。がMZ-2000ユーザだった自分には懐かしい長さだ。

PICtoaster 0.2 (2'55'')

Creative Commons License

何度かやってみて書き込み成功の時もあればDataROM領域にゴミが入っているときもあった。これは信号作成時のバグの可能性もある。一度動けばしめたもので、それを使って再度PICtoasterのファームを別のPICに焼いてしまえば安心だ。

結論としてmy first PICtoasterを作る様な場合に多少の利用価値はあるかもしれない。しかしながらJDM programmerなどのディスクリートPICライタに較べて優れたところは何もない。プラットフォームを選ばない─WinでもMacでもiPodでも?─という点を除けば。
以上、興味本位の実験報告おわり。

PICの書き込みに必要な電圧

  • 2007-05-20 (日)
  • PIC

PIC書き込み時にVppとして与える電圧についてのメモ
主立ったPICの書き込み電圧について各仕様書から抜き出してみた。

deviceVpp minVpp maxcurrent
16F87/88Vdd+3.513.5
16F627/628Vdd+3.513.5
16F870/1/2/3/4/6/7Vdd+3.513.5
12F629/675/16F630/676Vdd+3.513.5
16F818/819Vdd+3.513.5
18F2xxx/4xxxVdd+4.012.5
18FXX2/XX8
18F242/248/252/258/42/448/452/458
913.25
12F635/683/631/636/639/677
16F684/5/7/8/9/690
1013
16F627/628/6481013.5
16F88x (882/883/884/886/887)1012
16F83/84/84A1214
12F508/50912.513.5
10F200/2/4/612.513.5
10F220/212.513.5
16F7212.7513.25100mA??
16C6XX/7XX/9XX12.7513.25Iddp=20mA Ipp=50mA
12C508/509/67x12.7513.25Iddp=20mA Ipp=50mA

以上のように見事にバラバラとなっている。前述のようにフラッシュ品は電流については明記されていない。

PICtoasterに於ける書き込み電源の供給に関しては、Vpp min=10VのものまではADM232で倍電圧を作るやり方で(若干10Vを割るけど)なんとかOKかと思う。
MAX662などで12Vを作ってロードスイッチでON/OFFすれば、16F84あたりに対応できる。23Aなどの12V電池(100円くらいで入手可能)でも行けるはず。
15V電源+電圧可変レギュレータで13Vの電源を作れば、電気的には12C508/509含めすべてのPICに対応できるだろう。とはいえPICtoasterは基本的にはPIC入門用に安く+簡単に+どのプラットフォームでも動くPICプログラマと位置づけているのでOTPを焼く機会はあまり無いと思う。

ということで手軽さを重んじるならばADM232方式が良いだろう。ゲートが使えるので部品点数が少なく済むし、安上がりでいい。RS-232C用ドライバとしていろいろ互換品があるが、負側を動作させずに+10Vだけ作ることが出来るものと出来ないものがある。ADM232とADM3202では動作確認できたがSP232は使用できないので注意が必要である。これは内部のチャージポンプの方式が違うことに起因している。(ADM232はダブラ+インバータという構成なのに対し、SP232は違う方法っぽい)

PICtoaster 0.2

  • 2007-05-20 (日)
  • PIC

PICtoasterのリビジョン0.2です。

主な変更点
・PIC16F88に対応
・Vppのコントロール信号(GP5)をアクティブHiに変更
・ログをlog.txtに保存

Vppの制御が逆相になったので回路に若干の修正が必要です。また、PICに焼いておくファームウェアとPC側のソフトを両方アップデートする必要があります。(片方が前のバージョンだと正常動作しない)

本体の回路図
PICtoaster02_schematic_01.jpg

書き込み電源の回路図
PICtoaster02_schematic_02.jpg

書き込み電源供給方法としてADM232を使用して約10Vを得るやり方(図上)の他に、外部電源(12V~13V)を別に用意して、ロードスイッチで制御する方法もあります(図下の2例)。PICの種類によっては外部電源を使う必要があるのでその場合こちらの回路を使用します。VppをアクティブHiでの制御に変更したのはこれらの回路を容易に差し替え可能にするためです。
今回ブレッドボードで組んだのはADM232の方式です。書き込み電圧については別のエントリーで詳しく述べたいと思います。

なお、MacでPICtoasterを使用するにはあらかじめシリアルの設定をしておく必要があります。それにはprocessingをインストールして、その中にあるシリアルポートの設定コマンドを実行するのがもっとも近道です。processing シリアルの設定メモを参照してください。

ブレッドボードの配線。PIC12F683プログラム時
PICtoaster02_breadboard_01.jpg

PIC16F88プログラム時
PICtoaster02_breadboard_02.jpg


PICtoaster firmware 0.2(ライタのPIC用)
PICtoaster application software 0.2(Mac/Win/Linux側のソフト)
built with processing 0124

CC-GNU GPL


このソフトウェアはCC-GNU GPLライセンスによって公開されています.

PICの書き込みに必要な電流

  • 2007-05-03 (木)
  • PIC

PICtoasterの電源まわりについてのメモ

PIC12F6XX/16F6XX Memory Programming Specification(DS41204G)には
In the PIC12F6XX/16F6XX, the programming high voltage is internally generated. To activate the Program/Verify mode, high voltage needs to be applied to MCLR input. Since the MCLR is used for a level source, MCLR does not draw any significant current.

(PIC12F6XX/16F6XXは書き込み用の高い電圧は内部で生成してる。書き込みモードにするにはMCLRピンに高い電圧をかける必要がある。MCLRは電圧源として使うのでさほど電流は流れない)

と書いてありその値は明かしてくれない。それはまあ良いとして、書き込み時にVddピンに流れる最大電流も明記されていない。謎だ。

他の資料を見てみる。In-Circuit Serial Programming (ICSPTM) Guide (DS30277D)によると例えばPIC12C67XはMCLRに50mA(Ipp)、Vddに20mA(Iddp)が最大となっていて結構流れる。こいつはEPROMタイプなのでFLASHのPICとは必要な電流は当然違ってくるのだろう。ではFLASHのPICはどのくらい電流が必要なのだろう?

スペックシートがどうにも見当たらないので、とりあえずPICライターにPICをのせてダミーのデータを焼いてMCLRとVddに流れる電流を実測してみた。使ったライターはIPI社のPDE-XP。
deviceMCLR pinVdd pin
PIC16F8840µA2mA
PIC12F683200µA600µA
結果はこういった具合。それぞれだいたいの最大値。テスターで適当に計っただけなのでこのくらいのオーダだという目安にすぎない。瞬間的に大電流が流れている可能性もあるかと思ったけど、うっすらと抵抗をはさんでオシロで見る限りはそんな風情はなかった。適当な実験であれですが。

この間の実験ではターゲットへのVddの供給は直接PICのポートの出力を使ったし、ADM232から取り出せる電流もそんなに大きくない。したがってEPROMに対応していると名言は出来そうにないことが分かった。FLASHなら問題なさそう。

PICtoasterのプロトコル メモ

  • 2007-05-02 (水)
  • PIC

PC←→デバイスは19200bps/8/1/1/nの半二重シリアル通信を行う

PC→デバイス

+ccdddd       データ書き出しシーケンス
-cc           データ読み込みシーケンス
xcc           データなしシーケンス
*tt           ディレイ
@pv           ポート出力値指定

----------------------------------------------------------

デバイス→PC

+             すべてのコマンドを正常終了
+dddd         すべてのコマンドで正常終了+データ読み出しの結果
+dddd:dddd... 読み出しが複数ある場合
-             いずれかのコマンドでエラー

----------------------------------------------------------

cc            コマンド(00~3f)
dddd          書き込みデータ(0000~3fff)
tt            ミリ秒(00~ff)
p             ポート(0,1,4,5)
v             出力値(0,1)

PIC16,12ファミリのプログラミングシーケンスは大きく分けて3つある
・6bitコマンドに続いて16bitのデータを書き込む
・6bitコマンドに続いて16bitのデータを読み出す
・6bitコマンドのみ
(ここでいう16bitとはスタート/ストップビットを含めたものでデータとしては実質14bit)
そこで、それぞれのシーケンスを+/-/xで指定してそれに続けて6bitコマンドを送出することにした。

+シーケンスの場合はさらに書き込みデータも送出する。

例)+0234ab    現在のアドレスに0x34abを書き込む(PIC12F683の場合)

*キャラクタはttミリ秒のディレイを得るために使う。これは仕様書に書いてある通りに設定すればOK。
@はポートの出力を直接指定する。GP0,1,4,5のみ指定可能。

各コマンドは連続して送信することができ、LFで終端する。

例)x08*03-04x06\n    メモリへの書き込み開始、3ミリ秒待つ、データ読み出し、アドレスを++(同)

デバイスが一度に受信できるのはLFを含めて82文字。送信できるのも同じ。

デバイスのポートの初期値は

GP0, GP1, GP4 = 0
GP5 = 1

GP5はインバータを通してVppを供給する前提でアクティブLowにしてある。
ここの動作は出力を0/Hi-Zの疑似オープンドレインに変更するかもしれない。

それからPIC18シリーズはコマンドが4ビットのようなので、これも今後対応する。

PICtoaster 0.1

  • 2007-04-29 (日)
  • PIC

PICプログラマ(いわゆるPICライタ)を作りました。
パソコン上のアプリはprocessingで書いたのでWinでもMacでも使えます。

PICtoaster_screenshot.png

こんなかんじ。

PICtoaster_breadboard.jpg

…これが書き込み機本体

真ん中のPIC12F683がPCからの指令を受けてターゲット(手前のPIC12F683)にデータを書き込む。
シリアルポートがあればどのプラットフォームでも使えます。

PICtoaster_schematic_01.jpg

…回路図

PICの書き込みにはターゲットにもよるけど10V~13Vくらいの電圧をVppにかける必要があります。
ここではUSBシリアルからとった5V電源をADM232(シリアルポート用の電圧変換IC)で10Vにしています。

PICtoaster_schematic_02.jpg

はい。負電圧はいらないのでC2+/C2-間のコンデンサを付けていない。こういう事していいのかどうかはちょっとわからん。
計測するとVppには10Vにちょっと足りないので不安がありますが、とりあえず書けてます。

使い方はアプリを立ち上げて書き込みたいHEXファイルのパスを入力するか、それもめんどうだろうからHEXファイルのアイコンをドラァグ&ドロップして、toastボタンを押す。portタブで使用するシリアルポートを選んどいてください。フューズの設定画面はないので、ソース上にて指定してください。
現在対応しているのはPIC12F683だけですが、processing側から送るコマンド次第でどのPICでも書けると思われます。
次は自分がよく使うPIC16F88と877あたりに対応させたい。

以下、PICの方のファームのソース&HEX、パソコン側のアプリとソースです。
Mac、Win、Linuxそれぞれのバイナリが入ってますが、Linux版は動作確認していません。
PICはCCSCで書いてありますいまのところ。

PICtoaster firmware 0.1
PICtoaster application software 0.1

CC-GNU GPL


このソフトウェアはCC-GNU GPLライセンスによって公開されています.

Home > PIC

Search
Feeds

Page Top