[][mobile][Homepage][BBS][Blog][YouTube][asablo]

12F1822を内部発振の31KHzで動かしてみる (超低消費電力型 LEDフラッシャー)2013/01/27 23:38:12



昨日は12F675を使って低消費電力の防犯フラッシャーを検討していたが、内部発振は4MHz固定であること、ウォッチドッグはプリスケーラを最大にしても約2秒しかスリープできないことが分かった。外付け水晶発振子をとりつけたり、コンパレータなどを使ってCRによるタイマーを作ってもできるだろうが、回路が複雑になってくる。

12F629/12F675はスリープ時の電流が限りなく小さいのが魅力だ。ただし、色々な制約もある。ブラウンアウトリセットを使わない、内蔵プルアップは使用しないなどである。スリープ機能を使わなければ、内蔵4MHzで動かす場合はそれなりに電力を食うし、外付けで32KHzの水晶をつけるだけで、折角の8ピンPICの魅力も半減。

それなので、12F675を止めて、手持ちの12F1822を使う事を検討。



まず発振回路部分。内蔵の発振回路は500KHzをベースとした10種類のクロックと31KHzを使用したクロックが選択できる。更に8MHzを4逓倍して32MHzに使用できるようになっている。とても豊富な内蔵クロックだ。電池で動作させる時は、31KHzを選択することで、一番最低の消費電力が期待できる。まず、while(1)ループを作り、電流を測定。
ブラウンアウトリセットを使用するに設定しても、動作中が31μA at5v。これは、わざわざスリープを駆使しなくてもかなり優秀な消費電力だ。次に、スリープ時も計測。22μA。スリープ活用も意味がある。


ウォッチドッグについて、12F629/675では最大でも2秒強の時間しかとれなかったのが、このデバイスはなんと最大256秒も時間が取れるのだ。

ウォッチドッグ本来の使い方は、プログラムの暴走管理で、一定ルーチンでCLRWDT()が入らない場合、リセットを掛ける使い方であるが、今回の私が使った方法は、LEDを一瞬光らせて、その後SLEEP()し、それ以降はウォッチドッグがリセットをかけるまで放置という方法をとっている。
内部でタイマーを回すよりも断然低消費電力であるし、プログラムがとても簡単になった。


※リスト中 __delay_ms(100);//30ms wait→100ms waitの誤りです
というわけでソース・コード。MPLABXC8 v1.12用。




HEXファイルは、適当なメモ帳に貼り付けて、拡張子*.hex保存でデバイスに書くだけで動作。


12F1822だけで超低電力フラッシャー

作った基板。ただフラッシュさせるだけの基板なので、シンプル。3ピンはクロック出力のテストで一瞬だけ31KHz出力、LEDはアノード側を5ピン、カソードはグラウンド、4ピンは未使用であるが、オープンにすると消費電流が増大するので、適当な抵抗でプルアップしている。

黄土色の丸いコンデンサは、手持ち部品を消費するために使ったディスクセラミックコンデンサ。
今なら積層セラコンを使うところだろう。




前回LM3909で作った基板との比較。タイマーがプログラムで決定されるので、大容量のコンデンサが不要となった。LM3909での利点であった電池1本でも光る回路だったが、電池が無くなるにつれ、点滅周期が遅くなり、また1.1V位で点灯しなくなるので、それなら、PIC電池2本でも、1本0.95Vまで使えるから、マイコンの方が良さそうだ。
ブラウンアウトを使用しない設定で更に動作電圧を下げられるが、電池を入れるタイミングでうまく起動しない場合があるので、ブラウンアウトは使ったほうが良い。



デバイスの書き換えはICSPをつけているわけでないので、ICクリップを利用してPICkit2で書き込む。8ピンバイスなら、これが手軽。



さて、前回同様にケースを注文して分解。



前回よりもグレードが高くなっている。また消費電力も3Vで約40μAと抑えられて性能が良くなっている感じだ。ただ、点滅周期とか気に入らないwww モーションセンサーもCDS。
安いものだから仕方ないだろう。



ホットボンドで組み付け終わり。電源スイッチは、錆びたりしてトラブルになるので、電池ボックスと直接接続した。これで、周期が8秒と変わらない点滅するダミーカメラの完成となった。

以上、防犯用フラッシャーを作るためにPICを使ったが、
PIC12F1822には多彩な内部クロックソースがあり、256秒が最大のウォッチドッグがある。
反面レジスターが多くなったのが難点なのだが、うまく使えば旧PICマイコンより安くて便利に使える。 PIC12LF1822が手に入れば最大電圧3.3Vまでではあるが、とても小さい待機電力になるので、ボタン電池でフラッシャーを作っても1年以上は持つと思う。
近いうちにPIC12LF1822をマイクロチップダイレクトあたりから入手して評価してみたい。





12F675を32KHzで動作させてみる2013/01/26 13:29:16


12F675を32KHzで動作させてみる

前回作成した防犯用フラッシャーの追加を頼まれた。前回はLM3909を利用したものだが、このICがディスコンでちょっと高い。なのでPICでプログラムをうまく作れば低電力でできるかを検討してみた。

内蔵4MHzで動作させ、LEDを10msフラッシュさせた後に、スリープさせ、ウォッチドッグで起き上がらせてみた。MCLR OFF、Pullup OFF、BrownOut OFF、Start up timer offでスリープ中は約2.6μアンペア。但し、電池の入れるタイミングによって、初動の正常起動ができないので、リセットを有効にして電池交換後に一度リセットしてもらうなどのハード構成が必要になるだろう。


ウォッチドッグを使う時勘違いしていた事があって、内部の発振回路を使っているかと思ったら、ウォッチドッグとして独立して動作するCR発振回路。なんでスリープでも動くの?なんでクロックを遅くしても、2秒位でウォッチドッグがかかるの?と思って資料(pdf)をよく読む
クロックにスリープが入っている。クロックが止まるのにどうやっているかと思ったら、


ああ、なるほど。独立した発振回路があったのか。だからクロックの速さにかかわらず、ウォッチドッグのプリスケーラを最大にしても17msx128=2.176なのか。
ウォッチドッグを使った事がなかったので、これはチョット勉強になった。



ちなみに、昔安いと思って買った32KHzの水晶発振子。これはPICに接続しても発振せず。



円筒型の水晶では動作ができた。ただ、部品点数が増えるので多少電流が多いが内蔵で32KHzが使える12F1822を使ったほうがいいかもしれない。12LF1822ならもっと小さくなるが、秋葉原での入手が出来ればなぁ。

 つづく・・・



I2C LCD ACM1602NI用ストロベリー・リナックス互換のバグ解析開始2012/12/27 23:43:49


I2C LCD ACM1602NI用ストリナファームで動かないのがあった

以前から好評を頂いている、秋月電子のACM1602NIのファーム改造だが、どうもストロベリー・リナックス互換のファームウェアは、動作しないものが報告された様だ。



ストロベリー・リナックスの液晶を利用すると正常表示する装置に、私が公開しているファームを載せたACM1620NIを接続すると、ご覧の様な表示になる模様。ユーザーフォントあたりが表示された感じになっている。

こちらが開発で使った時はarduinoで簡単にテストしたものだったので、そこまでは予想が出来ない。誤った表示をしているがI2Cとしては通信しているのだろう。

自己責任にて使う条件で公開しているものであるが、きちんと動かすに越したことはない。
後ほど原因を調べて対応しておきたいと思う。私が忘れないように備忘録として書き留めておく。



【動画紹介】MPLAB X プロジェクト コンフィグレーション2012/12/23 23:37:16

MPLAB X プロジェクト コンフィグレーション
いつもは英語、もしくは中国語が多いマイクロチップ公式ビデオだが、今回は珍しく日本語向けに製作されているMPLABXについての説明動画があったので紹介しよう。日本向けといっても、英語の説明に日本語の字幕が入っただけではあるが、それだけでも理解しやすくなるだろう。




約7分弱の動画を観るだけでプロジェクトのコンフィグレーションが理解できるように説明されている。MPLABXをダウンロードして使えるようにして、このビデオを見ながら学ぶと良いだろう。

  →MPLABXのダウンロードはこちら




私も以前にMPLABXを簡単に使う方法を紹介している。
MPLAB IDE(Xの付かない従来の)を使い続けるのもまだ良いと思うが、ツールの切り替えはいずれやって来るので、そろそろMPLABXを使い始めても良いかもしれない。私も少しずつではあるが、従来MPLAB IDEからMPLABX IDEに移行し始めている。

このメリットは、OSが色々使えることと、オートコンプリート機能があることだろう。今後のMPLABXに期待だ。




MPLABXのUSBドライバ切り替えについても日本語字幕があったので紹介しておこう。




さらに、MPLAB IDEからMPLABX IDEにプロジェクトをインポートする動画も日本語が紹介されたので追加しておいた。



MPLABX IDE v1.50とMPLAB IDE v8.88をインストール2012/11/10 23:36:30


MPLABX IDE v1.50

暫くPICの事などに遠ざかっていたが、PICツールのアップデートを調べたら、MPLAB関係がアップデートされていた。MPLABXの構文チェックは、XC8等を使うときは相変わらずconfig関係やdelay関数のエラー表示が出ているが気にしないでおこうw
ビルドは問題なく、実際にPICに書き込んで動作も確認できた。



MPLAB X IDEが1.50に、MPLAB IDEも8.88にアップデートされている。MPLAB Xが出ても、まだMPLAB IDE側のアップデートがされているのか。
ところで、アップデート情報は私のホームーページの左側で随時更新しているのでそちらを見ると最新版がダウンロードチェックできるようになっている。



MPLAB IDE 8.88で気がついたのだが、以前に問題にしていたメモリー表示が直っていた。MPLAB側の問題かと思ったのだが、どうやらHitech CからXC8コンパイラに切り替わった時に直った模様だ。



試しに、ToolsuiteのDriver設定をHitech PICC Pro9.83でビルドすると、以前の様におかしな結果になった



アセンブラの時は、相変わらずデータEEPROMとプログラムEEPROMの容量が合算されるようだ。
プログラムEEPROMの内容を確認したら1ワードだけNOPになっているので、これは既知のバグと言う事になる。



紫外線パワーLEDでUVEPROMは消去できるか?2012/10/06 12:48:06



前回は、紫外線パワーLEDを点灯させたが、今回はそれを使ってUVPROMを消去する実験をやってみる事にした。UV-EPROMはウルトラバイオレット・イレーザブル・プログラマブル・リードオンリーメモリの略。

UV-EPROMの消去の波長は、普通253.7 nmをピークとした紫外線を使う。一般的に殺菌灯などで消去するのだが、それを400~410nmのこのLEDで消去する試みである。

窓付きはROMタイプとPICマイコンを持っているが、ROMはライターを持っていないので消したかどうか判断できないので、PICで実験することにする。PIC12C508JWとPIC12C509AJWの2つ。



前準備。まず消そうとするPICの内容をPICkit2を利用して確認。実はこの確認は不完全である。それは後ほど説明するとしよう。



リードして何らかの内容が書かれている事を確認。



では、装着。乾電池2本から昇圧回路を使って5Vまで持ち上げて紫外線LEDを点灯させている。
LEDの電流は5Ωに設定したので大体150mA程度は流れているはずだ。



ランプハウジングが着脱できるようにしている。PICの石英ガラスの窓に殆どピッタリくっつける形で装着。



実用的なら、この様にタイマー機能を持たせて完成させる予定だった。


紫外線LEDでUVPROMを消去中

照射開始!! 本当に危ない光だw ブラックライトより波長が低いので直視厳禁。



暫く放置。殺菌灯などで消去する場合は20~40分程度で消去されるが、これは波長のピークがズレているので、もっと掛かるだろう。



最初は1時間、以降30分毎にチェックしてみる。2時間程でデータが化け初めてきた!!これは期待する。

3時間程で消えた! と思ったのだが、どうもリードが安定しない。調べたら、PICkit2やPICkit3はワンタイム版のPICはダメのようだ。以前持っていた秋月プログラマは今年進呈したので手元にないしw
消去できる事だけでも確実に確認したい所だ。
そうだ、PICプログラマ作ればいいんだ (・∀・)  この時点で無茶を言っているw



エネループでは3時間を待たずして電池切れになる。長時間照射させるためにACアダプター式に変更。



さて、12C509の読み書きできるPICプログラマを作ると決めたので、部品を集めて製作開始。
広く実績のあるwirter509を作る事にした。13Vの電源が必要だが、これは100均で買っておいたシガプラグのUSB充電器から部品を取ることにした。



ケミカルな部品以外は再利用。この回路の解析昇圧回路は、それぞれ過去記事で説明している。



2時間程で完成。オーバースペックであるが、手持ち部品で大量在庫のPチャンネルFETの2SJ377を使って回路を組んでいる。FETはトランジスタより回路が若干簡単になる。



チップ部品もチラホラ使っている。抵抗とか2N7002のNchFETも実装。
PICプログラマを動かすためにPICマイコンにプログラムを書かないとならないのは何とも不思議であるが、元々のコンセプトは、JDMライターという不安定なプログラマの乗り換えの位置づけで出来たもの。JDMライターを作って、それを使ってwriter509のプログラムを書き込むといった具合。



まさか、PICプログラマを自作するとは思わなかったがww ここまでやって実験を無駄にしたくなかったので、勢いで作ったw



今回の回路図。writer509コンパチブルで動作する。レガシーなPIC用に一つ作っておくのも良いかもしれない。使用するファームウェアはWriter509I.zipを使う。



コントロールソフトは、PIC Prog4Uを使用。ここで注意することは、オプション設定で書き込む前にイレースの項目を外す事である。ワンタイム版なのでその操作は必要ない。
書き込んだサンプルはwriter509のファームウェアを書いてみた。


紫外線LEDでUVPROMを消去中

再び照射! つけっぱなしにして朝まで待つことに。



4時間後にチェック。全部消えているわけでなく、まだ消し残しがあるが、紫外線LEDで消えている証拠である。


紫外線LEDでUVPROMを消去中

更に照射!



5時間20分経過後のPIC。



おお、見事に消えている!! ブランクチェックしても消えている事になっている。
周波数更生データがプログラムの最終番地に書いてあり控えておいたのだが、元々書かれているデータが間違えていたらしく、通信ボーレートのシビアなwriter509の代替にはならなかった。



ちなみに、PIC12C508JWの場合は、どんなに長時間照射しても、この状態。なんと、508の場合は、一度でもライトプロテクトを掛けてしまうと、二度と書き込めないという仕様だったのだ。プロテクトを掛けても最初の番地だけは見えるのも12C508の特徴。12C508JWはイミテーション行きw


結果
紫外線1WパワーLEDで窓付きPICは消去できる。但し、
 ・消去に5時間以上時間がかかる
 ・照射面積が小さいので、消せるのは1つだけ
 ・UVPROMはまだ試していない

最初は消えないと思って進めていたが、データが化けて来た所でもしやと思い実験を続けた所、消える事は確認出来た。思い出したようにUVPROMを消したいとか趣味で使う分には安くて面積を取らないので、選択の一考となるのかなと思ったりしたw ってどんな締めくくりだよw

UV PROM、もう骨董品だから (´・ω・`) まあ、お馬鹿な実験と言うことでしたw


ユニバーサルI2CキャラクタLCDの製作 回路設計2012/09/29 23:55:44



昨日紹介した「有名I2CのキャラクターLCDの互換品を個別部品で作る」では、2種類の動作をファームウェアを入れ替えて個別に実現したが、これらを一つのプログラムにして、メニュー形式で設定出来たほうがもっと便利に使えるだろうと考えた。

回路の変更部分は、ジャンパー設定をやめて、代わりに押しボタンスイッチを3つにし、それぞれメニュー、値変更ボタンを2つ設け、マイコン内部のEEPROMに設定出来るように対応した。
これなら、使用出来るポートの縛りを最大限活かせる事ができる。

3.3Vでも使用できるようにチャージポンプ型の回路を搭載しているが、後々半固定抵抗無しにしてプログラムでコントラスト調整を考えているので、半固定抵抗と並行してジャンパー抵抗を取り付けている。


それと、これは実験用で使うことを想定しているので、電源の逆接続は十分考えられる。いくら注意しても逆に接続する可能性があるので、その対策回路を入れている。ダイオードでは電圧降下があるので、FETによる逆接続防止回路を入れている。これで電源が逆に接続されてもマイコンやLCDに電圧が印加されることがない。この回路はこちらでも既に紹介している。FETは2SJ377を使ったが、IRFのIRLML6402などのPチャンネルFETを使うと小さく出来るだろう。



製作開始。いつもはLCD工作に便利な秋月B基板で製作するが、細長い基板が在庫でいっぱいあるのでこれに組むことにする。この基板は有鉛ハンダメッキなので注意。


逆接続防止回路

逆流防止回路部分。この前作った乾電池2本から安定化3.3V電源を安心して接続できる。
手前に見える丸ピンは、ブレッドボードなどのジャンパーワイヤー用。



裏面。LCD部分を全ピン配線するので、結構配線量が多い。PICマイコン、LCD共に空きピンがない状態なので、電線がぎっしり。一見大変そうに見えるが、作業はニッパーとピンセットを使っただけ。ワイヤーストリッパーを使わないで出来る。方法は以前のブログの中程に書き留めている



電源配線はいつもはラッピング線を剥いて使っていたが、今回は0.6mmスズメッキ線を使用。意外とこちらの配線の方が引き回しなどを考えたので時間が掛かった。



完成後、PICkit3でプログラムを書き、既存のファームウェアで動作確認。さて、MPLABXでプログラムするか(・∀・)  完成までは少し掛かる予定。



有名I2CのキャラクターLCDの互換品を個別部品で作る2012/09/28 16:35:48



I2Cで制御できるキャラクターLCDがメジャーな物といえば、ストロベリーリナックスのSB1602BSB1602E、そして最近出てきたのが秋月電子通商から発売されているACM1602NIが有名だ。
ACM1602NIは既に解析を済ませ、互換ファームまで製作した。

ACM1602NI単体で利用しても面白いのだが、せっかくなので個別部品による構成で、ハードウェア互換を作ってみようと思う。

使用するマイコンはPIC16F689pdf)。当初は16F1827なども考えたのだが、互換モードで動かすにはLCDに接続するのに8ビット必要である事と、ACM1602NIに同じPICマイコンが搭載されているので、これを採用。値段も130円と手頃で手に入りやすいPICである。

LCDは一般的な5V駆動のキャラクターLCDを使う。これは500円で手に入る。PICで発振部分を設け、負電圧を生成することで、3.3Vでも対応できる。5VのキャラクターLCDを簡単に3.3Vに改造もできるので、3.3V専用で実験程度ならこれでも良いだろう

回路図構成はPIC、LCD、ダイオードが2つに0.1uFコンデンサが4つ、半固定抵抗10KΩ、あとは抵抗2本。電子工作をやっている人なら手持ちの物が代用できる。I2Cの抵抗は、状況に応じて取り付ける。



プログラムの作成を開始。最近出てきたMPLABXの勉強がてらにプログラムを組んでいく。新しいツールは最初は何でも煩わしいものだが、慣れてくるとその便利な特徴が見えてくる。

負電圧用の発振は、いつもであればTIMER1を使用してCCPピンに出力させるだけなのだが、今回は互換を保つ事が優先なので、TIMER0によるソフトウェア割り込みで約6KHzの発振を出力とした。カウンターオーバーフローを利用するので、割り込み処理時のオーバーヘッドが出て誤差とか出るだろうが、この用途では問題ない。


I2CキャラクタLCD互換

ある程度プログラムが出来上がったので、ブレッドボードでチマチマ回路を作っていく。配線が混雑しているが、使用している部品は実に少ない。arduinoで動くストリナ駆動のプログラムを利用してデバッグをしている。



LCDとPICでは自作のリボンケーブル治具で接続。リボンケーブルを利用する時、よく間違えてしまうのだが、数え方が2,1,4,3,6,5,・・・と2本ずつ奇数と偶数がひっくり返るので注意して行なっている。先端はヘッダーピンをはんだづけして熱収縮チューブで処理。これを一つ作っておくと、こういう実験には便利である。



他のストリナI2C LCDにも繋いでみる。前に作ったインターネットラジオ(前半後半)。これに繋いでみる。



3.3Vでなんの違和感もなく普通に表示。これで動作的に互換品が出来上がった。



互換品であるが、最初の電源投入時はこういう表示になっている。種別とI2Cのアドレス表示を行った。私がデバッグで混乱しないようにという事もあるのだが、外部からLCDが初期化されると消えるので大きな問題にはならないだろう。色々なカスタマイズは、ソースを公開しているので、printfの記述をREMしてビルドすれば良い。

I2Cアドレスについては、空きピンであるRB5の部分をGNDに落として電源を落とせば、別のアドレスに定義される。ACM1602のアドレスが0x50とEEPROMと被ってしまっているが、アドレスが変更できるのでACM1602NIのファームウェアを入れ替える価値はあるだろう。



MPLABX v1.41リリース2012/09/14 23:53:27



MPLAB IDEが v8.87になった。MPLAB IDE v8.86をアンインストールしてからインストールするとXC8が使えなくなる場合がある様で、その様な症状が出たら、Register Plug in Batch file for MPLAB IDE v8.87 をダウンロードしてきて、MPLABXC8.dllのあるフォルダに回答してbatファイルを起動するか、再度XC8をインストールし直す様に説明がされている。私はいつも上書きインストールしているが、この症状は起きなかった。

さて、MPLABX IDEもv1.41がリリースされた模様だ。今後の開発は、こちらにシフトしていこうと思っている。Javaで開発されているので、windows以外にもMACやLinuxにも対応している。



さて、インストールするときは前のバージョンが残っていると、インストール途中でアンインストールを促されるメッセージが出て終了するので、必ずアンインストールが必要な様だ。



ベータ版も残っていた。これも削除しておこう。



ファイルをダウンロードしてきてセットアップ。314MBと大きいファイルだ。インストール方法は以前の記事を参考。MPLAB XC8などもv1.10になっているので、必要に応じてダウンロードしてくる


MPLABX1.41アップデート

アイコンが3つ出来る。



初回起動時に前の環境を戻すか聞いてくるので、はいを選択すれば、引き継いでくれる。



セキュリティソフトでは、この様なメッセージが出ることがあるので、許可するようにする。



ビルドも試してみたが、問題なく動作した。MPLAB IDEではあるPackeage in zipとか一部の機能はMPLABXには無いが、将来的にはこちらに統合されるであろう。MPLAB5から今のMPLAB IDE8の原型であるMPLAB6も、最初はこんなもの使えるのか(´・ω・`)と思ったが、今は本当に良く安定している。(memory usageがまだアレだが(´・ω・`)  ) Encoding はShift_JISね!



追記:最近発見したツールバー。この部分をクリックすると、自動的に該当型番の資料のホームページへ飛んでくれる。これは便利だ。それと、この上にあるスパナアイコンは設定にすぐ直結しているので、メニューより入らなくても素早く設定できるのがよい。



キャラクターLCDを4ビットモードで使う時の注意点2012/08/29 22:00:03


キャラクターLCDを4ビットモードで使う時の注意点

マイコンを動かすときに、良く使われるキャラクタLCDモジュール。最近では500円で買える様になってきた。私がPICを使う時でも、よく使うデバイスの一つである。



16桁2行のポピュラーなものから、色々な大きさと文字数のものが各社から出されている。これだけ多彩な形状や表示なのだが、その殆ど全てが、HD44780互換の動作である。
HD44780は相当古くから存在し、私が仕事で設計に使った1989年より以前から電子楽器などで盛んに使われていたものである。現在でも仕様は殆ど当時と一緒であり、あえて違う所を挙げれば、動作電圧が2.7Vから動作する様になった事位である。

初期化コマンドが少し面倒であることと、ユーザー定義用フォント(CGRAM)が、今でもたったの8種類と、機能の改良が殆どされずにいる反面、参考文献が多いので確実に動作させる事ができるデバイスである。



この部分の配線は8ビットとE、RS、R/W信号の合計11本で制御するようになっているが、大抵の場合は、マイコンのピン数を経済的に利用したい事が多いので、4ビットモードで行われる事が多い。更にLCDから状態などを読み出す必要がなければ、R/WをGNDに固定して書きっぱなしにしてしまえば、6本の制御で済む。

この時、昔のPICの解説本やマイクロチップのアプリケーションなどは使用しない部分の4本をGNDに接続しているものが多かった。実はこれが、良い結線でないのであった。
使用しない4ビットは、必ずオープンで使用するというのが結論である。




今では4ビットモードで動作させている紹介記事や書籍、Webなどでは、使用しない4ビットは何も繋いでいないのが殆どである。

疑問を持つというのが大切な事と改めて実感した。






[][admin][mobile][Homepage][BBS][Blog][YouTube][asablo]