PIC12F675を使いADC入力値をソフトUARTで送り出す

2010.05.29

1.始めに

 8ピンDIPのPIC12F675はちっちゃいながらも力持ち。メモリーは1kワード、ポートは6つ、アナログ入力もこなし、ADCもあります。惜しむらくは外部とのシリアル通信ポートがないところでしょうか。

 今回試作は今後のお楽しみ試作用基本実験として、ADCの入力を取得し、ASCI文字4桁(mV)にしてシリアルポートから送り出そうというものです。汎用ソフトシリアルドライバがまとまるかと意気込み始めましたが、それはちょっと無理でした。とりあえず2400bpsのシリアル通信用の組み込み関数を作りましたのでご紹介いたします。

2.回路構成

 まずは回路構成です。GP0がアナログのADC入力、実験では半固定抵抗につなぎます。GP2はデバック動作確認用のLED点灯用出力ポート、4.7kΩ経由でLEDにつなぎました。GP4はシリアル出力TXout、GP5はシリアル入力RXinです。GP4,5はRS−232Cとして使うためMAX232CPE経由でDsub9Pコネクタにつなぎます。

 ICSPコネクタとPIC用ICソケット、デバッグ用LEDなどを配線したユニバーサル基板をハンダ付けし、それをブレッドボードへMAX232CPEなどと一緒に差して回路を作ります。

回路図作成には水魚堂のBSCHを使用しています。

 

3.ソフトウェアUARTプログラム

 始めは汎用速度のドライバであるHiTECH社のコンパイラに付属してきたbit-bangingを使うルーチンを試しました。コンパイルして、逆アセンブルしたコードを見ても簡単に使いこなせません。そこで「C言語で始めるPICマイコン」(中尾真治著)の記事などを参考にdelay関数を組み込んでserial2400.cというのを作りました。クロックは内蔵4MHzで組んでおります。使うときにはヘッダファイルも必要です。

 ハイパーターミナルと繋いで確認しましたが、画面の上半分が付属のserial.cで文字化け起こしたところ。これからするとタイミングが遅すぎるんですね。最適化でループ3インストラクションにならないと成立しないようです。下半分は今回作成ルーチンによるものです。putch,getch,getcheのどれもが動きprintfにもうまく組み込まれたようです。

4.MAINプログラム

 こちらはPIC16F88で実験したものを修正して使いました。プログラムは次ですPCのキーボードから1を入力すると動作確認用LEDが点灯、0で消灯。2を入力するとGP0入力をAD変換した値をmV単位で出力します。誤差があるので信用できるのは上位2桁ぐらいです。3を入力すると延々、入力取得、変換、出力を連続します

5.実験風景

 こんな感じでPIKKIT2とつなぎ、PIC12F675デバッグ用の基板、RS232C用回路や半固定抵抗器はブレッドボードに差し込みます。PIC12F675は別売のアダプタが無いとシンボリックでバッギングができませんので、PIKKIT2はライターとして使用しています。

 

PIC12Fの一覧表へ戻る。

l

COPYRIGHT nobcha 05/29/2010

inserted by FC2 system