Monthly Archives: 7月 2012

[MPASM]list擬似命令の意味と、指定可能なオプション情報一覧

2012年7月31日 (カテゴリ: PIC:)

PICのアセンブラであるMPASMでは、list命令でターゲットのPICデバイスを指定します。 LIST P=PIC16F84A LISTはデバイス指定用の専用命令なのかというとそうではなくて、他にも色々な付加情報(アセンブラ処理や、フォーマット制御)を指定する事が可能です。 今回はlist命令で指定可能なオプションの一覧を確認してみます。 listオプション一覧 bオプション *.lstファイルのタブストップ位置を指定します。 デフォルト値は8です。 使用例 LIST b=4 cオプション *.lstファイルのカラム幅を指定します。 デフォルト値は132です。 使用例 LIST c=80 f…


続きを読む

[パタヘネ:読書メモ]第5章 容量と速度の両立:記憶階層の利用 その5

2012年7月31日 (カテゴリ: 読書メモ:)

5.6 仮想マシン VMという言葉からイメージする仮想化は、CPUバイナリ互換性からJavaVM等まで色々なものがある。 だけど、ここで議論するものは、命令セットアーキテクチャ(ISA:interaction set architecture)の互換性についてのみとする。 このようなものを、システム仮想マシン(system virtual machine)と呼び、どんな物なのかはVMwareなどをイメージすると分かりやすい。VMの下のレイヤーにある仕組みをVMM:仮想マシンモニタ(あるいはハイパーバイザ)と呼び、プラットホーム側をホスト、仮想環境をゲストVMと呼ぶ。 この仮想マシンモニタは、非…


続きを読む

[パタヘネ:読書メモ]第5章 容量と速度の両立:記憶階層の利用 その4

2012年7月30日 (カテゴリ: 読書メモ:)

5.5 記憶階層間に共通する概念 CPUのL1,L2キャッシュや、仮想記憶など複数の記憶階層間でキャッシュが行われるが、各階層間で似たような技術が使われている。 一方、各記憶階層ではそれぞれ要件(記憶量・速度・キャッシュ場所を求めるのに許容される時間etc)が異なる為、使われる戦略は微妙に異なる。 キャッシュの連想度を上げると、必要なキャッシュが追い出される確率が下がるので、ミス率は低下する傾向にある。但し、キャッシュサイズが大きい時はそもそもキャッシュエントリが競合する確率が低いので、連想度向上の価値が”相対的に”下がる。 キャッシュ方式の戦略 キャッシュ方式には、ダ…


続きを読む

[電子回路入門]DCモータとは

2012年7月29日 (カテゴリ: 電子回路基礎:)

今回は、直流電源で稼動するDCモータについて説明します。 DCモータと書くと難しそうですが、乾電池直結で動かす事が出来る以下のようなモーターをイメージしてもらえれば良いです(子供向けのラジコンとかに入ってそうなモノです)。 GP.256 ハイパーダッシュ2モーター 15256 (グレードアップパーツシリーズ No.256) モータの分類 モータを使用することで電気エネルギーを機械的な動作に変換することが出来ます。 モータにはDCモータ、ACモータ、ステッピングモータなど色々なものがあり、それぞれ以下の特徴を持っています。 DCモータ 直流電源を与える事でモータを回転させることが出来ます。 コイ…


続きを読む

Software Design 2012年8月号で紹介されている書籍一覧

2012年7月29日 (カテゴリ: 未分類:)

Software Design (ソフトウェア デザイン) 2012年 08月号 技術評論社より出版されているSoftware Designの2012年8月号の特集は、”エンジニアのパワーアップ読書”という事で、原則として1人あたり4冊,計16人の方がお勧めの本を紹介されていました。 備忘録として、紹介されていた本の一覧をメモしておきます。 よくある、人月の神話 や計算機プログラムの構造と解釈 みたいな、お約束の良書ばかりだけでなく、その人自身が個人的に大きな影響を受けた本が紹介されており、一読の価値ありです(特に最後の、ビックリマンの話がお勧めです)。 選者の経歴や、…


続きを読む

ダイオードを回路に入れると,電圧が0.6V下がる理由は?

2012年7月29日 (カテゴリ: 電子回路基礎:)

ダイオードはアノードからカソードにのみ電流を流すことが出来るけど、逆方向に流す事は出来ません。 この特性の事を、整流作用と呼びます。 ダイオードを作るためには、シリコン(珪素:けいそ)を使用した半導体を使用することが多いですが、シリコンダイオードはアノードからカソードへ電気を流しても、両端の電位差が0.6V以上ないとほとんど電流を流す事が出来ません。 この電圧のことを順方向電圧と呼びます。 一方、電位差が0.6Vを超えると、ダイオードは非常に大量の電流を流す事が出来ます。 オームの法則はE=IRなので、0.6V以下で電流がほとんど流れないという事はダイオードの抵抗が非常に高く、0.6Vを超える…


続きを読む

[PIC]TRISA,TRISBレジスタの”TRIS”って何?

2012年7月28日 (カテゴリ: PIC:)

PICのレジスタ一覧を見ると、TRISA/TRISBレジスタというものが有ります。 このレジスタは、それぞれPORTA/PORTBの入出力を決定するもので、役割は分かっているのですが、”TRIS”が何の略なのか語源が気になったので調べてみました。 答えは、MPASMのユーザガイドに記載されていました。 Mnemonic TRIS r   Description Tristate port r と言うわけで、TRISはTristate(トライステート)の略でした。 TRISA,Bの値を0にすると”High” or “Low&#…


続きを読む

[C#]Pic16f84シミュレータを作成する

2012年7月28日 (カテゴリ: C#, PIC:)

これまで1ヶ月ほど掛けて、パタヘネ本でCPUの動作原理を勉強してみたり、PICによるアセンブラプログラムの作成を行ってきました。そこで、今回は勉強した成果として、Microchipから発売されているPic16f84のシミュレーターを作成してみます。 いきなり全部作ると大変になるので、今回は大枠を作るために、ADDLW(Wレジスタの加算)とGOTO命令しか解析できない最低限のCPUシミュレータを、C#で構築します。 このシミュレータは、C#上ではクラス(Pic16f84Simulatorクラス)として実装していきます。 まずはプロパティの定義を行います。 class Pic16f84Simula…


続きを読む

セラロックの波形をオシロスコープで確認する

2012年7月28日 (カテゴリ: PIC, 電子回路基礎:)

ムラタから発売されているセラロックは、主に小規模向けマイコンでクロック生成用の安価なパーツとして使用されています。 この、セラロックが作り出しているクロック波形が気になったので、オシロスコープで確認してみました。 今回の確認で使用したパーツは、8MHz出力のCSTLLS8M00G56です。 まずは、手始めにセラロックをPICマイコンの16F84Aに接続し、動作している状態での波形を確認してみました。 画像がぼやけていて見づらいですが、縦横軸のメモリが波形の下に表示されており、横は1メモリが10nsec,縦は1メモリが1Vです。周期も画面右下に出ているのですが、7.96MHzとほぼ仕様値どおりの…


続きを読む

半加算器をNANDとNORだけで構成する

2012年7月27日 (カテゴリ: 論理回路基礎:)

半加算器(Half adder)というのはは、2つの1桁2進数に対する足し算を行い、和(Sum)と繰り上げ(Carry)を求める回路です。 今回は、半加算器の論理回路をNANDとNORだけで構成する方法について説明します。 まず、半加算器の振る舞いを押さえる為に、”NANDとNORだけ”という話は一旦おいといて、真理値表を確認します。 –半加算器の真理値表– in | out X Y | C S —–+—– 0 0 | 0 0 0 1 | 0 1 1 0 | 0 1 1 1 | 1 0 二入力のいづれか片方が1の場合は和(S)が1で、…


続きを読む

[デジタル回路]組合せ回路と順序回路の違い

2012年7月26日 (カテゴリ: 論理回路基礎:)

デジタル回路には、組み合わせ回路と順序回路が有ります。 組み合わせ回路は、入力から出力が決定するものです。 一方、順序回路は、入力値と内部状態から出力が決定します。 順序回路の代表的な例としては、以下の様なものがあります。 ラッチ(latch) RSラッチ Dラッチ   フリップフロップ(flip flop) Dフリップフロップ JKフリップフロップ   加算器(adder) 全加算器 半加算器 並列加算器   カウンタ 5進カウンタ 10進カウンタ 24進カウンタ 60進カウンタ … グレイコードカウンタ   タイマ ワンショットタイマ/インターバ…


続きを読む

[MPLAB]エラー”Argument out of range. Least significant bits used.”が出る時にチェックすべき事

2012年7月25日 (カテゴリ: PIC:)

MPLABでアセンブル時、Warning[202] Argument out of range. Least significant bits used.エラーが出る場合があります。 このワーニングは、セットした値を代入したとき代入先に値が入りきらないという警告です。 warningなのでhexファイルは作成されますが、値が意図したとおりセットされず、プログラムの動作は期待したものとは異なってしまうため、修正が必要です。 問題が発生する状況を分かりやすい例で言うと、以下のコードはWarning[202]が発生します。 MOVLW 0x100 Wレジスタは8ビットなので最大で0xff(255)し…


続きを読む

[電子回路]コンデンサの基礎知識

2012年7月24日 (カテゴリ: 電子回路基礎:)

コンデンサとは コンデンサは、電気をためておくことが出来るパーツです。 コンデンサの両端の端子に電圧をかけると、コンデンサの容量分、電気を貯めておく事が可能です。 コンデンサの両端子は電気的につながっていない為、直流成分を通す事が出来ないという特徴が有ります。 この特徴を利用して、特定の周波数成分を取り除くフィルタや、電源近くにコンデンサを置く事でノイズを除去することが出来ます。 他にも、コンデンサがバッファとして使用することで、特定の入力信号に対して、遅延を掛けて出力を行わせる事が出来ます。 これによって、例えばマイコンの初期処理(電源ONするまでの間リセット端子をActiveにする等)の簡…


続きを読む

コンプリメンタリ・トランジスタとは何か?

2012年7月23日 (カテゴリ: 電子回路基礎:)

トランジスタのデータシートを見ると、以下のように”コンプリメンタリ・トランジスタ”というものが指定されている場合があります。 ここで言うコンプリメンタリ・トランジスタとは何のことでしょうか? トランジスタは製造方法によって、PNP型とNPN型というものが有ります。 コンプリメンタリトランジスタというのは、この型(PNP/NPN)だけが逆で、他の特性は同様となるトランジスタの事を指します。 例えばルネサスが発売しているトランジスタである、2SC2334のデータシートを見ると、コンプリメンタリトランジスタとして2SA1010と記載されています。 確認のため、これら2つのトラ…


続きを読む

縦向きのトグルスイッチは,上下どちらをONにすべきか

2012年7月23日 (カテゴリ: 電子回路基礎:)

電子回路を作成する際、回路をON/OFFする為にトグルスイッチを使用する場合があります。 トグルスイッチには対象機器の特性や、スペース、想定する設置場所等によって、上向きや縦向きなど、様々な設置方向がありますが、縦置き式のトグルスイッチを設けた場合、上下どちらをONにすべきでしょうか? トグルスイッチを縦置きで設置するする場合、モノがぶつかったりした時にスイッチが下に変わってしまう危険があります。 この為、トグルスイッチを上下どちらがONにすべきかを考える時は、”上でON、下でOFF”にするのが一般的です。 これは、地球には重力があるので、下方向に押し下げられる可能性の…


続きを読む

[PIC]アセンブラで数値を記述する場合は基数指定が必須です

2012年7月22日 (カテゴリ: PIC:)

PICのアセンブラで基数を明示せずに数字を指定すると、通常は16進数として認識されます。 例えばPIC16F84で、以下のコードを実行すると… LIST P=16F84 INCLUDE P16F84A.INC ORG 0   MAIN MOVLW 0x10 GOTO MAIN   END このように、Wレジスタに0x10(10進数で”16″)がセットされます。 ですがMPLABを使用している場合、この振る舞いはプロジェクトの設定で変更可能なため注意が必要です。 変更が可能なのは、基数指定を明示しない時の解釈方法で、以下の方法で設定が可能で…


続きを読む

[C#]PIC16シリーズのバイナリを逆アセンブルする

2012年7月22日 (カテゴリ: C#, PIC:)

前回、MPLABで生成されたhexファイルを解析するプログラムをC#で用意しました。 今回はこのバイナリ(機械語)を元に、逆アセンブルするプログラムを作成します。 というわけでプログラムです。 13bitの2進データをみて文字列に変換するだけなので、単純に力技です。 今回は分かりやすいように全命令の処理を列挙しましたが、PICの機械語命令は、命令の各bitに何の情報を持たせるかの構成パターン数が少ないので、最適化させればもう少しシンプルに書けそうです。 PICアセンブラ入門 using System;   class Pic16f84 { //***************…


続きを読む

Androidのスマホに、ノートPCのキーボードから文字入力する[あやつ郎]

2012年7月21日 (カテゴリ: 未分類:)

ケータイ(スマホ)のアドレスへメールを直接送ってこられると、ちょっとイラッとします。 報告メールで返信が不要な場合は問題ないのですが、返信が必要な場合、入力が不便なスマホから文章をしなければならないので、非常にストレスがたまってしまいます。 スマホだとフリック入力できるので慣れれば速いとか言われたりもしますが、プログラマなら当然キーボードからの入力をしたいところです。 出先でも大抵ノートPCは持っているので,このキーボードを使えれば便利なのになぁ… と思ってたのですが、この悩みを解消してくれるモノが発売されました。 いつものPCキーボードでスマホ・タブレットを操作!「あやつ郎」 U…


続きを読む

[Win2003Svr]SSD購入時に設定すべきレジストリ項目5つ

2012年7月21日 (カテゴリ: 未分類:)

Windows 2003 Serverの起動ディスクをHDDからSSD構成に変更しました。 SSD化に伴い、設定しておくべきレジストリ項目をメモしておきます。 SSDはHDDと比較すると、最大書き換え回数が低いというのと、ランダムアクセス性能が良いという特徴がありますが、Windows 2003 Serverはデフォルトでインストールすると、HDD動作時での振舞いに最適化されているので、設定の変更が必要となります。 というわけで設定内容は、SSDの場合は意味がないものと、ディスクへの書き込みを極力抑えるという変更がメインです。今回はWindows 2003 Server用で設定&運用確認を行っ…


続きを読む

C#でintelのhexファイルフォーマットを解析する

2012年7月21日 (カテゴリ: C#, PIC:)

C#でintelのhexファイルフォーマットの解析プログラムを作成したので,公開しておきます。 hexファイルフォーマットはアスキー形式の可変長テキストですが、シンプルな作りになっているので読み込みは簡単です。 ファイルフォーマットの詳細が知りたい場合は、以下のエントリで説明しています。興味があれば参考にしてください。 MPLABで作成されたhexファイルのフォーマットを解析する ここで読み込んだ情報を元にPIC16F84A用のバイナリを逆アセンブルしてみる予定ですが、本クラス自体はターゲットデバイス非依存な作りです。 (pic以外用のROMデータでも解析できるはずです) というわけで、解析処…


続きを読む