名張市つつじが丘おもちゃ病院

三重県名張市つつじが丘でおもちゃの病院を開院しています。年中無休で修理は無料、部品代のみ実費です。おもちゃの修理依頼は tutuji@cb4.so-net.ne.jp へメールにてご連絡下さい。なお、宅配便での受け付けは行っておりません。このブログにはおもちゃ等の修理事例やツール製作などを載せていきます。故障診断や修理方法の改善等、ご意見をお寄せ下さい。

PICプログラマーで ATtiny13Aの高電圧シリアルプログラミング をサポート

プログラマー外観

【前振り】
おもちゃに使われているカスタムICが故障しているときは別のマイコンで換装することになるが、数あるマイコンの中で殆どの場合はPICを採用している。その理由はコスト面で、今のところPICが最も廉価だからだ。PIC16F1705のように100円(2018年秋月価格)で音声再生と音楽演奏が同時実行できる石はPIC以外には無い。ラジコンのデコーダのようにデジタルI/Oだけで済む場合はPIC12F509(2018年秋月価格50円)で換装が可能だ。このくらいのコストであればおもちゃ修理に使ってもよいと考えている。

しかし、PIC以外にもコストパフォーマンスの良い石があった。ATtiny13A(2018年秋月価格50円)だ。ADC付きで、RESETピンをデジタルI/Oやアナログ入力に割り当てることができる。同じ価格のPIC12F509にはADCは無いし、MCLRピンはデジタル入力にしか使えない。動作速度も内部オシレータ使用で、命令サイクルは9.6倍も速い。これがATtiny13Aのメリットだ。逆にデメリットは、一度RESETピンの機能を無効にすると、その後は一般のISPライターではプログラムできなくなることだ。書き直すためには高電圧シリアルプログラミングをサポートしたライターが必要になる。

そこで、 自作している 「USB接続PICプログラマー」 に高電圧シリアルプログラミングの機能を追加した。PICプログラマーと呼んでいるが、PIC以外にもシリアルEEPROMやAVRの低電圧シリアルプログラミングもサポートしている。今になって機能追加の意欲が湧いてきたのは、おもちゃ修理にATtiny13Aのメリットを活かせるのではないかと言う期待感が高まってきたからだ。しかし、そうすると読者の皆さんにも高電圧シリアルプログラミングの環境を持っていただかないと、このブログで公開するファームウェアの利用がし辛くなってしまう。高電圧シリアルプログラミングができるライターをお持ちでなければ、この 「USB接続PICプログラマー」 がお薦めだ。

【改造の要点】
「USB接続PICプログラマー」 は元々高電圧を生成する機能を持っているし、AVRの低定電圧シリアルプログラミングは既にやっているので、高電圧シリアルプログラミングをサポートすることは容易だ。AVRのメモリプログラミング仕様を確認したところ、「USB接続PICプログラマー」 の回路は変更不要で、ソケットアダプタを新規に製作するだけで実現可能なことが判った。プログラマーを制御するマイコンのファームウェアとPC側の制御ソフトは機能追加が必要だ。

今のところ、おもちゃ修理に使ってメリットがあるのはATtiny13Aのみなので、これをサポート対象としている。

AT90S2323とATtiny85も高電圧シリアルプログラミングが可能であるが、AT90S2323は内部オシレータが無いので使い勝手が悪いし、今ではコストメリットも無い。ATtiny85は今後サポートするかも知れない。

ファームウェアは高電圧シリアルプログラミングのデバイスインタフェースを取り込む。
ソケットアダプタは低電圧シリアルプログラミングに対して、SII信号の追加とピン接続の変更を行う。
PC側の制御ソフトは高電圧シリアルプログラミングのプロトコルを追加する。

ATtiny13A用のソケットアダプタの結線図
PICプログラマーでATtiny134A高電圧シリアルプログラミングをサポート結線図

【ダウンロード】
改造後のUSB接続PICプログラマーの設計資料とプログラマー制御マイコンのファームウェアの開発プロジェクト、PC側の制御ソフトの開発プロジェクトは ここから ダウンロードできる。

【使い方】
デバイス一覧の中から 「tiny13A-HV」 を選択する。HVのキーワードが高電圧シリアルプログラミングを表している。

実行機能は 「読込み」 「書込み」 「チップ消去」 「RUN」 が使える。

AVRSTUDIOで扱うHEXファイルはフラッシュメモリとEEPROMとで分かれていて、ファイル名の拡張子で区別される。フラッシュメモリは 「.hex」 、EEPROMは 「.eep」 だ。「USB接続PICプログラマー」でも、指定されたHEXファイル名が 「*.eep」 のときはEEPROMにアクセスする。それ以外のときはフラッシュメモリにアクセスする。

「USB接続PICプログラマー」 は FB(フューズビット) 、 LB(ロックビット) 、 SB(シグネイチャーバイト) 、 CB(キャリブレーションバイト) の情報をHEXファイルでやり取りする。FBはアドレス0x100000 、 LBはアドレス0x200000 、 SBはアドレス0x300000 、 CBはアドレス0x400000 に配置している。FBとLBの設定値をHEXファイルに埋め込んでおけばデバイスに書き込んでくれるので便利だし、設定ミスの防止になる。他のライターを使うときは、これらの情報が不正データだと見做されるかも知れない。

【関連調査】
秋月で販売されているAVRで高電圧シリアルプログラミングが使えるものを調べた。

AT90S2313 高電圧シリアル無し
AT90S2323 RESETピンの機能変更機能は無い、高電圧シリアルのコードが異なる
ATmega48/88/168/328 高電圧シリアル無し
ATmega88 高電圧シリアル無し
ATtiny85 RESETピンの機能を無効にできる、高電圧シリアルのコードが微妙に異なる
ATtiny2313 高電圧シリアル無し
ATmega8 高電圧シリアル無し

高電圧シリアルプログラミングは AT90S2323 と ATtiny85 で使えるのだが、プロトコルはATtiny13Aと違っている。HEXファイルを書き込むだけなのに何故デバイス毎に仕様を変えるのか、その設計思想が全く理解できない。
スポンサーサイト
  1. 2018/01/15(月) 15:14:36|
  2. PIC開発
  3. | コメント:0

PICプログラマーで 16F188xx をサポート

PICプログラマー
プログラマー外観
PICプログラマーと呼んでいるが、シリアルEEPROMやAVRもサポートしている。
当初の製作記事は ここ
その後の改善記事は、「PICプログラマー」 でブログ内を検索。


【今回の改善事項】

16F188xxをサポートした。
それとバグ吸収 (内容はヒミツ) もやっている。


【サポートデバイス一覧】

10F200/204/220
10F202/206/222
10F320
10LF320
10F322
10LF322
12F508
12F509/510/16F506
16F54
16F57/59
12F609/615/16F610
12HV609/615/16HV610
12F617/16F616
16HV616
16F627/LF627
16F628/LF628
16F627A/LF627A
16F628A/LF628A
16F648A/LF648A
12F629/675/16F630/676
16F631
12F635
16F636/639
12F683/16F684/677/687
16F685/688/689/690
16C711
16F716
16F785
16HV785
16F818
16F819
16F84A
16F87/88
16F870/871/872
16F873/874
16F876/877
16F873A/874A
16F876A/877A
16F882
16F883/884
16F886/887
16F913/914
16F916/917/946
16F1454/1455/1459
16LF1454/1455/1459
12F1501
12LF1501
16F1503/7
16LF1503/7
16F1508
16LF1508
16F1509
16LF1509
16F1574/8
16LF1574/8
16F1575/9
16LF1575/9
12F1612/16F1613
12LF1612/16LF1613
16F1614/1618
16LF1614/1618
16F1615/1619
16LF1615/1619
16F1703/1707
16LF1703/1707
16F1704/1708/1713
16LF1704/1708/1713
16F1705/1709/1716/1717
16LF1705/1709/1716/1717
16F1718/1719
16LF1718/1719
16F1782
16LF1782
16F1783/1784
16LF1783/1784
16F1786/1787
16LF1786/1787
16F1788/1789
16LF1788/1789
12F1822/16F1823
12LF1822/16LF1823
12F1840/16F1824/1828
12LF1840/16LF1824/1828
16F1825/1829/1847
16LF1825/1829/1847
16F1826
16LF1826
16F1827
16LF1827
16F18313/18323
16LF18313/18323
16F18324/18344
16LF18324/18344
16F18325/18345
16LF18325/18345
16F18326/18346
16LF18326/18346
16F18854
16LF18854
16F18855/18875
16LF18855/18875
16F18856/18876
16LF18856/18876
16F18857/18877
16LF18857/18877
16LF1902
16LF1903/1904
16LF1906/1907
16F1933/1934
16LF1933/1934
16F1936/1937/1946
16LF1936/1937/1946
16F1938/1939/1947
16LF1938/1939/1947
18F1320/2320
18F22x1
18F23x1
18F24x0/24x3/44x0/44x3
18F24x5/24x8/44x5/44x8
18F25x0/25x3/45x0/45x3
18F25x5/45x5
18F26x0/46x0
18F26x2/46x2
18F26x5/46x5
18F13K22
18LF13K22
18F14K22
18LF14K22
18F13K50
18LF13K50
18F14K50
18LF14K50
18F23K20/43K20
18F23K22/43K22
18LF23K22/LF43K22
18F24K20/44K20
18F24K22/44K22
18LF24K22/LF44K22
18F25K20/45K20
18F25K22/45K22
18LF25K22/LF45K22
18F26K20/46K20
18F26K22/46K22
18LF26K22/LF46K22
18F24Jxx/44Jxx
18F25Jxx/45Jxx
18F26Jxx/46Jxx
18F27Jxx/47Jxx
24FJ16GA0xx
24FJ32GA0xx
24FJ64GA0xx
24FJ96GA0xx
24FJ128GA0xx
30F1010
30F2010
30F2011/2012
30F2020/2023
30F301x
30F401x
30F501x
30F6010/0A/2/2A/4/4A/5
30F6011/1A/3/3A
33FJ/24HJ12GP201/202
33FJ32GP/MC202/204
33FJ32GP/MC302/304
33FJ64GP/MCx02/x04
33FJ128GP/MCx02/x04
33FJ256GP/MCx06/x08/x10/A
32MX110/210
32MX120/220
32MX130/230
32MX150/250
24FC32A
24FC64
24FC128
24FC256
24FC512
24FC1025
24FC1026
CAT24M01
25AA320A
25AA640A
25AA128
25AA256
25AA512
25AA1024
90S1200
90S2313
90S2323
tiny13
tiny2313
mega48
mega88
mega168
mega328


【ダウンロード】

PICプログラマーの設計資料とソフトウェアは ここから ダウンロードできる。

PC側の制御ソフトはGUIとプログラマー制御の2つから成る。
GUIを担うVBプロジェクトは「ISP」、実行ファイルは「ISP\bin\ISP.exe」
プログラマー制御を担うVCプロジェクトは「ISPdll」、実行ファイルは「ISPdll\Release\ISPdll.dll」
ともに開発環境は VisualStudio2008 Express Edition

プログラマー側の制御ソフトは18F14K50のファームウェアでディレクトリは「ISPpic18F14K50」、実行ファイルは「ISPpic18F14K50\USB\ISPpic18F14K50\Firmware\ISPpic18F14K50.hex」
開発環境は MPLAB Ver8.92

今回のバージョンアップは上記の3つとも更新されているので、すべてを入れ替える必要がある。

PC側の制御ソフトは、OSへのインストールは必要なく、任意の1つのフォルダにISP.exeとISPdll.dllをコピーするだけで良い。
VisualStudio2008のランタイムが無いと言われたら、ビルゲイツの指示に従って別途インストールする。

PICプログラマーを始めて導入するときはUSBドライバーの登録が必要である。USBドライバー本体はWindows標準のものを使用するので、ダウンロードファイルには含まれていない。infファイルとcatファイルは「ISPpic2\USB\ISPpic18F14K50\inf」にある。

ハードウェアの設計書は「USB接続簡易共用プログラマー設計・回路図・配線図.xls」。
各デバイス毎のソケットアダプタ結線は、シート名「ソケット・・・」を参照。


【いつもの愚痴】

16F188xxのプログラミング仕様は今までにない新手のものだった。

PICは全般的にプログラミング仕様がデバイス毎に微妙に違っていて、プログラマーの制御ソフトの開発時に悩まされている。プログラミング仕様の共通部分と個別部分を見極めて制御ソフトを設計することが新デバイスのサポートが効率的に進められるかどうかのキーポイントになる。

16F188xxの通信インタフェースは、マイクロチップ社の言うには「SPI風のインタフェース」とのことだ。しかし、2本線なので全二重ではないし、データとクロックのタイミングがAVRで採用されているSPIとは異なっている。元々SPIは信号の極性やタイミングにバリエーションがあるので、個々に仕様を確認する必要がある。プログラミング仕様書を読み解くとICSPDATとICSPCLKのタイミングは従来と同じで、ビットの送受信順序が従来は下位から上位の順だったのが、上位から下位の順に逆になっていた。確かにSPIは上位から下位の順なので、それが「SPI風のインタフェース」なんだ。

18F2xJxxのデバイスではICSP開始時に「MCHP」の4バイトをデバイスへSPIで送信する必要があり、この通信インタフェースはAVRのSPIと同じで、16F188xxの「SPI風のインタフェース」ではない。行き当たりばったりに仕様が作られているようで、PICとしての統一性が感じられない。

この「SPI風のインタフェース」のために、プログラマー側の制御ソフトも機能追加を余儀なくされた。プログラマー側の制御ソフトはPICとの最下位レベルの通信を担っているので開発当初から変更が無かったのだが、今になってこんな変更が入るとは。改変内容としては、従来のICSP通信をベースにビット送受信順序を逆にするだけなのでコピペで済む内容だが、このファームウェアの開発時期は2010年で開発環境はMPLAB(Xではない)であり、もはやMPLABの開発環境は維持していなかった。MPLABXにマイグレーションするのは無用のトラブルを生みそうなので、MPLABの最終版(v8.92)をインストールして今回の改変を行った。

NVMに書込むだけなんだから、こんなにも雑多な仕様は必要ないと思う。アドレスとデータを送れば書いてくれる画一的な仕様にして欲しいものだ。
  1. 2017/06/20(火) 21:12:21|
  2. PIC開発
  3. | コメント:0

PIC32MXのVerifyオペレーション不良について(有識者の教示を乞う)

PIC32MXのプログラミングが上手く行かず、数年が経つ。自力では解決できそうにないので、ここに抱えている問題を公開して有識者に教えを乞いたいと思う。

【問題事象】
PIC32MX220F032B-I/PでVerifyオペレーションを実行したが、フラッシュから読込んだデータが正しくFastdataレジスタに格納されない。


【事象の発生状況】

①プログラミング仕様「PIC32 Flash Programming Specification.pdf(61145L)」では、Fastdataレジスタとして s3 が示されている。そのレジスタ設定で実行すると読込みデータは格納されない。

②Fastdataレジスタとして a0 を指定すると読込みデータは期待通りに格納される。

詳細は以下の通り。
PIC32MXのVerifyオペレーションについて仕様書
  1. 2017/06/02(金) 14:50:46|
  2. PIC開発
  3. | コメント:0

PIC電子オルゴールのI2C動作不良について(有識者の教示を乞う)

PIC電子オルゴールを開発する中でI2Cの動作に関する問題が発生していて自力では解決できそうにないので、ここに抱えている問題を公開して有識者に教えを乞いたいと思う。

【問題事象】
スタートコンディション開始を指示しても、実際にピンからスタートコンディションの信号が出てこない。

発生する条件は以下の通り。

①12F1822と12F1840で発生する。16F1705/9、16F1827、16F18313、16F18325/6、16F18857では発生しない。

②4xPLLのレディを確認するコードを実行した場合に発生する。実行しない場合は発生しない。


【事象の発生状況】
問題事象が発生する操作と確認の状況は以下の通り。

先ずはソースコードをご覧いただきたい。

PIC電子オルゴールのI2C動作不良についてソースコード

①4xPLLのレディの確認・・・上記ソースコードの赤で囲った部分で、OSCSTATのPLLRビットがセットされるまでスピンループして待つ。

②スタートコンディションの開始指示・・・SSP2CON2のSENビットをセットする。

③実際にピンからスタートコンディションの信号が出て来ないことの確認・・・RA1(SCL)とRA2(SDA)の波形を観測すると、どちらもHに張り付いたままである。ワンショットで観測してもクロックは1個も出て来ない。

④ソフトはSSP1IFがHになるのを待ち続けている。

上記①の処理を飛ばすとピンからは、下記のように期待したスタートコンディションの信号が出力される。
PIC電子オルゴールのI2C動作不良について信号波形

開発プロジェクトは ここから ダウンロードできる。
プロジェクトは I2Cng の I2Cng1822
  1. 2017/06/02(金) 11:02:09|
  2. PIC開発
  3. | コメント:0

OSCキャリブレーションツール(12F629等)の製作

【前振り】
昔々の話だが、12F629という石があった。当時はコンパレータ付きで比較的廉価だったのでよく使っていた。
しかし12F1822が出てからは12F629は使わなくなり、今ではジャンク箱の肥やしになってしまっている。
そこで機能と性能が求められない用途には積極的に12F629を使って、ジャンクの減量を進めて行こうと思った。

12F629は8ピンなのでI/Oポートは6本しかなく、それらを無駄なく使うために内部RCオシレータを使うことが多い。
しかし、12F629の内部RCオシレータはOSCCAL値を校正しなければ正確なタイミングでプログラムが動かない。
しかも、工場出荷時のOSCCAL値のバックアップはなく、プログラム消去で簡単に消えてしまう。
ジャンク箱の12F629は殆どが工場出荷時のOSCCAL値を失っているので、これらを使う前にOSCCAL値の校正が必要になった。

この校正作業を簡略化するためのツールを作った。12F629だけでなく、OSCCAL値の校正が必要なデバイスを対象とする。

【デバイス別の事情】
秋月で販売されていたデバイスでOSCCAL値の校正が必要なものについて、デバイス別の事情を記す。

①12F629/675、16F630/676
OSCCAL値はプログラムメモリにしか無く、容易に消えてしまう。バックアップも持たない最悪のデバイスだ。

②10F200/10F222、12F509/510
OSCCAL値はプログラムメモリにあり、容易に消えてしまう。
バックアップがCONFIGメモリにあるので、OSCCAL値を復元することが可能である。
但し、バックアップは標準のバルクイレースでは消去されないが、CONFIGメモリを指したバルクイレースでは消去される。

③12F609/615/635/683
校正値は、デバイスのイレース操作で消去されないので、本ツールの対象としない。


【校正のやり方】
①12F629/675、16F630/676はCONFIGをINTRCCLKの設定にして、CLKOUTピンからFosc/4の1MHzを出力させる。
 10F200/10F222、12F509/510はCLKOUT機能が無いので、ポートからソフトウェアで10KHzを出力させる。

②上記①の出力を周波数カンターで測定し、規定の周波数(1MHzまたは10KHz)になるようにOSCCAL値を増減する。

③OSCCAL値の増減は、ポートに接続した「増加SW」と「減少SW」を人が操作することで行う。

④OSCCAL値はポートに非同期シリアルで、常時表示する。この信号はオシロスコープで読み取ることを前提として、以下の仕様とする。
 ビットレートは 10Kbps(ビット巾は100us)
 フレーム構成は スタートビット(H)+データ6ビット(OSCCALのMSBから順に6ビット分、正論理)、ストップビット(L)
 フレーム周期は 64ms

⑤12F629/675、16F630/676ではポートに接続した「書込みSW」を操作すると、OSCCAL値をEEPROMの0番地に書込む。

⑥プログラムメモリ領域へのOSCキャリブレーション値の設定は、本ファームウェアでは行わないので、プログラマーにて書込みを行うこと。

【実行回路の例】
OSCCALの校正回路図
ポートの割り当てはデバイスによって異なり、SW入力は内部プルアップのあるポートに割り当てている。
個々には各デバイス毎のファームウェアのソースコードを参照。

【実行時の接続例】
OSCCALの校正接続
プログラマーからのICテストクリップでデバイスを挟み、クロック出力をオシロスコープの周波数カウンタで観測する。
上昇、下降、書込みのSWは省略して、GNDに繋いだ導線でポートピンを触れることでオンする。

【クロック出力の観測例】
OSCキャリブレーションツール(12F629等)波形1

【OSCCAL値表示の観測例】
OSCキャリブレーションツール(12F629等)波形2
OSCCALは上位6ビットが有効であり、下位2ビットは常に0である。
本ツールは有効ビットのみを表示している。

【ファームウェア】
本ツールのファームウェアは ここから ダウンロードできる。
デバイス毎にプロジェクトが存在する。
  1. 2017/01/08(日) 16:55:13|
  2. PIC開発
  3. | コメント:0
次のページ

プロフィール

大泉茂幸

Author:大泉茂幸
名張市つつじが丘おもちゃ病院
名張市つつじが丘南3番町129
tutuji@cb4.so-net.ne.jp
090-5534-6494
連絡は上記のメール、またはSMSでお願いします。

子どもの頃から趣味は電子工作一筋でやってきました。理科離れが進む中で科学技術に興味を持つ子どもが少しでも増えて行くことを願って、子ども達に電子工作の活動の場を提供しています。

1981年からおもちゃ病院の活動を始め、2014年に三重県名張市への移住を機に「つつじが丘おもちゃ病院」を開院しました。自分でおもちゃを設計し製作する【おもちゃ工房】と、マイコンを応用した電子工作を楽しむ【マイコンクラブ】も併設しています。新規参加メンバーを募集しています。

本ブログで公開している技術情報や成果物のご利用および再配布はフリーです。読者様の技術活動のお役に立てば幸いです。ご利用いただいた結果や感想等を記事へのコメントやメールでフィードバックしていただけると有難いです。

最新記事

最新コメント

月別アーカイブ

カテゴリ

おもちゃ病院 (7)
技術情報 (9)
修理事例 (143)
製作記事 (77)
ドクター研修会 (2)
PIC開発 (9)
未分類 (9)

訪問者数

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR