PIC で MP3 目覚まし時計がピクピク #11

 内蔵クロックは時計として使えるか

20120523_026  PIC の内蔵クロックから1秒を周期的に取り出す方法について仕様書と格闘しました。クロック周波数1MHz で動いているものに対して Fosc/4 = 250kHz となります。 1:16 プリスケーラで 15,625 Hz まで逓倍し、これを 8 ビットタイマ TMR2 で 125(=PR2) までカウントさせると 125Hz でコンパレータが EQ 信号を出します。さらにポストスケーラで 1:5 逓倍すれば 25Hz で周期的に割り込み信号を発生させることができます。TMR2 は自動的にリセットされるので、この動作は一度設定すると CPU が TMR2 にアクセスすることなしに永久的に動き続けます。IYN の割り込みルーチンでは、25 回目の割り込みかどうか判断し、グローバル変数である 秒 変数に1インクリメントしています。

 3月上旬、まだコートが手放せない気温の時期に実際に 24 時間つけっぱなしにしたときの精度について実験してみました。と言っても、普段使っている時計に合わせて時刻表示を設定し 24 時間 PIC マイコンの内蔵クロックだけで時計プログラムを動かしてみるという内容です。最高気温が 12~3 ℃だったこの日の夜 19 時ちょうどに時計をあわせて一昼夜放置してみました。

 するとどうでしょう、5分と46秒も遅れていますよ。こんなにずれるものなのか、初めて体験しました。周期タイマーを正確に割り込み入れて動かしても 5分/日 の精度では、毎日時刻修正をするしかありません。これじゃあ高級機械式腕時計の何倍も出来が悪いということになります。はぁ、ちょっとがっかり。マイコンのクロックなんて大したことないんですねぇ。パソコンの CPU の内部クロックが周期がめちゃくちゃだというのと思想的に変わりないじゃないですか。

 対策として PIC マイコンは内蔵する温度計の値によってクロックの刻む速度を自分である程度(~数%)変更する機能があります。よくまぁ温度計なんて内蔵しようと考えたものですけど、どのくらいクロック周波数を修正するかはマイコンのユーザーが各自で条件出しして調べなければならないようです。そこまで時計の自動補正に手間をかけても大した精度を維持できないと感覚的に決断して今回は何も対策しないことにしました。

 時計の精度を上げるためにはどうしたらいいんでしょうか。32.768 kHz の水晶振動子をポートに接続するしか無いものなのか。それにしたって水晶も温度による誤差が生まれます。そもそもマイコンの電源投入時に毎回、時計の時刻合わせを手入力でやらなければならない不便さ自体が納得行きません。

 どうせなら JJY を受信して電波時計にしてあげたいじゃないですか。そうだ、次はそうしよう。わたしの自作目覚まし時計は時刻合わせは永久に排除してあげます。はぁ、しかし AM 帯の電波の受信すらやったことがないのでそのあたりから勉強しなきゃいけないのか…。

ゴーヤのカーテン育成 苗ポット植え替え編

 鳩に食われないか不安

20120519_033  ゴーヤの種は根が生え始めたものから順番に苗ポットに植えて行きました。水に浸してから3日間くらいテレビの前に置いておいたら、チョロッと根っこが出てきました。これはなかなか楽しいものです。ただ、水に浸しておくと種の殻にすぐにカビが生えてきて、菌糸だらけになってしまう種も多いので、毎日優しく水で洗ってあげていました。

20120519_032  すると4日目から本格的に根っこが伸び始めて、数時間おきには成長の変化が目で見てわかるくらい急激でした。種のうちの約半分12個はすぐに苗ポットに植え替えです。更に日にちが経つと残りの種もどんどん根を伸ばし始めました。物によっては種の殻を打ち破ってフタバの形が飛び出しそうなものも数個。

20120523_001  最初の12個は個別にポットに植えてあげてこれを1期生と呼ぶことにします。根が生えだすのが一番早かったチームです。


20120523_002  次の12個は2期生と呼ぶことにします。残りの数個は根が生える前にカビにやられてしまったのでここで脱落です。


20120523_003  IYN はセッカチにもゴーヤの種を2袋も買ってしまったので水に付けないでいきなり苗ポットに植えた種が10個くらいあります。こいつらはシッカリ水をやっているので恐らく元気なはずですが、種まきの瞬間から少しも姿を見せていないので研究生とします。

 1期生と2期生を苗ポットに植え替えたときに、ある日憎き鳩ポッポが IYN 上のベランダにやってきて苗を物色していました。IYN はすぐに追い払いましたが、彼らは植物の発芽時期は食べごろで美味しいということを知っているようで、しつこくやってきます。食われないうちに対処しなければなりません。

 さてこの状態で1週間近く過ぎて行きましたが、ちゃんと発芽している姿を見せてくれるのは果たして何個でしょうか。次のステップに進んだ人には名前をつけてあげます。あっちゃん、優子、たかみな、ゆきりん、まゆゆ、マリコさま…。違うか。そんな個性的に育つものかどうか確かめてみましょう。

ゴーヤのカーテン育成

 ゴーヤ育成、始めました

20120513_007  いきさつは、東向きのベランダの日差しが強くて朝すごくリビングが熱くなりちょっと困っていたところ、緑のカーテンを育てて日陰を作るというアイデアに出会ったわけです。そしてゴーヤは朝顔と同じくらい育てやすく、水さえ与えていれば大抵よくつるが伸びて育つそうです。真夏の直射日光を朝から浴びているとちょっとつらいので、これは涼しくなるし見た目も緑で気持ちがいいではありませんか。昨年までは気休め程度の打ち水をやっているだけだったので…。

 夏の野菜を育てるなら、種まきのタイミングは今を逃してはなりません。すでにホームセンターではきゅうりやトマトの苗が多く売りだされています。中でも人気商品はすぐに売り切れてしまうので種から育てなければなりません。ゴーヤの苗もスペースはあるのにこのところずっと売り切れ状態でした。仕方ないので種からはじめることにしました。

20120519_020  どのくらい発芽してくれて順調に育つものなのか全くわからないので種を二袋すべて蒔いてみました。発芽に導くには水につけて根が出るのを待ちます。IYN は特別にダイソーで小さなお盆を買ってきて、そこにキッチンペーパーを数枚敷き水で濡らします。その上にゴーヤの種を一粒ずつ置いて、水が乾かないようにラップをしました。さぁて発芽一番乗りはだれかなぁ。IYN のゴーヤ育成の日々が始まりました。

20120513_008

 ついでにシェリルがミントを栽培したいということで、こちらは苗から栽培開始です。水はけの良い石灰多めのハーブ用土の方がいいと思うんですが、野菜用のブレンド済み土を使っちゃいました。根付いてしまえばそれなりに育ってくれることでしょう。

 

PIC で MP3 目覚まし時計がピクピク #10

20120325_005 LCD がピクピクしてるー

 プログラムでは、現在時刻とタイマー設定時刻とを変数で記憶してそれをキャラクタ LCD に表示させるといものを書いてみました。といっても、main() から Initialization() を呼び出してそこから LCD の初期化ルーチンを呼び出して、帰ってきたら文字列を表示して、無限ループに入るというだけです。LCD の関数名は MPLAB X に付属の framework のサンプルコードから持ってきて流用しています。

 しかしーステップ実行してみていると、初期化コードを送信して待っているところだけですでに LCD が挙動不審。LCDWrite() で文字列データを送るところまでいかないのに、カーソルが進んだりしている怪現象が見られます。これはなんなんだろ、と思って自宅の低性能 USB オシロで PORTA の挙動を観測してみようと思いました。

20120308_db5_e  するとどうでしょう。黄色が初期化コードで DB[4:7] (PORTA[0:3]が立っているピンの一つです。紫のプロットはデータピットを立てた直後に E のビット(PORTA b'4)が立っている様子を示したものです。C言語でビット操作しているだけなのですが、PORTA[0:3] のビットは PORTA bit4 が立つと同時に落ちています。つまりイネーブル信号と入れ替わりでデータ信号がリセットされてしまっているのです。そんな仕様ありかよ??

 というわけで CQ 出版のマイコン工作解説本各種がキャラクタ LCD のイネーブルとデータとの配線を独立したポートに分けている理由が明らかになりました。同一のポート上でタイミングをずらしてデータビットと制御ビットを出力することは困難であるからです。これは H8 でも文献の内容から言ってそうなんでしょうか…。

 ここで冷静になって PIC16F1827 の仕様書をもう一度読み返してみます。なになに、PORTに直接ビットをアクセスすると回路の性質上、ポートの信号が変わってしまう?それを避けるためには LAT にアクセスするといい…。どこを和訳したか忘れましたが、つまり現在の PORTA の出力状態を温存したまま特定のビットだけ変化させたい場合は LATA に希望のデータを出力しなさいってことか。

20120325_008

20120308_db5_e_latch  おーちゃんと動いた。上の段が"Now" 現在時刻の表示です。下段が"Timer" 目覚まし動作が始まる時刻の表示です。これがやりたかったんですよう。たったこれだけのことに 3~4 日悩んでしまいました。でも配線とか変えずに解決できてよかったです。LAT というバッファができたのはどの世代の PIC からなのでしょう。16F877 にはもうあるみたいでしたが詳細は不明です。

 お次は内臓クロックで周期タイマーを作り、1秒たつごとにソフトウェア割り込みを発生させて、実際に時計として動かしてみようと思います。だんだん実用的な動きが見えてきてこーふんしてきます。はたして水晶振動子なしでの時計としての精度はいかに!!

USB Audio #6 セラロック良好

 最初の計画が忘れられず…

20120509_009  以前作成した 2704 USB-DAC 基板では発振回路がきちんと動いているのか評価することができずじまいだったのですが、12MHz くらいなら水晶振動子でもセラロックでもそれなりに安定して発振している様子を今回見ることができました。セラロックにしたほうが部品点数が削られるし、安くあげられることができます。浮いたお金でオーディオ用の高級電解コンを入手するという作戦にもできます。ナノラボのオシロなら 60MHz まで観測できるのでそれを借りて波形を見ることにしました。

20120509_003 20120509_002  ブレッドボード上に、セラロック単品と 74AC04 インバータを組み合わせただけの回路を作りました。本当は 1MΩの抵抗をセラロックと並列に接続していたのですが、取り外しても何も影響がなさそうです。これが PCM2704 のクロック入力端子につないだ場合にどれだけ影響があるのかは未知数です。しかし周波数も安定していて波形もきれいなほうだと思うのでこれを水晶振動子代わりに使うことは問題なさそうです。

20120509_007 20120509_006  そして気になるのは水晶振動子の発振がどんなもんだろうとかいうことです。最近のトラ技に書いてあったのですが、水晶振動子の両端に接続する小さなコンデンサは容量を少し小さめにしたほうがよさそうです。IYN は秋月で入手した 12MHz の水晶振動子に対して 22pF のコンデンサを接続しました。あと回路上は 1MΩの抵抗を並列に入れて同じようにインバータの入出力に接続しました。すると波形は似たようなものです。周波数もきちんと 12MHz で安定しています。

 これで安泰かというと USB DAC の回路そのものに接続してみないと何とも言えません。やっぱり USB DAC を作りこんでそのうえでオシロで測定してみたいと思います。今回の測定だって、写真の波形は 2 段目のインバータの出力にプローブを指しているだけなので発振回路そのものの波形を見ているわけではありません。しかし、セラロックを使ってUSB DAC を作ってみようという意欲がまた復活してきました。

表札を自作しちゃう#5

 アクリル板で同じコトしたら面白いかも

 ラッカー on アルミ板の切削条件出しをやっている最中に、アルミ板の代わりにアクリル材に置き換えたらどうなるだろうという疑問が湧いて来ました。片面をラッカーで塗ってそこを切削する。もう片面は透明のままなので、光の当たり具合によっては切削した部分がくっきり浮き上がって見えるようになったりするんではないだろうか、そう思うとまた心がウキウキしてきました。

 20120429_031 φ0.45mm の穴開け用ドリルを使って xy 速さ 2.0mm/s z 切り込み量 30 ミクちゃん(=1000分の30ミリメートル)の設定でアクリル板を切削してみた結果、z 切り込み量が少な過ぎで塗料の膜厚に届かなかったようです。この条件だと細かすぎて切削時間は 2 時間くらいかかりました。よーく光を当ててみると黒いラッカーが滑らかに削り取られている様子が見られます。しかも平らな面がとれていないせいで削り深さがまちまちになってしまいました。ミクの右下や IYN の左上はほとんど削れていません。

20120429_036  もう一度条件を変えて、今度は Z 切り込み量を 50 ミクちゃんまで深くしてチャレンジしたところ、とても綺麗に切削することができました。100 x 50 mm の面積に対してこれで切削時間は 2 時間です。アクリル面も少し削れたようですが、透き通るくらい綺麗な切削面が出てきました。アクリルが削れた場所は白く濁ってざらざらになることを期待していたのですが、0.2mm ピッチでツールパスを埋め尽くした場合はもうほとんどつるつるです。

20120429_037

 後ろから光を当てて透かしてみるととても綺麗な仕上がりになったことがわかります。アルミ板に比べてかなり精密に切削できたのではないでしょうか。これなら細かいイラストにも対応することができます。青緑色の LED で後ろから照らすととてもお洒落な痛表札になりそうです。アクリル切削面が滑らかすぎるので LED の直進性の高い光が散乱しづらいところはちょっと考える必要がありますが、痛表札としては文句ない仕上がりです。

 

 

 

PIC で MP3 目覚まし時計がピクピク #9

 実は 1602 キャラクタ LCD のプログラミング初めてだったりする

 なんか MPLAB X という統合開発環境が使えるようになっていたので、インストールしてみました。Linux でも Mac でも開発できるようになったのはいいですね。きっと Java かなんかで作ってくれたのでしょう。使い勝手はあまり大きく変化していないようですが、プロジェクトの新規作成をすると形式的に幾つかのソースコードファイルを自動生成してくれる点は進歩しています。今までの PIC より規模の大きなコードを書くための改善ということでしょう。コンパイルするとフラッシュとレジスタファイルをどれくらい消費しているかひと目でわかるようになっています。

 MP3 目覚まし時計のソフトウェアアーキテクチャの概略について説明します。これから、LCD 表示、キー入力による時刻合わせ、時計動作、タイマー動作の順にインクリメンタルにプログラミングしていこうと思います。初期化コードは、変数の初期化とポートの初期化をしています。メインループではキー入力を確認しながら、時刻の表示を更新していきます。また、タイマー時刻になったら MP3 をオフするまでのカウントダウンもします。1秒のカウントは周期タイマーの割り込みルーチンでやります。こういう説明を1枚の図表で簡単に説明できるといいんですが、シンプルなソースコードなので読む人がそれぞれにイメージしているものでもよいでしょう。

 さぁ MPLAB X での初のプログラミング。CPU クロック数はどこで指定するんだろうと不思議に思いましたが、SYSCLOCK (?) とかいうマクロを定義するだけでいいみたいです。以前の MPLAB では、GUI で CPU クロック周波数を選択したような記憶があります。初期化関数に飛んで、戻ってきたらメインで無限ループするだけのコードをサラッと書き、デバッガで実行してみました。デバッガの起動がいちいち PICKit3 の初期化手続きを踏んでいるようでちょっと待たされます。ブレークを貼っておくとそこでプログラムが止まってくれるようです。ステップ実行もできる…。デバッグモードを正式に終了させないでターゲットをリセットしてしまうとデバッガソフトが宙に浮いてしまうようです。このへんは使いながら手順を覚えてスマートに作業できるように習熟する必要があります。

 さて PICKit3 から 5V 供給した場合は PIC マイコンが正しい挙動を示しているようなので今度はボード上のレギュレータが機能するかどうか外部から電源を入れてみました。昔のケータイの充電アダプタを解体してΦ2.1mm の DC コネクタをくっつけてつないでみました。5.6[V] 入力で 5V のレギュレータを通すのであまり大きな損失はないです。お、こちらを電源としても PIC はデバッガの言うことをきちんと聞いています。電圧計では 4.95[V] でているので一応合格としましょう。

 というわけでとりあえず次は キャラクタ LCD の初期化と時刻表示を形式的にできるようにしたい思います。ちょっとハマった話もする予定です。

表札を自作しちゃう#4

 イラストも切削してみたい

 前回の切削試験でできた表札は、2cm角の明朝体フォントを彫刻するだけであればまあまあ実用的なところまで条件出しができたと思います。しかし今回は少しハードルを上げて、もう少し解像度を上げたいという欲求にかられてしまいました。塗料のアルミに対する食いつきを良くすることと、スクウェアではない形のエンドミルに取り替えるという対策を施しました。

 ホビークラフトの世界では有名なようですが、アルミや真鍮といった金属に塗料を塗る場合はメタルプライマーとかサーフェイサーといった塗料を下塗りするとその上から塗った塗料が剥がれにくくなるそうです。これを下塗りすることで、切削時の境界線の塗料剥がれを低減できるのではないと思いました。ホームセンターだと透明なのが見つかりませんでしたが、ホビーショップに売ってました。これをひと塗りすると、膜厚は10ミクロンくらい増えるかもしれませんが、ラッカーは二度塗りしなくても十分色が乗ったのでヨシとしましょう。

Idea_drill_sessaku  エンドミルというかナノラボには普通のドリル刃で MODELA の切削をしてしまうということがやられていたので、これも試して見ることにしました。ドリルの刃は垂直方向に穴を掘り進めるために作られているので、本来エンドミルのような使い道には向いていません。しかし非常に浅く掘るのであれば、刃先の底面部分で切削できるのでなんとかなるのではないかと期待しました。よーくドリルの刃を眺めてみると、先が斜めになっているのでこの部分だけが切削面になれば多少水平方向の刃の移動でも耐えられるのではないでしょうか。ただし、切削条件の xy速度はかなり遅くしなければならないでしょう。

Miku_name_plate Toolpathmiku  今回の切削試験のデータはこちらになります。IYN通信工業㈱の文字とともに初音ミクのイラストを加えました。あーあやっちゃった痛表札…。絶対誰かやるだろうと思ったけど自分だよ自分。二次元の美少女を貼りつけた痛車や痛板、痛ギターとかともはや同類です。ところでこんな細かいイラストのツールパスは再現できるのか非常に疑問です。実際Φ1mmのエンドミルで切削すると、ミク厨にはとても見せられないひどい雑な仕上がりになります。そこで今回は上記の対策を施してΦ0.45mm のドリルで切削することにしました。しかも z方向の切り込み量は 0.03mm ついに 30 ミクちゃん(=1000分の30ミリ)という MODELA の限界精度に設定しました。xy速度は 3mm/s まで下げます。刃が水平方向のちからを受けすぎて折れてしまわないようにです。

017  切削の結果は…アーッ!ドリル刃が折れて切削途中のミクの頭に突き刺さってるじゃん!(泣)

019  うまく切削できた部分だけ眺めていると、境界線がすごく綺麗に削ることは出来ました。刃先の形状なのか塗料の食いつきの差なのかは特定できませんが、求めていた解像度を実現することはできていたようです。あと端っこが掘り足りないようでアルミが見えていませんが、これは塗料の厚みやアルミ板の凹凸のためで、30 ミクちゃんの精度で平面が出せていなかったことが原因です。もう一回この部分だけ MODELA で彫刻すればいいんだと思います。

 痛い表札づくりはそろそろ最終的な条件出しに参りたいと思います。正直言って、0.4mm くらいのボールタイプエンドミルを買えばなにも問題ないのでしょうが、苦労して安上がりに仕上げる条件を出す作業をもう少し楽しみたいと思います。

たけのこノコノコ

 今年もたけのこ狩りです。

 スーパー祖母の家には山の上に畑があり、そこに竹林があります。またもや 10 本ほどたけのこを掘り起こしおみやげに貰って帰って来ました。まぁなにより大正7年生まれのスーパー祖母が畑をやって健康体でいられるのが一番なのではないでしょうか。

 スーパー祖母が畑の大部分を玉ねぎとじゃがいもで埋め尽くしてしまったため、約一ヶ月後はものすごい収穫量が見込まれます。旅行用のスーツケースでも持って行かないと持ち帰ることは困難でしょう。今回はたけのこの他にはほうれん草を何束も貰って来ました。野菜を取りについていくとスーパー祖母は本当に嬉しそうです。

025026   掘り出したたけのこはひとつはこんなに小さくて綺麗な形をしています。でも皮を剥いてもたけのこは皮の中に皮があるという構造です。結局どのくらい剥けば食べられる部所に到達するかというと、6~7割くらい削った中にあります。そのくらい小さくても、よーく下茹でしてアクを取らないと苦くて舌がビリビリします。セシウムさんも気になるからホドホドにしておきましょう。

028  たけのこのお料理といえば定番の炊き込みご飯です。そしてたけのこ入りの中華風野菜炒め。ちょっとアクがあってビリリと辛いけれどとれたてだけあっていい香りで美味しかったです。

PIC で MP3 目覚まし時計がピクピク #8

Micon_pcb  回路図ができたら基板実装図の作成です。目標は 72 x47 mm ユニバーサル基板上に収めること。部品点数から言ってあまり深く考えなくても配置を決めるのは楽勝でした。TO-220 型の MOSFET やレギュレータ、VR などの部品を自分で作図して見ました。これくらいの組立ならきっと数時間で出来るだろうなぁと想像します。ちょっくらハンダ付けしてみましょう。

20120229_032  出来上がったらまずはマイコンが動くかどうか PICKit で試してみたいところですが、ここでちょっと気になる事が出てきました。基板と PICKit3 を接続するために L 字型のピンヘッダをユニバーサル基板に直接ハンダ付けしてしまいました。これはケースに基板を配置するときにすごく邪魔になるんじゃないだろうか。ケースにはめたまま基板を PICKit に接続するのは無理なんじゃないだろうか、と。

 ほかの人の電子工作ブログを確認してみると、ピンソケットだけ基板にハンダ付けしておいて、PICKit3 と接続するときだけそこにピンヘッダをさし込んだりテストリードを差し込んで伸ばしたりしている…。そうか、そんな賢い方法があったのか。まぁいいや。今回はプログラムがひと通り完成してからケースに入れれば。いやぁちょっと反省だわ。ところで PICKit3 を差し込んでみると、PGC と PGD の端子が IC から出ている足と順番が逆ではないですか。これだと PICKit3 を裏返しにして差し込まなければならないため、インジケータ類が見えないという不都合があります。これはどうにかならないものでしょうかね。

 キャラクタ LCD 用の 7x2 ピンヘッダは秋月の出来合い14ピンケーブルと接続することを考えて配置しました。でもリボンケーブルがねじれるようなピン配置がちょっと不満です。どうせならリボンケーブルが綺麗に二つ折りになるように考えればよかった。キャラクタ LCD をケースの表面に貼り付けようとするならこの点は改善しなければなりません。

20120229_034  これで作成したい電子回路モジュール基板は揃いました。完成予想図をイメージするために MP3 プレイヤー、アンプ、マイコンの基板を並べてみました。あとキャラクタ LCD とそのケープルも。こうして見ると、なんかすごくうまく行きそうな予感がしてきます。しかしー、基板の無駄な面積がどうしても気になってしまうんですよね。全部の回路をまとめてしまえばだいぶ縮まるのになぁって。職業柄、軽薄短小が好きなんです。このサイズでどんなケースなら入るのかな。アキバ探索しなきゃ。

 さてこの次はマイコンの動作確認も兼ねて、LCD に時刻を表示するプログラムを作成しようと思います。MPLAB X という新しい開発環境の使い心地などレビューさせて頂きます。

«表札を自作しちゃう#3

2012年5月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
無料ブログはココログ