PICで気圧計 by 18LF2550 基礎実験 その2


秋月さんの参考ハード図では、18F2550を外部の8MHzにクリスタルを付けて稼働している。これを18LF2550の3.3V電源駆動で使用するにはユーザーズマニュアルのグラフから20MHz付近となる。(28-2図参照)



96MHzのPLLシンセクロックを分周するには、1/2、1/3、1/4、1/6の4種類で、それぞれの分週結果は、48MHz、32MHz、24MHZ、16MHzとなる。
3.3Vで動作させるのには、このグラフから24MHzではとても無理なので、1/6の16MHzを今回のCPU用内部クロックとする。これなら回路全体の消費総電流によってはバッテリーでも駆動できるかもしれない・・

PICは1サイクルで4クロック必要なので、1命令の処理に必要な最小時間は、16MHzで駆動した場合には0.00000025Sec=0.25μSec=250nSecである。

今後、他の参考アセンブラーソースプログラム上での、ループによる遅延タイマールーチンでは上記の1命令250nSecを基準に遅延用のNOP等の個数や、ループ回数を調整しておく必要が有る。

前置きはこの辺にして、何処から取りかかれば良いのやら・・先ずバックライト付き2行LCDユニットを3.3Vから例のICL3232CPZの電源発生回路を利用し駆動できるのか実験してみる事にしました。

こんな回路でちゃんとバックライトのLEDを光らせる事が出来るのかブレッドボード上で実験・・

以外と簡単に光ってしまったが、こんなに暗いのか心配になる位に心細い明るさ・・
そこで試しに5.0Vを直接繋いだらやはり同じ様に暗かった!
LCDユニットを壊したのか?

予備のバックライト付きのLCDユニットに交換してみたが、やはり暗い!
壊した訳ではなく、こんなもんらしいと安心しました・・

気を良くした私は、PIC 18LF2550 を搭載して3.3Vで駆動して、このLCDユニットを試験してみようとPICのハード回路を追加してみました。LCDユニットへの配線が面倒なので、基盤上に電源部、LCD部、PIC部を実装して見ました。

LCDユニットを駆動する参考回路図の通りのアセンブラーソースプログラムがみつからなかったので、とりあえず、Port_B を全て使用した回路に変更して実装してみました。

ハード回路が完成し、1行目にStart!の文字と、2行目に16進2桁でカウント表示をする簡単なでアセンブラソースを16MHzバージョンになる様にタイマールーチン等を変更してビルド!PICに書込み!電源ON!・・・あれ?!ナーんかおかしい?!表示が上の段だけ黒くなってそのうちに白くなって・・なんかそれを意味も無く繰り返している!?・・

ハード回路を何度も点検したが間違いはないし、ソースリストを何度も点検してもタイマーの部分の計算も間違ってはいないし、狭い範囲のジャンプルーチンをメインプログラムの手前に配置しても治らない・・
PICやLCDを予備の新品に変更してもだめ!

しまいには、LCDユニットへ書込み信号しか使わないならば、3.3V系のPICで直接5.0VのLCDユニットを駆動できるという記事を見つけて、例のICL3232CPZの電源発生回路をパスしてLCDユニットを5.0Vで駆動できる様にハードを変更!・・だめだった!

こうなると、やっぱり怪しいのはConfigだなぁ・・自分が見つけてきた参考LCDユニット駆動ソースプログラムは、18F系のUSB機能の無いタイプ用なので若干の不安は有ったのだが・・

そこで、ようやく気になっていたConfigの詳細な設定に着手・・やっぱり付け焼き刃は駄目なのでした。

ヒントになったのは、秋月のコンフィグレーション表示・・
18系はCFG1〜CFG7まである!これは結構な組み合わせなのだが、一つ一つ意味を考えながらやってく事にした。

本当は一番始めにやるべき事ですが、18系のUSB機能付きは、その内部クロックの設定を理解するだけで随分疲れてしまったので・・
ついエイやぁって他の設定をいい加減に省略してクロック関係のだけで何処まで動くのかなぁなんていい加減にやったら駄目でしたね!

えーと、何んだこれ!PBADEN <4:0>=A/D ???いままで、よくこれでPort_B 全8BitでLED点滅実験が出来ていた物だ!今頃になって、こんな18系の初期設定ではまともに動きそうも無い事に汗・・

さっそく、18F2550用の他のC言語プログラム例から一般的な設定を調べて、

; Oscillator Selection:

CONFIG PLLDIV = 2 ;4MHz = 8MHz / 2
CONFIG CPUDIV = OSC4_PLL6 ;16MHz = 96MHz/ 6
CONFIG FOSC = HSPLL_HS
CONFIG WDT = OFF
CONFIG PWRT = ON
CONFIG MCLRE = ON
CONFIG LVP = OFF
CONFIG PBADEN = OFF

この最後の1行 CONFIG PBADEN = OFF が今回の設定忘れ箇所だった訳だ!
ちなみに、最後から2行目の CONFIG LVP = OFF を忘れると、Port_B の RB5 が 汎用 I/O として機能しないので、注意が必要!

そんな事も知らないのか?と言われても、18系がそもそも初めてなのだからしょうがないのです。なにもわからないところから、始まったのですから・・勘弁してください・・

これらを、アセンブラソースリストに追加してビルド、書込み、実験。・・み、見事に1行目にStart!の文字!そして2行目に16進2桁でカウント!
大成功でした。






18LF2550のPICとしての初期設定(Config bit)が本当に大変だった。

始めは、壊したんじゃないかと思う位何も表示されず、
ハードを何回も見直し、部品も何回も入れ替え!

で、結局コンフィグレーションビットの定義がまずかっただけだった。

この回路は、全て3.3Vで駆動されています。

実験としてLCDユニットが上手く動いたので、
今度は気圧センサーとSPI通信で繋がなくてはならない!

自分で見つけた18F系のSPIアセンブラーの参考リストが有るけれど、
LCD実験回路は、秋月の参考の回路図とポートの使い方が違う!

この実験回路のままでは、LCDと気圧センサーユニットのI/Oが互いにバッティングするので、
どうしても、秋月の参考回路図に直さなくてはならない!

先ずは、秋月のLCDユニットのハード回路に合う様にアセンブラーソースを変更して、
ハードも秋月バージョンにしてチャンとLCDが表示されるかをテストしなければならないが、
まだ、LCD用のソースの中身をちゃんと把握していないので・・いつになる事やら!

それがうまく行ったら、今度はSPI通信のテストです!

SPIは全く解らないので本当に未知の世界!

まだ、まだ遊べそうです。(Apl. the 25th 2010)


このアセンブラーソースリストは、
後閑 哲也 氏著「電子工作のための PIC18 本格活用ガイド」技術評論社 
ISBN4-7741-2017-0
の 8-1-6 液晶表示器の使い方 よりソースリストを一部変更して使用しております。



今度はLCDの配線を、秋月の参考回路図の通りにして見ました。

上記ハード回路図に適合する様に、アセンブラーソースのLCDの制御部分と関係するポートの設定を変更して実際に稼働しました。(写真は省略です。)

ポートBの上位4ビットでデーターを送っていたのが、ポートAの下位4ビットに変わったので、データーをマスクする位置が変わったりとなかなか面倒でしたが、問題なく動きました。


ここまでは、順調です。

さーて、気圧センサーとのSPI通信用のポートもこれで確保された事だし、いよいよここからが最終目的の気圧ユニットとの勝負です・・・

じっくり、パレットソフトさんの記事や、SCP1000-D01のデータシート、それに、PIC 18系でのSPI通信の内蔵ユニットの使い方を読み解かなくては・・

えーと、先ずはPICをマスターに選択してそのクロックレートを決めなくてはいけない・・
またしても、内部のシステムクロックの分周1/4、1/16、1/64、もしくは、タイマ2の出力・・?・・
本には、「タイマ2では、タイマ値、プリスケーラ分周、ポストスケーラ分周の組み合わせで幅広いクロックレートの指定が出来る」と書いてあるが・・?機能が多すぎて解らない・・

今回のシステムクロックは16MHzと考えると、その分周値は、4MHz、1MHz、250KHzとなる・・

今回の気圧センサーでの最大クロックレートは500KHzかぁ・・
そうなると、250KHz・・は、早いなぁ(相対的だけど!)

そんなに早くなくても良いんだけどタイマ2を使った事が無いし、とりあえずこれでやってみようかな?
この1/10でも良い様な気がするのですが・・

非同期シリアル通信なんか9600bpsで十分だし・・
同期3線式のSPIは、早くても同期だし距離が短いので大丈夫なのかなぁ?

さて、さて、いつになる事やら・・先は遠い!


注意事項
General disclaimer
トッ プページへ

なお、当ホームページで公開しているデーター(写真、音声)等を個人の枠を超えて複製・転用する事はご遠慮下さいませ。
ご意見/苦情/ご感想はこちらまで