Crowd Funding に、2進数表示の時計があったので、PIC 16F1827と、フルカラーLED 7つ、および時計用の32.768kHzの水晶発振子。あとは、モード設定用のタクトスイッチ(赤、黄色、青)を使って作ってみました。
最初、実験用にdelay関数を使って無限ループでLEDが適当に点灯するプログラムを作り。
動作確認後、32.768kHzで0.5秒間隔で正確に割り込んで、時計変数を更新する仕様にしました。
PIC Kit3のプログラマと製作したBinary Clock |
コンデジのLiIon電池と充電器パーツで電池駆動にしました。
表示モードと時計モードのスペック
Easy, Auto1, Auto2, Pro1, Pro2のモードを作りました。
|
以下、Pro2モードの動画です。時・分・秒が加色混合されるので、多分、何時か.. すらもわからないと思います。Pro1として時・分だけの加色混合モードもあります。電源アダプタは余ったAUポイントで貰った、ガラケーのアダプタが5V出力だったので再利用しています。
以下Auto1モードの動画です。BCD(2進化10進数)表示モードです。
5時45分頃というのがわかると思います。
セットアップモードと各種モードの説明
回路図: 3色LEDをダイナミック点灯をかけています。
- 初めPICのクロックを500kHzにしましたが、あまり最適化されていないプログラム(300行ぐらいでしょうか..) というのもあり、結構ちらつくので、8MHzにしたところ問題はなくなりました。
- PICはクロック発信回路を内蔵し、時計用水晶発振子を直付けできるので、回路は簡単です。PICのプログラマ PIC Kit3から5Vを供給して、プログラムをしつつ動かしていたのですが、時計割り込みがかかりませんでした。
- 割り込み動作なので、XIDE 付属のsimulator でも問題は不明
- クリスタルのつながるT1OSO, T1CKIは、それぞれPICのプログラム信号 ICSD (データ), ICSC (クロック)で、PIC Kit3の負荷につながるので、これをつけたままでは水晶発振子が発信していなかったのが原因でした。
- 水晶発振子には68pF (指定では33pFですが)でGNDに繋いでいます。PIC Kitの案内には、ICSD, ICSCにはキャパシタは繋がないこととありますが、この程度のキャパシタでは問題はないようです。なしでは、水晶発振子が動かないでしょう。。
- タクトスイッチはPICのWUPモードで内部pull upしたのですが、どうも誤動作するので、10k Ohmのpull upを3本追加しています。
- MAC OS-XではUSB接続のPIC Kit3が認識できないので、win10に移したのですが、こちらは、日本語のfolder/file名がコンパイル時に認識できなかったり、日本語文字コードが化ける(UTF-8のMacと、S-JISのwinで違うし。。)ので、ファイル・フォルダ名・コメント等は全部英語が無難に思います。
- プログラムはCで400行程度。PICのプログラムメモリ利用率は20%ぐらい。
- XC8ではPICのconfigurationは#pragmaで記述。(生成支援ツールもあります)
- そのほかのレジスタは、マクロとして定義されているので、入出力は極めて簡単。
- 12 bit命令の8bit PICは直接指定できるプログラム・メモリ空間が小さいのですが、Cで書けば、全く気にしないで書けます。
- その他、X IDEやXC8のCコンパイラは1行に、セミコロンで区切った複数文が書けない、intが16 bit、enumが使えない、など、若干違いがありそうです。
テストに使ったランダム点灯をデモモードとして残しました。Upを押しながら、Modeを押すと、出入りできます。デモモードでは、Mode, Up, Downのタクトスイッチそれぞれを押すと、赤・緑・青の点灯が抑制されたり、されなかったりを制御できます。
以下ビデオです。 |
プログラムに先立ち、I/Oピンの使い方、Configuration、変数名・関数名をexcelで仕様化しました。
が、例によって書いているうちに、変数名・関数名は変わりました。
作りながら考えるのがプログラミングの醍醐味でしょうね。 |
参考資料)
- 電子工作のための PIC16F1ファミリ活用ガイドブック 大型本 – 2013/4/11後閑 哲也 (著) 3,456円 http://amzn.to/2xJjKAZ ー がわかりやすいです。ただ、コンパイラやツールが若干古く、以下関連リンクを参照する必要があります。タイマ割り込みの設定は、この本では、16F1937について説明があり、ところによっては16F1527だったりしますが、今回使った16F1827でも、ほとんど同じでした。
関連リンク)
- PIC 16F活用本作者のページ: http://www.picfun.com/ いろいろ情報あり。
- Configurationの説明あたり http://www.picfun.com/p818frame.html
- XC8のconfigurationは自動生成して #pragma configをつかう http://www.picfun.com/bookmntU.html
- PIC 16F1827 と他のPICは若干違うので、そこは、PICの英語仕様書をダウンロードして確認のこと。