
最近クルマに付ける電子工作を作るときにはマイコン(PIC)が手放せなくなっています。
リレーやトランジスタなどでメカ的(?)に動かすのも楽しいのですが、マイコンを使用すると細かい制御もできますし部品点数を少なくする事もできます。
専門的な勉強もした事ない、まだマイコンを初めて触って半年とちょっと若輩者ですが、色々なPICを試食してきました。
「
クルマによく使用するpic達」で8ビットマイコンである
PIC16シリーズを紹介しました。このシリーズは値段も安く、機能も限定しているPICが多く入門向けの位置づけですがちょっとした処理に使うのには重宝しています。
いままでこのシリーズをたくさん使ってステップアップしてきましたが、
この度、「
自作 時計 & 外気温をルームミラーに映してみた」で家庭用テレビ等にNTSC規格で映像作ろうとしたときPIC16シリーズでは限界がありました…。
NTSCの映像を癖の多いPICで作ること自体無理があるかもしれないのですが、面白そうだったので…w
「
NTSC規格」についてはWebに詳しい情報が、たくさん転がっているので探してみてください。
今回作ったプログラムはこの規格を極簡略化したものです。
簡単に言うと映像作成は「輝点を左から右、上から下へと動かして映像をつくる」です。この左から右への軌跡は「ラスタ」と呼ばれていて今回の回路ではラスタの表示時に0.3Vで「黒色」、1.0Vで「白色」のそれぞれを出力すると映像の白黒色が変わります。文字や図の書きたい位置で電圧の出力を変えてやるイメージです。
ですので横方向に描画している時間内に何回0.3Vと1.0Vを繰り返せるかによって横方向の解像度が変わります。
縦方向は、ラスタが何本描けるかによって縦の解像度が決定します。
ちなみに、ラスタ一本の描画時間は63.5μ秒です(=100万分の63.5秒)。
以上からも、この映像を表示させるには「
スピードとタイミングが命」である事が分かります。
PIC16シリーズでこの処理にトライしてみました。いつも使っているプログラム「C言語」で書くとプログラムに無駄が生じるので全てを「アセンブリ」で書き直したりやってみたのですが、作成した映像は文字認識はできるのですがドットが荒く表示として納得のいくものではありませんでした…。
そこで、今回はPIC16シリーズに見切りをつけてPIC16Fに比べ3倍近く速度のでる
PIC24Fシリーズに手を出してみました。
16ビットのマイコンです。中でも今回試食したPICは「
PIC24FJ64GA002」といものでピン数も28ピンと今まで使っていた開発環境をそのまま使えるということでこのPICをチョイスしました。コンパイラは今までのPIC16シリーズのものは使えませんので別途用意が必要です。フリーですけどね…。

まず、このPICを使って最初に面食らったのが電源の違いで
3V以下で動作する事でした。今まで使っていた5Vが使えないんです…。低電圧化するのは歓迎ですが、5Vも使えるようにしてもらえたら今までの回路にも移植できるのに…。
んで、今回からは3Vと5Vが両方扱える電源を「
車載用」と「
卓上用」に別途作りました。写真は「卓上用」の電源です。12Vの家庭用アダプタから「3端子レギュレータ」で5Vと3Vに電圧を降下させてます。
今回このPICを使った回路、「
自作 時計 & 外気温をルームミラーに映してみた」でPIC24Fにやらせた仕事(機能)は以下です。
①I2C
I2C対応機器である『RTC-8564」(リアルタイムクロック)との通信に使いました。I2C(アイ・スクエアド・シー)と読むらしい。これは同期シリアルポート(SSP)の一つで、I2C周辺機器とマイコンを通信する規格です。マイコン同士の通信も可能です。たった3本の電線で周辺機器との送受信がが可能となり配線が簡素になります。今回使ったマイコン「PIC24FJ64GA002」はこのRTCの機能は備わっていますが、I2Cを使った事がなかったので勉強のために使用してみました。
まずは…、
「
I2C通信でRTCモジュールから日時データを取得します…」
②A/D変換
温度センサーである「LM61BIZ」の電圧(
アナログ)をマイコンで扱える
デジタルデータに変換する機能です。計算方法は「
自作デジタルモニターを作ってみたVer.2」の「外気温」と全く一緒なので参照ください。
次に…
「
温度センサの電圧をA/D変換し温度データを計算する…」
③Timer1〜3
「PIC24FJ64GA002」には、5つのタイマーが備わっています。今回は3つの「タイマー割込み」を使いました。「タイマー割り込み」とは、簡単に言うと指定時間が来るとプログラムを中断して指定した処理を割込ませて処理をさせる機能です。前述しましたが、今回の回路は「タイミングが命」だったので3つのタイマーを使って画面作成のタイミングを取っていました。今回のプログラムで一番短いタイマーで4.7μsec(=100万分の4.7秒)毎に処理をさせたりしてます。タイマー割込みは概ねどのマイコンにも備わっている機能です。
そして…
「
画面に表示させるために3つのTimerをつかってNTSC規格に則ってタイミングを取ります…」
④SPI
これも同期シリアルポート(SSP)の一つで、一昔前まではよく使われていたらしいのですが、今はSDカードの読み書きで頑張ってるくらいらしいです。SPIもデータの送受信に使われますが、今回はこのSPI本来の使い方ではなく、画面の画素データを送る手段として使いました。一回の命令で16bitのデータが一気に送れます。この部分は某Webページの考え方を拝借しました。
次に…
「
タイミングに合わせて表示したいグラフィックデータをSPI通信に乗っけてで出力してやる」
⑤外部割込み
これも割込み機能で、あるピンが0V→5Vまたは5V→0Vになったときに指定した処理をさせる機能です。今回は、時刻合わせ用にボタンを3つ付加したので、押されたら各割込み処理ができるようにしました。「青」ボタンを押すと項目の選択で押すごとに分、時、日、月、年が順番に点滅し、「橙」ボタンで数字を進める、「黄」ボタンで数字を戻す。みたいな処理をさせて時間合わせをしています。
以上のようなマイコンの持っている機能を使って、トライ&エラーを繰り返しながら何とか形にしました。
今回使用したマイコンは機能が多彩でまだまだ本来の力を持て余してると思います。
結構使える面白いPICだったのでどんどん使っていきたいですね…。
初めての試食するマイコンはやはり習得するまでに時間がかかりますw
この回路も、構想から考えると仕事の合間を縫って3ヶ月近くかかっています。
ま〜思った通りにうまく動いてモノになったときの楽しさが自作電子工作の
醍醐味でしょうねw
ブログ一覧 |
電子回路 | 趣味
Posted at
2013/01/10 18:03:47