Hitech PICC Pro のDelayマクロがver9.80以降で長時間対応に ― 2011/08/01 19:52:17
Hitech PICC Pro Liteモードは、私の趣味の電子工作に欠かすことができない存在だ。随分昔だったか、BBSの書き込みで「Delayが改善されている」と発言されていたのがあったことを思い出した。
Ver9.71までのDelayマクロは、生成されるサイクル数が197,120サイクルの制約で、時間の上限に限りがあった。1秒を作るには、これを更にループして作るなどの工夫が必要だった。
計算は最大取り扱い時間 = (1 ÷ 動作周波数Hz) x 4(サイクル) x 197120(最大取り扱いサイクル数)となる。ホームページ上の説明より。
HitecPICC9.71迄のDelay時間の扱い
動作周波数 | 最大時間 | __delay_ms(x) | __delay_us(x) |
---|---|---|---|
20MHz | 39,424us | __delay_ms(39); | __delay_us(39424); |
16MHz | 49,280us | __delay_ms(49); | __delay_us(49280); |
10MHz | 78848us | __delay_ms(78); | __delay_us(78848); |
8MHz | 98560us | __delay_ms(98); | __delay_us(98560); |
4MHz | 197120us | __delay_ms(197); | __delay_us(197120); |
それがVer9.80以降、サイクル数が増えて、なんと50,660,096サイクルまで使用出来る様になった。つまり、8MHzならdelayマクロ一つについて25秒まで扱えるのだ。これは便利。
計算上では、8MHzの場合、
1/8,000,000 * 4 * 50,660,096 = 25.330048sec
なのだが、実際に使ってみると、delay_msの場合、25,231秒までであり、これを超えると、
595. delay exceeds maximum limit of 50660096 cycles
というエラーが起きてしまった。同様にusも調査。使えた数字は4MHzで
__delay_ms(50462);
__delay_us(50462464);
ver9.82の場合、逆算したサイクル数は
50462464
で計算すると、つじつまが合うようだ。恐らくエラーメッセージ上で表示されるサイクル数が修正されていないものと思われる。HitechPICC上では、特に最大限使える数字は記されていない。
HitecPICC9.82のDelay時間の扱い
動作周波数 | 最大時間 | __delay_ms(x) | __delay_us(x) |
---|---|---|---|
20MHz | 10,092,493us | __delay_ms(10092); | __delay_us(10092493); |
16MHz | 12,615,616us | __delay_ms1(2615); | __delay_us(12615616); |
10MHz | 20,184,986us | __delay_ms(20184); | __delay_us(20184986); |
8MHz | 25,231,232us | __delay_ms(25231); | __delay_us(25231232); |
4MHz | 50,462,464us | __delay_ms(50462); | __delay_us(50462464); |
32.768Khz | 6,159,968,750us | __delay_ms(6159968); | __delay_us(6159968750); |
これがそれらを表にしたものである。上記表と比べてもお分かりの通り、かなり長い時間を作る事が可能である。4MHzで50秒のタイマーがDelayマクロ一つで出来てしまう。またMPSIMで計測してみても、時間誤差が小さくなっているのも特徴だ。
おっと、このdelayマクロを使うときは、先頭に使用する周波数に応じた値をセットする。
#define _XTAL_FREQ 20000000
#define _XTAL_FREQ 16000000
#define _XTAL_FREQ 10000000
#define _XTAL_FREQ 8000000
#define _XTAL_FREQ 4000000
#define _XTAL_FREQ 32768
この数字を使用してdelayマクロは計算されるからである。これが無いとエラーになる。
さらに、引数は固定値であるマクロのため、変数を値として代入する事は出来ない。
但し、このDelayマクロをLiteモードで使う場合は、ループで処理するより少し容量が増える様である。まずは、よく使う10msのループを使っているプログラムで検証
void delay_10ms(unsigned int temp){ //10ms multiple x times
while(temp--){
__delay_ms(10);
}
}
while(temp--){
__delay_ms(10);
}
}
ビルドは、LCDオーディオレベルメーターのプロジェクトファイルにて実験
●Memory Summary:
Program space used FAFh ( 4015) of 1000h words ( 98.0%)
16個あるdelay_10ms()を__delay_ms();に全て置き換えた場合
●Memory Summary:
Program space used FE1h ( 4065) of 1000h words ( 99.2%)
なんと50ワードも増えてしまった。
ちなみに、このプログラムはDelayで255を超える部分はないので、16個あるdelay_10ms(unsigned int temp)のunsigned int型をunsigned charにしてみた
●Memory Summary:
Program space used F7Ah ( 3962) of 1000h words ( 96.7%)
おお、53バイトも節約した。プログラムコードが大きくなって、少しでも容量を増やしたい場合は、こういう小技も有効だろう。
それにしても、一回のDelay関数で扱える時間が大幅に増えたのは、ブログラムを書きやすくしてくれるので、ドンドン利用したいと思う。
ところで、
メモリー使用インジケーターは前回同様相変わらず変な表示をするw 直す気は無いんだろうねw
【動画紹介】ねこ動画 ― 2011/08/02 23:07:30
たまには息抜きでも。
やばいやばいやばいwwww
関連リンク
らばQ 「まてまて、その歩き方おかしいから!と言いたくなる猫のリアクション」(動画)
ロシア語のタイトルが付いているが、直訳すると「猫左」
ガイガーカウンター製作記 ユーザインターフェース部分 ― 2011/08/03 23:48:19
ストップウォッチと歩数計で、とりあえず実用レベルになったので、身の回りを色々測定している状態である。ただ、もうちょっと便利に使えるように、ユーザインターフェース回路を考えてみた。
マイコンを使って以下の事を行う。
電源のオンオフ
時間計測(10分、1時間)
歩数計カウンター出力バッファリング
LEDの演出
カウンターはキャラクターLCDなども考えたのだが、体積の小さいD3372のガイガー管なので、あまり複雑にせず、そして歩数計を使用したほうが消費電力も抑えられるのでシートベルト表示でなく、単純にカウント値をだそうと考えた。
100均で売っている歩数計は、高速パルスが来た場合は取りこぼすので、一旦マイコンでバッファしたものを、歩数計がカウントできるパルスにバッファして出力させる。マイコンは、割り込みを使って処理。LEDは割り込みが入ったら即反応させるようにする。
スイッチのオンオフはモーメンタリーボタンで行えるようにする。PICで行うと、待機電流は0.1μアンペア程度なので十分だろう。
そういうわけで引いた回路図。最終的にこの回路にならないかもしれないが、叩き台ということでブレッドボードあたりで実験してみようと思う。
電源スイッチは、モード変更や長押しオフに対応させる。ガイガーパルスがいっぱい来て、カウンター出力が間に合わない状態になるということは、危ない状態なので、単に警報を出すようにすれば良いだろう。
起動させて10分間動作させ、電源を落とせば、10分間の結果が歩数計に残るので、それを10分の1にすればCPMが読める。10分では不十分であれば、電源を更に投入して継続測定すればよいだろう。
相対的な測定ではあるが、実用上十分なレベルまで持っていけそうだ。
あの筐体に組み込んだら、とりあえず完成ということになる。ガイガー管は品薄で手に入りにくいので、次作るのはフォトダイオード式で行う予定。
所で、ガイガーカウンターの販売はいろいろ増えてきた。あのJAXAもガイガーカウンタを発表したのである。あと、電子関係をやっている人ならお馴染みTACも線量計を販売中。
ガイガーカウンターに注目が集まるというのは、市場や政府への不信感の裏返しでもあるのだろう。特にお子さんのいる家庭にとって、いかに積算線量を減らすか神経を尖らせるのは仕方のない話である。
浄水器のカセット交換と、らばQがツィッターでつぶやいた海外の浄水器情報 ― 2011/08/04 23:02:05
浄水器の交換時期がやってきた。前回は一番安いフィルターを使ったが、今回は高除去タイプを使ってみることにした。楽天で購入。
900リットルタイプが品切れで600リットルが2つのを購入。こちらのほうが、短期間で交換できるので、フィルターが清潔に保てそうだ。大きさは高除去タイプの900リットルより小さく、一番安い1500リットルの大きさとほぼ同じ。
使用リッターを表示してくれるので無駄がないのだが、本来であれば使用リッターと使用期限の2つの要素があって、そのどちらかが過ぎたら交換すべきである。
まあ、私の場合は一旦沸かすのでメーターがゼロになるまで使ってしまっている。
上蓋を開け新品と比較すると、結構不純物が濾されている。汚れを見せるアイディアは良い。
日付は書いておく。今度の交換は2本で10ヶ月後位か?
ちなみに、セシウムなどの放射性物質は、粒子の大きさが違いすぎるので、これでは取れないので悪しからず。水については、私も6月頃まで料理と飲料用は、市販の水を買ってやり過ごしていたが、3月に比べて安全になったと思っているので、今では沸かして使用している。
業務用などや海外製品に、セシウムをよく引き寄せるゼオライト(沸石)を使った浄水器があるそうだ。但し、日本の業者ではボッタクリなどがあるのでご注意。下のamazon.comでも取り扱っている。情報はらばQの公式ツイーとからである。氏がDIYで設置した様子がこちらで詳しく写真で説明している。たまたまツイッターラインに居合わせたのでお気に入りに入れておくことができた。大変参考になる情報である。
[PR]
【ニュース】セーラー万年筆、国産個人向け被曝線量計を2万9,900円で発売 ― 2011/08/05 23:53:30
エステー、JAXAに続き、あのセーラー万年筆も個人向け放射線計を発表した。
セーラー万年筆、国産個人向け被曝線量計を2万9,900円で発売(マイコミジャーナルより)
セーラー万年筆は8月5日、震災後の需要により全国的に品薄が続いている「個人向け外部被ばく線量計」(本体重量39g)を8月上旬から2万9,900円で発売することを発表した。同社は、医療機器・医学用線量計の専門メーカーである日立アロカメディカルと、日立アロカ製の病院・医師・放射線技師・看護師向けの個人向け線量計「PDM-122 マイ・ドーズ・ミニ」(国産製品)を、一般ユーザー向けに販売することで合意した。日立アロカメディア社の医療用線量計を、一般に手頃な価格で提供する形となった。写真からでは大きさが掴めないが、電池がCR2450Bなのでイメージとしてはちょっと大きめのUSBメモリーといったところだろうか。
セーラーは、ユーザー登録した人に向けて、放射線の知識や線量計の使い方、ユーザーと一体となったネット上での線量計マップなどを構築する計画。さらに、線量計は毎年1回の校正が必要なため、安価で長期間校正サービスが受けられる特約サービスの提供なども予定している。ここがポイント。他社では、目安としての使用を促す但し書きがあるものや、出荷時の校正止まりのが多いが、この製品は、定期的に校正(キャリブレーション※正しい数字に合うように基準を用いて調整する事)してくれる所だろう。(※現段階では予定) また、医療機器に特化したメーカ製は信頼感があるので、お子さんを持つ主婦層には受け入れやすいだろう。
PDM-122マイドーズミニ PDMシリーズの仕様より。
測定線種 γ(X)線
40keV~ X(γ)線
検出器 シリコン半導体検出器
測定範囲 1μSv~10Sv ,1μSv/h~1Sv/h
誤差 ±10%以内 (10μSv~10Sv)
電源 コイン形リチウム電池(CR2450B)
電池寿命 連続で約700時間
この内容から、おそらくフォトダイオード式。約1ヶ月持つ計算。
アマチュアでもガイガー管やフォトダイオードを使って線量計を作る事はできるが、校正をする時は、基準線量になるものが必要だったり、基準測定機器が必要なので、メーカー品にはかなわない。尤も、危険な状態かどうか位の目安を知る位であれば、自作もアリだろう。
→MY DOSE miniを手に入れた!
[PR]放射線測定装置 マイドーズミニ PDMシリーズ γ線測定 個人被ばく線量計 誤動作防止機能付き マイクロシーベルト PDM-122
今週作ったもの 備忘録 ― 2011/08/06 23:51:17
今週は口内炎とかできたので、飲むのを控えて自宅で料理。といっても炒め物が多かった。
鉄板焼き風海鮮やきそば。イカとエビの消費期限が差し迫ったので、作ってみた。
もやしは安いが、すぐに食べないと日持ちしない。まずまずの味。焼きそばは、まるちゃんの焼きそばが好み。
オム焼きそば。ハムとキャベツを使ってみた。今のところハズレ無し。
ナポリタン。今までは出来合いの缶詰を使っていたが、今回はケチャップを使用。ソースとにんにくを配合することで絶妙な美味しさになる。レタスは、茹で汁でラスト1分半でパスタと一緒に茹でておいて、パスタを炒めたあとの盛り付け時に投入。
あと、賞味期限が残り2日のこんにゃくも発掘したので、めんつゆと砂糖、生姜、みりんで10分煮込み、更に豚の細切れやら大根を投入して、更に10分煮込んで、ご飯の上に置いて豚丼にして食べた。味が濃いんじゃないのと思う位の調味加減で良いようだ。
LCD VUの図面をちょっとだけ変更 ― 2011/08/07 23:11:21
ガイガーカウンターの方は、タッパーの方が防水ができ便利に使えたので、ドライヤー型のをやめてタッパー型に落ち着けようかと思っている。ガイガー管も一つしかないし、組み替えても、実用的でなければ意味が無い。なので、ちょっと頓挫。
今日は、BBSのサポートも兼ねてLCD VUメータの回路図を、少しだけ変更した。基本性能は変わらず、ICSPの動作を確実にするためのハードウェア修正である。
PICkit2などでICSPを経由しプログラムを書きこもうとすると、たまに失敗することがあった。それが発生しないように抵抗2本を追加した。これでICSPで確実にプログラムが出来ると思う。
実はまだ課題がある。オフセットの問題だ。この回路では、LMC660のデバイスのバラつきによっては、左右に無信号時に電圧が出るかもしれない。幸い私の所では4つ程試しても問題が無かったが、データシート上ではオフセットの問題は避けられない。もし出てしまったら、デバイスを交換して貰うしか方法がないのである。
ただ、このオフセットキャンセル回路を搭載すると、たかがLCDでレベルメーターを表示するのに大げさな回路になるのだけは避けたい。
PIC16F1827を使用してから少しプログラム容量に余裕ができたので、ソフトウェアオフセットキャンセル機能を載せられないかテストしようと思っている。
これが実現できれば、このハードウェアだけでオフセットの問題をクリア出来るはずだ。
そうすれば、基板を起こして頒布するくらいはやってみたい所である。
LEDの極性は外見では判断できない ― 2011/08/08 23:22:42
電子を知らない人でもLEDは知らない人がいない位、とてもメジャーな電子デバイスである。数ミリアンペア以上の電流で点灯し、しかも高速で反応するので、マイコンの状態表示からイルミネーション、大型表示器などに使用される。LEDのウィキペディア。
LEDには電極が存在し、しばしば接続を間違えることがある。買った当時は長い方がプラス側(アノード)という事が分かるのだが、ハンダ付けをしてしまった時や、リードを切ってしまうと、外見では分からないLEDも存在する。
LEDのレンズの中を見て極性が分かるという説明をよく見かけるがアテにならない。写真は左から緑・赤・高輝度赤・白色・赤外、高輝度赤だけツバ側がアノードになっている。
LEDは長い方のリードをマジックなどで赤く塗ってから作業をすると、あとで楽である。
LEDの記号はダイオードに光を放つマークをつけるわけだ。
↑↑
短い方:マイナス:カソード:cathode(K) ---K|--- 長い方:プラス側:アノード:anode (A)
記号でKとあるのは、ドイツ語由来からである。アスキーアートで書くとこんな感じ。記号でKと書いてある部分をアルファベットのK(ケー)と見立てれば、簡単に覚えられるだろう。
最近のテスターは針式がめっきり少なくなり、LEDの点灯試験が出来ないものも多くなってきたので、秋月電商などで取り扱っているLEDチェッカーなどを手元に置いておくと良いだろう。
LEDは直接電源に繋げると過大電流で壊れてしまうので、必ず抵抗などで電流を制限するが、カラーLED等を使う場合は、それぞれの色の輝度がバランスよく合うように抵抗を調整する場合が多い。
私がLEDを付けるときは大体以下の値を使用している。
5V 緑180~810Ω、赤220~1K、高輝度タイプ 470~2K、青56Ω~470Ω
最近のLEDは少ない電流で明るいので、少なめに流して使うことが多い。
青や白LEDは、静電気や逆電圧、過電圧で壊れやすいので取り扱いには十分ご注意を。
[PR]LED電子工作の素 (基礎入門)
口内炎がなんとか治ってくれそう ― 2011/08/09 23:38:30
先週の火曜日位から出来た口内炎、いつもは1週間もしないうちに治るのだが、今回は2つ出来たせいか中々治らないし痛い。軟膏も効き目なし。珍しい。今週は試しに錠剤を買ってみたら、痛みが引いて、少しずつ治っていくのが分かる。トラネキサム酸が効いている感じだ。
ためしてガッテンに口内炎をスピード完治する事があったので、実践中。
なお、口内炎の治療をしてくれる病院というのは結構あり、内科・歯科・耳鼻咽喉科・口腔外科など幅広い分野で受け入れをしているそうだ。2週間以上経っても改善されない場合は病院で診てもらうべきだろう。
口内炎ウィキペディア
スイッチサイエンスで色々お買い物 ― 2011/08/10 21:08:33
スイッチサイエンスで月曜日に注文したものが、次の日にもう届いた。
何だか面白そうだった物として、まずはコレ。音をロボットボイスに変換してくれるICだ。半導体の小林製薬でもある台湾のHoktek製HT8950(pdf)。サンプリングレートが8KHzと低いが、面白い音を出してくれそうだ。
それと、コレ。Blutoothでシリアル通信をするモジュール。ちょっと値が張るが、パソコンと組み込み機器をBluetoothで直接接続できるのは、何かと応用が利く。XBeeでも良さそうなのだが、パソコン対組み込み機器であれば、こちらの方が便利そうだ。
電源電圧は3.3Vでも使用できるが、3.0Vで動作させるのが、データシートによると、RF回路が最高のパフォーマンスを発揮できるそうだ。というわけで、電池2つを接続してみた。
パソコンでスキャンしたらすぐに見つかる。パスキーは0000。
あっさり接続された。お手軽すぎる。通信レートは9600bpsになっているが、コマンドを使うことで、色々設定できるようだ。何かに組み込まなくても、単体でブレッドボードのお供としても便利に使えそうだ。ただ、もうちょっと安いといいな。
少しだけマイクロテクニカが安い。そして、日本語マニュアル(pdf)もある
その他、ブレッドボードやら、ジャンパーワイヤーなども買ってみた。オーディオスペクトラムアナライザーとかも買ってみたが、これは音を各周波数別にパルス幅で出力するものだった。入ってきた音をイコライジングするものと思ったのだが、勘違い。これはこれで、いつか使ってみよう。
最近のコメント