SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|

2005-07-06(Wed) GO/DONEがズレとったドーン

  ここ二日間、仕事から帰るとメシ食って、PCの電源入れてグダグダして寝ていた。よって「イエローちゃん」がぜんぜん進捗しない。例のA/D変換が終了せず、結果的に無限ループに落ちいる現象は未だ解決されていないのだ。むきー。こんなつまらんコトで、なんでブロッキングなんじゃー。わしゃ、PIC16F648Aでなら、一度はA/D変換プログラムを動かしたことがあるんじゃぞー。

  PICでは、A/D変換制御を行うレジスタのGO/DONEビットをセットするコトでA/D変換が開始される。終わりは、割り込みで通知してもらうこともできるし、ループでGO/DONEビットがリセットされるのを検出してもいい。今はとりあえず後者の方法を試している。メインループでPWM制御をしている都合上、A/D変換には若干の時間が必要ということもあり、PWMの流れを乱さないためには、割り込みを用いたほうがモアベターであるが、それでもとりあえず一度は後者の方法で動かさないコトには割り込みどころではないだろう。しかし、どうしてもGO/DONEがリセットされんのじゃ。A/D変換器の初期設定になんか問題でもあるのか?

  ちゅーか、PIC16F648Aで動いて、PIC12F675で動かんつーことは、A/D変換制御を行うレジスタの構成でも変わっとるんちゃうか? 実際、ポートのアナログ/デジタルモードの選択方法は結構違う。GO/DONEビットの位置も違うとか? ヘッダファイルだ。自作のヘッダファイルを確認してみよう……。

  「2!」

  ……2じゃねーだろ、1だろッ!! GO/DONEはBit1だよ。なんでオレ2なんて書いてんだよ。修正、修正。あまりにタコな理由である。サッサとPICに書き込んて動かしてみよ。

  ……動いたよ。ちゃんと電源パルスが出るようになったよ。あれ? でも、今度はA/D変換に使用するピンの電圧が常にゼロだ。一応、センサの代替りに10kΩをつけているから、1.5Vが出ないとイケないんだけどな。コレはアレか、ソレだ。ドレだ? そうそう、入出力設定のTRISIOがマズいに違いない。

  つーか、PICのデータシートのA/D変換の記述が微妙だったので、ワザワザ出力に設定したのだが、やっぱり入力に設定しなければならなかったらしい。サクサクと修正。もう一度、書き込んでテスト。よしゃ。今度はちゃんと中途半端な電圧が出るようになった。あとは、A/D変換結果をアナログメータの針に反映するようにファームを修正する。

  とりあえず、ブレッドボード上の10kΩをセンサに見立てているトコロに、並列に10kΩを追加する。すると合計が5kΩになるから、ピンにかかる電圧が下がる……オシロで見ても実際に下がる。しかし、針が動かない。んー、また、動かん。A/D変換が失敗しているのか、基本的なロジックが悪いのか。今日はこの辺で。ベンベン。