実験室-Danger-では大変危険な実験をしています。
このサイトの記事をまねして行った、制作、実験により起きた事故については一切責任を負いません。
きちんと危険性を理解して実行し、友達等に簡単に貸し出さないようにしてください。

2013年1月3日木曜日

8ピンのpicで遊ぼう

お久しぶりです。いや~年があけてしまいましたねー。あけおめです!
前回、マイコンをさわりにpic18f2550を利用して遠隔操作装置を製作しました。
ただし、前回はIOの演算を使用しただけのもので高性能なpic18f2550の機能の少しも発揮されてないかわいそうなものでした。
なんとか、マイコンをしっかり勉強したいなーとおもっていて、そこで図書館でこんな本を発見しました。

8ピンPICマイコンではじめる 作る、できる 電子工作入門

これは!とおもいまして、冬休みを利用してこれを借りて勉強しようと秋月でこの本で使用する部品を買い揃えておきました。
pic12f675とpic12f683をこの本では使用します。

ところが、この本、コンパイラ(人間が書いたプログラムをマイコンが読めるようにするためのものです)をCCS社のものを使っています。これ、多分有料なんでしょうね・・・。入手方法がわかりませんでした。(無料ですよ、という方、ぜひコメントください)
ネット見ても割といろんな人が使っていて無料なのかとおもっていたのですが。
趣味でPICを使う人はとても大金はたいて買おうとは思いませんよね。
僕が主によく使うのはHI-TECH社の無料のコンパイラです。

LEDの点灯回路から部品の基礎知識など、いろいろ初心者に親切なのにそこだけざんねんな本でした。

それならやってやろうじゃないか! インターネットが普及した今独学というのはかなり敷居が低い勉強法になっています。
今回はpicをはじめて電子工作をパワーアップさせたい!
プログラムも基本はわかるけど、でもなんか難しい・・・今回はそんなかたにお届けする記事にしたいと思います。


基本的に使うのは
・ブレッドボード
pic12f675および、pic12f683(それぞれ秋月電子では数種類販売していますが、ブレッドボードで使用するので、DIPパッケージのものを選びましょう)
pickit3(ピックに書き込むときに使います)
あとはピンヘッダや適当なLED(あまり高輝度なものは電流不足でうごかないので実験用の低輝度なものを使いましょう)、抵抗(10kΩと300Ωを5本づつ位用意しておくとOK)、タクトスイッチを用意しましょう。

microchip社からMPLABXとHI-TECHのCコンパイラをダウンロードしインストールしましょう。
このあたりの手順はググればいくらでもでてきました。多分、インターネット慣れてる人ならあっという間です。

LEDをつけられるようになるまでは、ちょっと大変です。
僕はこちらを参考にしました。
理解できないことがたくさんあると思います。グーグルでそれぞれのpicのデータシートを用意して[ctrl+F]でレジスタの名前(TRISIOなど)を検索して働きを見てみましょう。マイコンと一緒に秋月が付けてくれる奴は簡易版です。でも大事なところが凝縮されているためこれも十分参考にできます。
まぁ、適当に解説させてもらいますと、

#include ってところで使用するヘッダーファイルを指定します(コンパイラによって特別なヘッダーファイルがあります。)htc.hには使用するマイコンによって専用のヘッダや、stdio.hなど基本のヘッダファイルを自動でincludeします。

TRISIOはそれぞれのピンをどうやって使うかを指定するレジスター(値を入れておくところ)です。
1にすると入力にできます。 あ、でも今回つかうマイコンはGP3ピンは入力にしか使えません。
細かいことはデータシートにあります。長方形が横に8つ並んでいるようなページが一番参考になりますよ。

OSCCONはマイコンのクロックをどうするかっていう設定レジスタで、GPIOがマイコンの各ピンを表すレジスタです。出力モードの時、1にすれば5Vになって0にすればGNDになります。逆に入力モードの時は5Vに近いとき1、GNDに近いとき0となります。


あと、MPLABXで__delay_ms();をつかうと赤線がひかれますが、これ、そのままコンパイルできました。

では、基本的な授業はこのへんで。(かくのがそろそろめんどくさくなってきたとか口が裂けてもいえない)

今回は秋月の準新商品、フルカラーRGBLED付ロータリーエンコーダを使ってみました。
オーディオ工作もやってる僕はこのパーツみるだけで夢が広がるわけですよ((

回路はこれ。
これ、配線ちゃんと考えたらJMPは省けるんです。(JMPを省くならロータリーエンコーダーの4番ピンをGP4かGP5にしましょう。もちろんプログラムも多少変わってきます。)
今回はこのままでした。
あと、あくまで実験なのでブレッドボードでおこないます。






ロータリーエンコーダーの右回転と左回転の検出ですが、このロータリーエンコーダーはワンクリック回転するたびに位相差パルスを発生させます。
あ、わかりにくいですよね。
データシートを見るよりもLEDをAとBにつないで光り方を観察するのがベストです。

ワンクリック回転したときに下のようになります

A   1→1→0→0
B   0→1→1→0

(0をスイッチが開いている状態、1をCピンとショートとします)
これを(A,B)二けたの2進数として考えると、

(A,B) 2→3→1→0

ですよね。
逆回転させたなら

(A,B) 1→3→2→0

となります。
これはかなり高速な計算が必要となるので、マイコンによってはハード的にエンコーダーが付いていることがあります。でもプログラミングでもなんとか動作しました。
高速さが求められるので、できるだけ、スマートに組みましょう。
また慣れないうちはタクトスイッチを並列に入れて、動作確認できるようにしましょう。
これを考えるのは一番楽しい作業だと思うので、皆さんにお任せします。プログラムはもちろん公開しますがね。


そしてLEDの制御。ついたり消えたりするだけでも7通りの色を作れますが、せっかくなのでいろんな色を作りたい!そうおもいませんか?
そんなときに役立つのがPWM制御です。高速でちかちかさせるわけです。
pic12f683にもハード的にPWMの機能はありますが、使えるのは1ポートのみです。
そこで、これもプログラムで組んでしまいましょう。

そこで使用することになるのがタイマー0タイマ割り込みです。
タイマーとはいってもカウンターをすごい勢いで増加させて時間を比較しているわけです。
イベントとかで入場者をカウントする人が銀色のカウンターをおしてますよね。あれを連打しているようなものです。それが9999になってもう一度ボタンを押したとき0000になる、その時に発生するものがタイマー割り込み関数です。

タイマー割り込みを行うには

タイマーを起動、タイマーの中身を消去、タイマー自体の割り込み許可、全体での割り込み許可(必要に応じてプリスケーラを確認)と手順を踏みます。
めんどくさそうに見えますね。めんどくさいです。
詳しいことは今回配布するファイルに記しておきました。実際のプログラムと比較しながら行ってください。

タイマー割り込みの中でさらにカウンターを設けて明るさに合わせてLEDをオンオフします。
これもプログラムが得意な人なら考えるのが楽しいところ。

では、書き込み。
















どうですか?思ったような動きはできましたか?
このロータリーエンコーダーには押しボタンスイッチも内蔵されています。
赤色を調節して、ボタンを押して緑を調節して・・・と好きな色を指先で作ることのできるようになるプログラムも組めます。
そこからはもっと好きな色をかんたんに作れるように、色相、彩度、明るさから色を作れるようにプログラムを改良してみました。
この当時はタイマ割り込みがまだ慣れなくて添付したプログラムでは低速な動作となっています。
つまりLEDがちかちかしてて写真写りが悪いです。


お次はRCサーボモーター。
ラジコン用で、電源を印加して信号のパルス幅で角度を指定します。
結構高価で秋月の一番安い奴でも一個800円。
学生にはちょっと厳しいです。






















これもほかサイトを参考にしてくださるとわかりやすいです。
でも割と簡単に使えるようになります。

こんかいはタイマ0割り込みを20msごとに発生させ、その中でdelay関数を使いました。
ところがこの方法、あんまりよくないらしく、思った通り動きません。
しっかり動かしたいなら、タイマを二つ使ってプログラミングするのがよいかと思います。

それにしてもサーボモーターの動き見てたらやりたくなるよね。
これ。

いま、「古ッ」って言った人、正直に言いなさい。おこらないから。
昔はやってましたよねー。最近某動画サイト見ないので今もやってるかどうかはわからないのですが。
手前のいかにもプリン容器を改造したようなものがコントローラーです。
上のボタンをたたくと右の彼女がネギを振ります。横についたスイッチを押すと上にふりあげて、その状態で上のボタンを押すと上の方でネギを振ります。音ゲーみたいでたのしいですよ。
(突貫工事なので張りぼてです。これはひどい)




こちら、今回制作したプログラムや解説など適当に詰め込んだファイルです。皆さんのお助けになればと思います。もってかえってください。




マイコンというのはハード固有のクセ、コンパイラのクセ、そんなものたくさんの要素がかさなって始めたころはなかなか進みません。
プロでも初めて使うマイコンなどは苦労するそうです。
ですが、マイコンを使い始めた時にしっかり苦労してコンパイラの癖をつかみ、一つ一つの部分を着実に完成させ組み上げていくことが、バグの起こりづらく、起こってもメンテのしやすいプログラムを作るコツだそうです。
マイコンの可能性はまだまだあります。僕も勉強頑張ります。皆さんもマイコン、始めてみてはいかがですか?きっと世界がひろがります!

roboでした!

P.S
実際解説でもこんな文章ばかりのもの需要ないですよね。もっとわかりやすく開発の進むような記事がかけるといいなあと思います。

7 件のコメント:

匿名 さんのコメント...

あけましておめでとうございます。
はじめまして~埼玉で高校生やってる
PPSです!
以前からblog読ませてもらってるんですが……(;´д`)すごいっすね(笑)!全部俺が作りたい物ドストライクです!!!!!!!!
今さらながら高出力レーザー作ってます♪!(笑)

Unknown さんのコメント...

明けましておめでとうございます

相変わらず、さすがのマイコンテクですね・・
弱電が苦手なぼくにはさっぱりですw
ブレッドボードは一応持ってますがLED点滅回路しか組んだことありませんし・・

今年もよろしくお願いいたします

Tomorrow さんのコメント...

僕もPICkit3をこの前買ったんですが…
インストールした物とかが上手く動かないんでさわれないんです…
PICkit3のソフトウェアをダウンロードしたんですが、PICの種類を選ぶ所で何も開けないんですねw
なので只今保留中です。
まだ全然プログラムはまともにできないです…
今年も宜しくお願いします。

robo さんのコメント...

Tomorrowさん>コメントありがとうございます。僕もpickitがMPLABで認識されないことがありましたが、再起動してソフト起動するまえにpickitをつないで、MPLABを起動させるのがコツでした。 ちょっと使いづらいですよね。。。

あーーじろさん>今年もよろしくおねがいします! いやー、まだまだですよw

匿名さん>はじめまして!コメントありがとうございます。
僕も小さなころに夢見てたものが少しづつかなっている感じです。
お、レーザーですか!半導体レーザーだと思いますが、冬場は静電気で素子を壊しやすいです。お気をつけてがんばってください!

銘柄選び さんのコメント...

とても魅力的な記事でした!!
また遊びに来ます!!
ありがとうございます。

robo さんのコメント...

銘柄選びさん> そういっていただいて光栄です! こちらもこれからもがんばります!

匿名 さんのコメント...

はじめまして。
CCS-Cは海外のCコンパイラです。
結構高く2万5千円くらいします。
国内ではつくば市にあるアイ・ピイ・アイという会社が代理販売していますよ。