So-net無料ブログ作成

同じ問題でまた嵌まった [PIC32]

(2015.07.31)
PIC32MX250を使い、アナログ2CHを200kHzサンプリングしようとして、嵌まりました。サンプリング・レートが200kHzに届きません。

プログラムを書き換えてもなかなか思うようになりません。あれこれ試しているうちに、サンプリング・レートが突然1MHzに跳ね上がって、またビックリ!調べてみるとADC割込フラグが消えなくなって誤動作していました。orz

”え~と、これは以前にも経験したやつだ。そのときは1MHzサンプリングも出来たんじゃなかったっけ?”

親族管理人ブログで検索を掛けて、以前書いた記事(これ)を発掘しました。

ふむふむ。(<==自分で書いたブログに感心している)

そのときも原因は判らないまま、AD1CON.SSRC<2:0>を”Internal counter ends sampling(auto convert)”に設定して、1MHzサンプリングを実現していました。

今回も同様に、”Internal counter ends sampling”に設定し、さらに"auto sampling"も設定して(ADCをフリーラン状態にして)おいて、200kHzインターバルで読み取るという方法でなんとか200kHzサンプリングが実現しました。

やれやれ

----------------------------------------
ちなみに、プログラムはこんな感じです
  while( break_flag == FLAG_OFF )
  {
      if( ADC_TIMER_INT_FlagGet() )
      {
// DMAをキックしてad_buffの内容を転送する
         SYS_DMA_Channel1ForceStart();
         ADC_TIMER_INT_FlagClear();
      }
      
      if( ADC_1_INT_FlagGet() )
      {
//ADC1BUFを読み出してから、割込フラグをクリアする
        ad_buff[0] = ADC1BUF0;
        ad_buff[1] = ADC1BUF1;
        ADC_1_INT_FlagClear();
      }



にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PIC32MZの注文をキャンセルした [PIC32]

(2014.08.29)
楽しみにしていたPIC32MZが発売されて、思わず飛びついて(5個ORDERした)しまったのですが・・・

PIC32MX250でI/Oポートの不具合(I2Cを有効にするとRA0 と RA1の出力がおかしくなる)に遭遇して以来、Microchip社のデバイスに(少しだけ)不信感を抱くようになりました。

入手したデバイスを使う前にデータシートに目を通すのは当然のこと(<==目を通さなければ使えない)ですが、引き続きErrataにも目を通しておかないと、徒にデバッグ時間を費やすことになります。

今回は部品を手に入れる前にPIC32MZのErrata(これです)に目を通してびっくりしました。プレスリリースから半年以上経っても出荷できなかったのですから、Microchip社が苦戦していることは判っていました。しかし、Rev. A4になっても全デバイスに共通する重大な不具合をいくつも抱え込んでいることに驚きました。

ADCは性能が出ないし、I2Cも駄目だし、クリスタル発振も出来ないのでは、オシロジ-32に使えません。(泣)

調べてみるとPIC24辺りから、対策出来ない(Rev. A8になっても改善しない)不具合が幾つもあって、製造段階で設計性能が出せないのでは無く、そもそも設計出来ていないように見受けられました。

PIC32MZのCPUコア(<==MIPS社の設計)に問題は無さそうなので、Harmony(<==PIC32MZの開発フレームワーク)の練習台にはなりそうですが、その先に繋がらないのでは練習する意味がありません。結局、PIC32MZ1024ECG064の注文はキャンセルしました。

suffixAを付けた再設計バージョンが発売される(2015年頃?)という噂もあるようですが、さてどうなるか?

PIC32MZの演算能力を生かしたアプリケーションを考えてみるかなぁ~
でもSPIにも問題があるようだし・・・

ガンバレ、Microchip!

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PIC32MZが発売された [PIC32]

2014.08.17)
久しぶりにMicrochip社のサイトを覗いてみたら、PIC32MZシリーズが”In Production”になりました。 パチパチパチ~
2014_0817_3.pngPIC32MZが発売された

早速値段を調べてみると、プログラムメモリ1M RAM512kのPIC32MZ1024ECG064が9.8ドルとPICの中ではかなり高めです。
2014_0817_1.pngPIC32MZ1024

ついでにプログラムメモリ2M のPIC32MZ2048ECG064も調べると、こちらは11.4ドルです。
2014_0817_2.pngPIC32MZ2048

取り合えず、PIC32MZ1024ECG064(TQFP)を5個ORDERしました。入手出来るのは11月下旬になりそうですが、それまでに基板を作らなければなりません。

う~ん、なんだかとっても楽しみ!
----------------------------------
(2014/08/17 18:00)
PIC32MZ Errataを見てみたら・・・
これです
ちょっと、早まったかなぁ~



にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Oscilogi32の開発環境が整った [PIC32]

(2014.06.25)
PIC32MX250を使った100kSPSのデジタル・オシロと1MSPSのロジアナを”Oscilogi32”と呼ぶことにしました。¥(^_^)

悩んでいたI2C通信が動き始めて一安心と思ったら、新たな問題が発覚しました。C言語で書かれたbcm2835ライブラリ(これです)をJAVAから呼び出すbcmlib_for_java(これです)が途中から動かなくなってしまいます。生成した子プロセスがクラッシュするようです。orz

Raspi-1から持ってきたbcmlib_for_javaを使ったのですが、改めてgithubからRaspi-2にcloneしてmakeし直しました。example/I2c.javaでテストすると・・・O.K.です。無事、インストールできました。

新たにインストールしたbcmlib_for_javaを使ってOscilogi32のJAVAプログラムを動かしてみると・・・今度は大丈夫です、I2C_readとI2C_writeを反復しています。(パチパチパチ~)
2014_0625_1.pngコマンド・テスト用
未だコマンド送受テスト用のウィンドウしか出来ていませんがOscilogi32の開発環境が整いました。

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PIC32MXのI2C通信が動き始めた [PIC32]

(2014.06.24)
Raspi-2とPIC32MX間のI2C通信にてこずっています。PIC18F25k50で使っていたI2CスレーブのプログラムをPIC32MXに移植しようとしたのですが、I2Cモジュールの機能の違いが大きく(<==I2CスレーブはAck/Nackをプログラムで制御できない?)、思うようには行きません。

なんとかPIC32MXのI2Cスレーブ・プログラムを書き上げ、Raspi-2(I2Cマスタ)とのI2C通信を試みましたが、READ要求には一回しか応答できません(WRITE要求の反復なら良い)。しかも、それ以後READ要求にもWRITE要求にも応答出来なくなってしまいます。データ・シートとリファレンス・マニュアルを何度も読み返したのですが、原因が掴めません。orz

あれこれ試していて、デバッガでブレークを掛けるとI2C2STATのRBFフラグがクリアされ、READ要求に(一回は)応答出来るようになることが判りました。

WRITE要求のときはI2C2RCVに入ったI2Cアドレスを読み出していた(そうしないとReceive Overflowになる)のですが、READ要求のときは関係ないと思ってI2C2RCVを読み出していませんでした。

”RBFフラグが立ったままだとアクノリッジ・シーケンスが動かない”とは何処にも書かれていませんが、どうやらそういうことのようです。(I2COVフラグも立たない)

アクノリッジ・シーケンスでI2Cアドレスを読み出すようにして、ようやくREAD要求とWRITE要求の反復が出来るようになりました。

やれやれ

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

タイマ動作を勘違いしていた [PIC32]

(2014.06.07)
殆どのPICアプリケーションで周期タイマを利用しているのですが、その動作を勘違いしていたことに気付きました。

Fosc/4(<==例えば2MHz)をベース・クロックにして周期タイマを構成する場合、PRレジに分周比(<==例えば2000)を設定して、1msecインターバルの割り込みを発生させていました。同じように、PIC32MXで30MHzのPBCLKを使って、2μSインターバルの割り込みを発生するため、PRレジに60を設定しました。

この割り込みインターバルでportBの状態を読み取り、メモリに書き出してロジアナにするつもりだったのですが、読み取りレートが数%足りません。割り込みが競合してインターバル通りに割り込み処理が行えなくなっているものと考え、割り込みプライオリティを制御してみたのですが、状況は改善しません。

そこで割り込み処理を諦め、タイミングの細かな制御が可能なポーリング処理に変えてみたのですが、やっぱり2%程度の遅れが出ます。

タイミング・マージンは十分ある筈なのに、一体何が起きているのでしょうか?
何だ、これは???

ひとしきり悩んだ挙句、ふと思いついてTIMERのリファレンス・マニュアルを読み直し、周期タイマの所にこんな記述を見つけました。

”タイマはTMR カウントレジスタ値がPR 周期レジスタ値に一致するまでインクリメントし続けます。一致すると、次のタイマクロックサイクルで TMRカウントレジスタが0x0000 にリセットした後にインクリメントを再開します。”

親族SNS管理人はTMRとPRが一致したとき、非同期にリセットが掛かる(次のクロックでTMR=1になる)ものと思っていました。上の説明は明らかに違います。

PRレジに60を設定すると61カウント周期のタイマ動作になるのです!
今までPRレジの設定値が大きかったので、周期タイマーの誤差(<==0.1%以下)に気付きませんでした。

PRレジに設定を59に変更して、ようやく500kHzのサンプリング周期になりました。

やれやれ

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

MIPS値が足りない [PIC32]

(2014.06.05)
PIC32MX250のportBとADCの読み取りを並列に動かして、100kSPSのデジタル・オシロと1MSPSのロジアナを実現しようとしています。

タイミングを細かく管理するため、割り込みは使わず、ポーリングで制御する方式を試してみた(最適化レベル1でコンパイルしてインストラクション数をカウントした)のですが、こんな結果になりました。

portB関連処理 1μ秒当たり 47step
AD関連処理 40μ秒当たり 193step

両方合わせると40μ秒当たり 2073step <==52MIPS!
う~ん、MIPS値が足りてません。特にportB関連の処理負担が重過ぎます。

<対策1>
portBのトリガ条件からパターン・マッチを外す<==45MIPS程度
<対策2>
portBのトリガ条件からビット・チェンジを外す<==45MIPS程度
<対策3>
portBのサンプリング・レートを500kSPS以下にする<==29MIPS程度
<対策4>
portBのサンプリング・レートが1MSPSのときはADの並列動作を止める<==48MIPS程度

”手元のPIC32MX250F128Bを使って”という設計条件の下では、安全サイドの<対策3>で行こうと思います。(I2Cの信号も100kBPSなら観測可能?)

--------------------------------------------------
32biデバイスを使った開発で、こんなミリミリしたプログラムを書くことになるとは思ってなかった。
マルチタスク処理なんて、まだずっと先だなぁ
--------------------------------------------------

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Windowsネットワークが見えなくなった [PIC32]

(2014.06.03)
PIC32MX250F128BとRaspi-2をI2Cで繋ごうとしているのですが、なかなか思うように進まず、苦戦しています。PIC32MX250F128BのI2C1(Master)とI2C2(Slave)間のI2C通信は出来ましたが、I2C1(slave)とRaspi-2(Master)のI2C通信はやっぱり上手く行きません。orz

走らせるとSDA1が変な電圧を示します。ロジアナもオシロも未だ無いので(<==作っている最中)、何が起きているのか確認できません。動作したI2C2(Slave)でRaspi-2(Master)とI2C通信してみると・・・動きました。(<==I2C2の割り込みが入った)送信データが無いのでNotAckを返しているだけですが、ようやく一歩前進しました。(<==I2C1はスレーブ動作できない?)

これでRaspi-2のJAVAプログラム開発に掛かれると思ったら、I2C周りで苦戦を続けている間にWindwsネットワークが見えなくなっていて、Raspi-2のsambaディレクトリが使えなくなってしまいました。orz

Raspiだけならsambaサーバの問題かもしれないのですが、NASも見えないので別に原因があるように思われます。”マスタ・ブラウザ”がWindowsネットワークの要らしいのですが、Windows 7のレジストリを弄っても、”マスタ・ブラウザ”になってくれません。(<==セキュリティ対策ソフトが邪魔してる?)

こんな不安定なWindowsネットワークに頼って、開発を続けるのは考え物です。

Netbeansのランタイム・プラットホームにリモートJAVA SEを設定する方法を試すことにします。
(<==sshでログインできればNetbeansでRaspi-2のディレクトリにアクセスできる)

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

PIC32MX250のI2Cが少し動いた [PIC32]

(2014.06.01)
PIC32MX250のI2C1とI2C2を使って、Master-Slave間の通信を試してみました。

PIC32MX3xx以上のデバイスに比べて、PIC32MX250のI2C機能は簡略化されている(==>例えばSCIEやPCIEが無い)ことが判ってきました。これではPIC18F25k50で使っていたI2C(スレーブ)のプログラムは動作しません。

また、TIMER2割り込みをDMA転送のトリガに使うロジアナ機能も思うような性能が出ず(何故か数%の遅れが出る==>転送漏れの発生?)、構想の見直しを迫られています。、

限界性能を追求するのは止めて、必要最小限の仕様に改めることにしました。

<設計仕様(改)>
デジタル・オシロ:2CH 100kSPS
ロジアナ:7CH 1MSPS

割り込みを使わず、ポーリングで制御する方式を試してみようと思います。

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

I2C接続でトラブルが発生した [PIC32]

(2014.05.29)
PIC18F25k50で使っていたI2C(スレーブ)のプログラムをPIC32MX用に書き換えました。Raspi側もRaspi-1のJavaプログラムをRaspi-2に移植して準備完了!

動かしてみると・・・駄目です、I2C割り込みが発生しません。しかも、点滅するはずのLED(RA1ピン)が消えたままになっています。orz

デバッガで調べてみると、I2C1CON.ONを1にするとLEDが消え、0にすると点くことが確認出来ました。(<==ブレークしたままでも確認できた)

『あれ~、RA1ピンとI2C1って何か関係があるのか?』
”Peripheral Pin Select”との関連を調べましたが、何も見つかりません。

『おかしいな~』

テスターでRA1の電圧を測ってみると何か変な値です。(<==やけに低い)慌ててVddを測ってみると、1.5Vしかありません。orz


『あっ、PICkit3の電源供給能力(<==30mA)を越えていたんだ!』
”Vddが1.5VでもPIC32MXはそこそこ動く”というのも驚きです。
---------------------------------------------------------------------------
(2014.05.30)
”Vdd=1.5Vで動作する”というのは大嘘かもしれません。
誤計測の可能性があります。
---------------------------------------------------------------------------

Raspiから3.3Vを供給して、”一件落着”を期待したのですが、そうはなりませんでした。

電源を変えても、I2C1CON.ONを1にするとRA1の出力電圧が低下(<==1.3V程度)してLEDが消えてしまいます。

『え~、何が起きているんだ?』

Web検索を掛けて、PIC32MX1XX_2XXのERRATA(これ)に辿りつきました。
”Module: I/O Ports
Output High Voltage (VOH) on the RA0 and RA1
pins is not within the published data sheet
specification if the I2C1 module is enabled.”

”Disable slew rate control of the I2C1 module by
setting the DISSLW bit (I2C1CON<9>).”
”I2C1をエネーブルにすると、仕様の範囲に入らない”って、随分控えめな表現です。この不具合を解消するためには、DISSLWをセット必要があるようです。

確かに、I2C1CON.ONを1にしてLEDが消えても、I2C1CON.DISSLを1にするとLEDは点きました。(<==デバッガでブレークしたままで確認した)
I2Cのクロックを100kHzにするしかなさそうです。

RA1の問題は解決しましたが、Raspi-2とPIC32MXのI2C通信は未だ繋がりません。
orz

タフでなければ、やってられない!¥(^_^)
--------------------------------------------------------
PIC32MX1XX_2XXのERRATAには他にも色々書いてありました。
ADCの変換レートは500kSPS以下にしろとか何とか・・・

PIC32MX250F128Bはお試し程度に留めておくほうが良さそうです。
--------------------------------------------------------

にほんブログ村 IT技術ブログへ
にほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感