ラベル HSE_Interface の投稿を表示しています。 すべての投稿を表示
ラベル HSE_Interface の投稿を表示しています。 すべての投稿を表示

2009年9月23日水曜日

インターフェース部の暫定版と三相信号発生器


とりあえず、PIC24に切り替えて無事動くようになった。メモリー不足でリリースすらできなかったのが、今は順調に動くようになった。

タクトスイッチの上のボタンを押すと周波数の変更モードに切り替わり、左右のスイッチで希望する位置にカーソルを移動して、エンコーダーを回すとその部分の数字がUP/DOWNする。希望する周波数を入力したら、下のボタンで設定完了する。このような簡単なものなのに、かなり時間がかかってしまった。16bitのPICは初挑戦だったから仕方ないか。。。

あと、設定周波数をFLASHメモリーに記録する部分だとか、シリアルインターフェースなどまだやることがのこっているが、とりあえず暫定版としてリリースすることにした。

もともと、このインターフェース部分は、FPGA(Spartan-3A)で作った三相高周波信号発生器の周波数を変更するためのものだった。

なので、すでに半年ほど前に出来上がっていたはずの、三相信号発生器に接続して、動作確認をしてみた。

ところがである、予想通り出力が出てこない。

FPGAの書き込みをもう一度やり直してみたがだめで、Xilinxのシミュレーターを使ってみると、出力が出ないことが判明した。レジスタの初期値が設定されていなかったり、32ビット信号から上位11ビットを取り出すところで、下位ビットを拾っていたため出力が変化しなかったりといろいろ問題が見つかった。

これらを修正したのだが、それでも信号が出てこない。。。
出力段のDAコンバータにオシロのプローブを当てて調べていたら、レギュレーターから100Hz程度の信号が出ているようだし、まだまだ完成するまで先は長そうだ。

dsPIC33からPIC24に変えてみる

dsPIC33FJ32GP202というチップでプログラムを作ってきたのだが、SRAMの容量が足りなくなってしまった。

このdsPICには2KバイトのSRAMが載っているのだが、周辺のプログラムがどんどん増えていくにしたがって、ヒープ領域とスタックがかぶってしまってPICが暴走するようになってしまった。プログラムをSVNで以前のバージョンに戻すと正常動作するから間違いない。
SRAMの消費を抑えるために、できるだけ無駄な変数の宣言やファンクションコールを減らしてみたが、どうしても限界がある。

というわけで、思い切って、PIC24FJ64GA002というチップに交換することにした。実はこのPIC24シリーズはdsPIC33とは兄弟みたいなもので、DSP機能がついているかついていないかの違いしかない。今回DSPを使う予定はない訳だし。
そして、SRAM不足を解消するために、8KバイトのSRAMを積んだPIC24FJ64GA002にした。これだとPIN数も同じ28ピンだし、何の問題もなく交換できる。

午後から秋月に行って購入した。450円だからdsPIC33FJ32GP202と同じ価格。他の8bitのPIC16シリーズなどと比べると2倍以上の金額だけれど、アセンブラではなくC言語で開発できるのが良い。それに、PIC16のメモリーアクセスに癖があって、これに悩まされた経過があるので多少の出費は仕方ないかなと。

2009年9月22日火曜日

FreeRTOSでエンコーダとキーの処理

液晶の表示が出来るようになったので、次はロータリーエンコーダとタクトスイッチの入力を処理するサンプルを作ってみた。

はじめ、キー入力があったときに割り込みを使って処理することを考えていた。

そのためには、入力変化割り込みを有効にする必要があるらしい。そのためのレジスタがCNxIEというものらしいのだが、このレジスタの設定方法がまったくわからない。リファレンスマニュアルを読んでも詳しい設定方法が書いてないし、サンプルを探したが、dsPIC、PIC24Fでは見当たらない。

何がわからないかというと、dsPIC33FJ32GP202のピン番号とChange Notification Registerのマッピングが一致しないのだ。チップ自体は28ピンで、このうち入力に使えないVddやVssなどを除くと21ピンが対象ピンとなる。この数は、CNレジスタの有効な数と一致する。しかし、このCNレジスタの番号がPORTA、PORTBの並びとはまったく異なるのだ。かといって、ほかにマッピングするためのレジスタは見当たらない。

さんざん考えた末、この割り込みを使う方法はあきらめて、タイマーで周期的にキー入力を見るというオーソドックスな方法に切り替えた。

このオーソドックスな方法、案外簡単ながら強力だなと思った。キー入力には必ずチャタリングが付きまとうものだが、周期的にスキャンするので、前回の値とを比較するだけでチャタリングが除去できてしまう。

ELMさんのテクニカルノートがとても参考になった。ここにはチャタリング対策やロータリーエンコーダの使い方などがC言語のプログラム付で解説されている。FreeRTOSへの実装にも、ほぼそのまま利用可能だ。

これで、OKだと思ってPICに書き込んで動かしてみたが、キーの2つは正常に動作するのだが、ほかがまったく反応しなかった。

これでまた少し悩んだ。

配線をチェックしたり、テスターでキー入力の変化がPICに届いているかなど調べた。問題なかった。

では、ソフト側の問題かと考えていたら、どうも、A/D変換用の入力ピンが認識していないことがわかってきた。マニュアルを読むと、AD1PCFGレジスタを設定しないと、TRISxレジスタで入力を指定した場合にPORTxの値が読み込めないとある。
さらにdsPIC30のマニュアルなども読んでみた。そうしたら、0でA/D、1でディジタルI/Oとなると書いてある。

ソースを修正して、AD1PCFG=0xFFFF;としてみたら、全てのキーとロータリーエンコーダの値がとれるようになった。ヤッター!

2009年8月23日日曜日

FreeRTOS動作確認

昨日の続き、dsPIC33FのインターフェースボードにFreeRTOSをのせて動かすテストを行った。

テスト中の動画


画面左側のLEDは200ms周期で点滅。右側は500ms周期。これと右上のブザーで1kHzの音を100ms鳴らして、500ms止める動作を繰り返している。ただし、カメラの特性なのか、動画の特性なのかわからないけれど、1kHzの音が録音できていない。

ソースはこちらから→ FreeRTOSConfig.h, main001.c
修正した最新の回路図

ちなみに、PicKit2をデバッグモードで動かしているので、ソースの修正から動作確認まで非常に簡単にできてしまう。とても便利。

さて、この次は周辺ものである、ロータリースイッチやLCDなどをつけて動作確認だ。

2009年8月22日土曜日

dsPIC33FJ32GP202+FreeRTOS

まずはじめに、FreeRTOSで簡単なサンプルプログラムを作ってみることにした。

dsPICの23番ピン(RB12)にLEDをつけてある。これを点滅させるのだ。
発信器は内臓のものを使う。

電子工作室のページに移植手順が書いてあるので、ディレクトリを適当に決めて、ほぼここに書かれているとおりに作業を行った。プロジェクト名はinterface001にした。FreeRTOSのソースファイルは数が少ないのには少し驚いた。

メインのプログラムを書いていて、デバイスのConfigurationのところでつまづいた。
dsPIC33Fのリファレンスマニュアルを見る必要がありそうだ。

MICROCHIPのサイトにdsPIC33Fファミリ リファレンス マニュアルがあるが、英語版のみで日本語版はない。

浅草ギ研のページによると、dsPIC33Fリファレンスマニュアルの日本語版はまだなく、dsPIC30がそのまま使えるらしいことがわかった。ついでに、そのままそこにあったリファレンスマニュアルをGETさせてもらった。

リファレンスの必要そうな部分だけに目を通して、ソースを完成させた。

ビルドを何度か繰り返してエラーを取り除いて、最終的にHEXファイルをEXPORTしてバイナリーをつくった。

次に、PicKit2を接続して、書き込みだ。

PicKit2をPCのUSBポートにつないで、ターゲットボード上に用意したピンヘッダーに接続、ボードの電源を入れる。そして、PicKit2のソフトを起動する。すると、起動時にエラーメッセージが出る。VDDの電圧が異常?しばらくよくわからないまま、作業を続けていた。

dsPIC33Fは、自動的にデバイスを認識してくれないのかな?マニュアルでデバイスを指定。

PicKit2のマニュアルをみて、PicKit2が検出しているVDD電圧が2.3~2.4Vで、デバイスの書き込みに必要な2.7~3.0に達していないということがわかってきた。

それで、PicKit2本体のVDD電圧をキャリブレーション調整する。0.5Vほどずれているようだった。
これで直ったかと思ったが、その後もVDDの電圧でメッセージが出てくる。???原因がよくわからない。

デバイスへの書き込みを行っても電圧が不足しているからエラーが出てくる。
ボードの電圧を測定すると3.3Vでている。おかしいなぁ、、、と回路図をもう一度確認していたら、間違いを発見!
PicKit2を接続するピンの順番が間違っていた。3番目のVSS(GND)と、5番目のPGCがテレコになっていた。設計時にどこかのサイトに出ていた回路図を参考にしたときにミスったようだった。

原因がわかったところで、早速、配線の間違いを直し、PicKit2をつないでみた。OK!エラーは出なくなった。

2009年8月17日月曜日

インターフェース部の製作


SSTC1号機の改修はちょっと時間がかかりそうなので、インターフェース部分を先に作成した。

とりあえず、dsPIC周りだけにして、周辺のロータリーエンコーダーやLCDやタクトスイッチなどの別基板部分は後日作ることにした。
このボードだけで、とりあえずLED1個と電圧サウンダーとRS232Cが使える。

配線を終えたので、これにFreeRTOSを載せて動作確認を行う予定だ。

写真は一通りの配線とそのチェックを終えて、電源を入れたところ。左下のスイッチ横の青色LEDは電源ランプだ。

2009年7月4日土曜日

Interface部の回路図


インターフェース部の回路図が出来上がったのでUP。

dsPICを中心に、RS232C、DIPスイッチ×4、ロータリーエンコーダー、LCD、三相信号発生器へのインターフェース、圧電スピーカーなどがついています。

これらを、FreeRTOSで動かす予定。

2009年6月28日日曜日

コントローラ

出来るだけお金をかけないようにと、H8を使ってみたが、増設メモリーの問題が解決しない。

増設メモリーを作り直そうと思ったが、同じ時間と費用をかけるのなら、PICのほうが後々メリットがあると判断した。

それで秋葉原に行って、dsPIC33FJ32GP202-I/SPの28ピンを買ってきた。