FC2ブログ

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

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

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

XC8での内部OSCキャリブレーション値の設定

サーフボーイの修理(クローンリモコン製作)」 は依頼元の要件で12F509がご指定だったので、そのデバイスでファームウェアを開発したのだが、必要なポート数はたった3本であり10F222や10F322でも対応可能だ。2016年秋月価格は12F509が@50円、10F222と10F322は@45円となっている。10%もコストダウンできる。

ということで、10F222と10F322へのファームウェアの移植を行ったのだが、思わぬトラブルに遭遇してしまった。

サーフボーイの修理(クローンリモコン製作)」 の当初の開発環境はMPLABだったが、その後開発環境をMPLABXに変えていて、今回はXC8を使うことになった。

【問題点】
XC8では内部OSCのキャリブレーション値をOSCCALに設定してくれない。スタートアップに movwf OSCCAL が入っていないのだ。

XC8での内部OSCキャリブレーション値の設定1

ProjectProperties の XC8 linker の Calibrate oscillator にチェックを入れると、スタートアップに movwf OSCCAL が展開される。僕が知らなかっただけでMicrochip社が悪い訳ではない。デフォルトではチェックされていないので、12F509や10F222などOSCCALの設定が必要なデバイスを初めてXC8で使うときには注意が必要だ。

XC8での内部OSCキャリブレーション値の設定2

XC8での内部OSCキャリブレーション値の設定3

【対策】
正規の対策は 「プロジェクトを新規作成するときに Calibrate oscillator にチェックを入れること」 なのだが、おもちゃドクターにはPICのファームウェア開発の知識を持っている人は少ない(ここまでに書いたことがピンと来ない人は該当する)と思うので、Calibrate oscillator にチェックを入れてなくてもよいように、アプリケーション側でOSCCALを設定するようにした。

OSCCALの設定値はリセットベクタのコードでWレジスタに設定され、この値を速やかにOSCCALに設定しなければならない。

「速やかに」 というのはスタートアップでWレジスタが壊される前に、ということだ。そのためには、アプリケーションでのOSCCAL設定のコードを絶対0番地に配置しなければならない。そのコードが下記である。

XC8での内部OSCキャリブレーション値の設定4

これをアプリケーションの関数の外に置いておけばよい。場所はどこでもよいのだが、ソースコードの初めの部分に置いておくのが目立ってよいと思う。

HEXファイルを見ると0番地に 0x0025 (movwf OSCCAL) が入っている。

XC8での内部OSCキャリブレーション値の設定5

サーフボーイの修理(クローンリモコン製作)」 のダウンロードファイルには反映済みである。
  1. 2016/07/10(日) 17:55:47|
  2. PIC開発
  3. | コメント:0

MPLABXプロジェクト作成手順

MPLABXは僕の貧弱な開発環境では処理が重たいので、できるだけMPLABを使いたいところだが、MPLABでサポートしていないデバイスはMPLABXを使わざるを得ない。それで、16F1705以降はMPLABXを仕方なく使っている。
16F1705を使い始めて半年が経ちMPLABXの性格が掴めてきて、自分なりのプロジェクトの構成ルールができてきたのでここに記しておく。
当ブログのサンプルを利用する場合の参考にして欲しい。

【プロジェクトの構成要件】
①ターゲットのデバイスや機能要件が決まっていて唯一のプロジェクトを作る場合は、1つのフォルダに1つのプロジェクトを格納するのが自然で管理もし易い。

②同じ機能を複数のターゲットデバイスに載せる場合や機能を少し変えて複数のプロジェクトを作る場合には、共通に使うコードと個別になるコードに分けて開発し、1つのフォルダに複数のプロジェクトを格納することになる。
例えば電子オルゴールは目的のおもちゃによって収容曲や音声、周辺制御の要件等が異なるので、それぞれ個別にプロジェクトを作ることになるが、オルゴール演奏のエンジン部分や音符データはどのプロジェクトからも共通に使われる。

【プロジェクトの格納形態】
MPLABXの機能に沿って、また、上記のプロジェクトの構成要件を満たすようにプロジェクトの格納形態を考えた。
①プロジェクトロケーションの配下にプロジェクトフォルダーを置く。
・プロジェクトフォルダー内の構成はMPLABXの仕様に従う。
・開発するコードファイルはプロジェクトフォルダーには置かない。

②開発するコードファイルはプロジェクトロケーションに置く。
・共通コードも個別コードも階層化等による区分けはしない。
・コード内容を識別できるように、コードファイルを名付けする。

③MPLAB(旧版)のプロジェクトもプロジェクトロケーションにMPLABXと混在して置く。

④格納例
言葉だけでは伝え難いので、電子オルゴールでの格納例を示す。
MPLABXプロジェクト作成手順1

【プロジェクトの作り方】
1.プロジェクトの作業場所(フォルダ)を用意する。
・パス名には多バイト文字を含まないこと
・ソースファイルと16F1705の場合はリンカースクリプトも入れておく。
MPLABXプロジェクト作成手順2

2.MPLABXの「File」→「NewProject」でプロジェクトを新規作成する。
MPLABXプロジェクト作成手順3

①Categoriesは「MicrochipEmmbedded」、Projectsは「StandaloneProject」を選択する。
MPLABXプロジェクト作成手順4

②ターゲットデバイスを選択する。
MPLABXプロジェクト作成手順5

③DebugHeaderは(僕は)持っていないので「None」を選択する(しかない)。
MPLABXプロジェクト作成手順6

④Toolは(僕はPICkit3さえも)持っていないので「Simulator」を選択する(しかない)。
MPLABXプロジェクト作成手順7

⑤Compiler(またはアセンブラ)はソースコードに合わせて選択する。
MPLABXプロジェクト作成手順8

⑥Project名とFolderを指定する。
MPLABXプロジェクト作成手順9

・「ProjectName」はプロジェクト内容が判るもの、また、他のプロジェクトと区別し易いものを名付ける。
・「ProjectLocationは「1.」で用意したものをBrowseする。
・「Set as main project」はチェックする。
・「Use project location as the project folder」はチェックしない。
・Encodingは各自の開発環境によるが、僕は「Shift JIS」を使っている。
MPLABXプロジェクト作成手順10

・MPLABX内にプロジェクトが新規作成された。
MPLABXプロジェクト作成手順11

・プロジェクトのフォルダにMPLABXプロジェクトディレクトリが作成されている。
MPLABXプロジェクト作成手順12

⑦(PIC16F705の場合は)LinkerFilesにリンカースクリプトファイルを追加する。
MPLABXプロジェクト作成手順13

・ブラウザが最初に開くフォルダはプロジェクトフォルダなので、1つ上がって、リンカースクリプトファイルを選択する。
MPLABXプロジェクト作成手順14

⑧SourceFilesにソースファイルを追加する。
MPLABXプロジェクト作成手順15

・ブラウザでソースファイルを選択する。
MPLABXプロジェクト作成手順16

・プロジェクトを構成するファイルがすべてプロジェクトに取り込まれた。
MPLABXプロジェクト作成手順17

3.CleanBuildする。
MPLABXプロジェクト作成手順18

・BUILD SUCCESSFUL できた。
MPLABXプロジェクト作成手順19

・プロジェクトフォルダに hexファイル等が生成されている。
MPLABXプロジェクト作成手順20
  1. 2015/06/28(日) 18:00:13|
  2. PIC開発
  3. | コメント:0

プロフィール

大泉茂幸

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

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

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

当ブログで公開している技術情報や成果物の複製、改変および再配布はフリーです。読者様のおもちゃ病院活動のお役に立てば幸いです。ご利用いただいた結果や感想等を記事へのコメントやメールでフィードバックしていただけると有難いです。なお、公開ファイルは最新版を載せているので、古い記事の内容から変わっている場合があります。

カテゴリ

おもちゃ修理技術 (90)
¦ ・電子オルゴール+音声 (32)
¦ ・音声再生・録音再生 (6)
¦ ・2.4GHzラジコン (29)
¦ ・レガシーラジコン (12)
¦ ・赤外線リモコン (4)
¦ ・RFID (3)
¦ ・タッチセンス (4)
ツール製作 (26)
¦ ・プログラマー (19)
¦ ・USB-シリアル変換 (3)
¦ ・その他のツール (4)
修理事例 (154)
¦ ・マイコン換装 (72)
¦ ・電子・電気修理 (59)
¦ ・メカ修理 (23)
製作記事 (4)
PIC開発 (4)
おもちゃ病院 (9)
ドクター研修会 (2)
未分類 (0)

最新記事

最新コメント

月別アーカイブ

訪問者数

検索フォーム

RSSリンクの表示

リンク

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

ブロとも申請フォーム

この人とブロともになる

QRコード

QR