2012年2月23日木曜日

ADS1102CALを買ってみた

オシロスコープを海の向こうの隣国から買ってみた記録。Attenなどという聞いことも無いメーカーさんの、ADS1102CALというやつ。まぁ、デュアルチャネルで、USBメモリへの保存もできるから、無いよりかは格段に作業効率が上がるはず。
年明け早々の1月2日にオーダー。で、1月8日に発送。以降DHLさんが頑張る。
中国→香港→日本ですね。で、国内は佐川が持ってきました。そういえば、国内に入ったところでDHLから中身の確認があった。通関を通すためだってね。で、その時に「時間帯指定できますか?」と聞いたら、「私の業務じゃないから、カスタマセンターに電話してね」と。で、通関通ったのを確認したあたりで電話。荷物番号伝えると「確認しまーす。。。その荷物は、佐川に受け渡したよ。こちらから佐川に連絡できるけど、どうする?」「佐川の荷物番号教えて」ということで佐川的な荷物番号をゲット。あとは、普通の宅配便と同じ。帰宅後を指定して届けてもらいました。というわけでドーンッ!!
怪しい黒いビニールに包まれていた。
でビリビリとビニールを剥してみると、、、そこには、オシロの箱が。うしし。って、一緒に買ったものは、どこ?超音波センサとジャンプワイヤ買ったんだけどなー。別便なのかなー。そんな連絡何もないし。って、見てみるとオシロの箱が開いておる。まさか。。。
いたっ!!って、オシロ開けたんかい!!仮にも計測機器でっせ。。。まぁ、全ての品が無事届いたから良しとしよう。

LPCXpresso IDEでアセンブラ単位のステップ実行

いつもどおりデバッグを始めるよね。
で、デバッグビューのツールバーには、ステップインとステップオーバーがある。ステップインは、関数内に入る。
ステップオーバーは、関数内を実行してしまい、次の行に進む。
まぁ、ここら辺までは、良いよね。でもさ、OSとかのデバッグとか、インラインアセンブラで書いた部分をデバッグしようとすると、これだと事足りないわけですよ。C言語で書いたプログラムをディスアセンブルしたものの機械語を一つずつステップ実行したいとかなるわけです。そこで、コレ。
押してみると、ビューが変わる。
ディスアセンブルしたものが見えてますね。このままステップオーバーすると、
おぉ。これぞまさに1ステップ!! そんなわけで、アセンブラ1行ずつをステップ実行する方法でした。

2012年2月21日火曜日

MacでLPCXpresso使いたいのだー。

LPCXpressoの開発をVirtualMachine上でやってみた。 Mac向けの環境が無いんだからしょうがない。 Linuxでは動くので、VirtualBox上でDebianを動かして、そこでやってみた。
  1. VirtualBoxのインストール
  2. Debianのインストール
  3. LPCXpresso-IDEのインストール
ここまでは、普通に済ませる。OSがネイティブに動いているのであれば、ここでLPC-Linkを挿してバリバリ開発になるのだが、今回はVirtualMachine上で動くDebianにUSBデバイス(LPC-Link)をパイプしてあげないといけない。以下、その手順。 まずは、LPC-Linkを挿してフィルタに追加する。 設定画面のポート→USBを選択して、「+」のアイコンをクリックする。。。
LPC-Linkが挿さっていれば「不明なデバイス 0471:DF55」がリストされるので選択する。
これで、LPC-Linkを挿したときに自動でゲストOSから見えるようになる。 見えてますよね。の確認は、こんな感じ。
さて、これで、いざ開発!!といきたいところだが、そうもいかない。 LPC-Linkは、接続された直後はDFUデバイスになっていて、そこにデバッガファームを書き込んでからでないと使えない。 で、デバッガファームを書き換えると、接続直後とは別のUSBデバイスに変身するので、そちら側も自動で仮想マシンに接続するように設定してあげないといけないわけだ。 というわけで、ここでLPC-Linkに変身してもらう。詳しくは、 ここら辺。
もう一度、USBデバイスの設定をする。仮想マシンの設定を開いて、
USBデバイスを選択する。
上記コマンドが正しく処理されていれば、以下のように「Code Red Technologies LPC-Link Probe v1.1」なんてのがいるので、こいつを選択すればOK。
ここまでの設定で、以下のように2つのデバイスがエントリされていれば、OK。
ここで、LPC-LinkをDFUデバイスとして認識させるために抜いてしまう。ちゃんと設定できていれば、LPC-Linkを接続したところで自動的に仮想マシンに繋がるので、あとはIDEでリアル環境と同じように使えますよ。

2011年12月3日土曜日

ADK demokitのプロトコル

android -> accessory

-- msg[0] msg[1] msg[2]
LED1 RED 0x02 0x00 0 - 255
LED1 GREEN 0x02 0x01 0 - 255
LED1 BLUE 0x02 0x02 0 - 255
LED2 RED 0x02 0x03 0 - 255
LED2 GREEN 0x02 0x04 0 - 255
LED2 BLUE 0x02 0x05 0 - 255
LED3 RED 0x02 0x06 0 - 255
LED3 GREEN 0x02 0x07 0 - 255
SERVO1 0x02 0x10 0 - 255
SERVO2 0x02 0x11 0 - 255
SERVO3 0x02 0x12 0 - 255
RELAY1 0x03 0x00 0(Low), 1(High)
RELAY2 0x03 0x01 0(Low), 1(High)

accessory -> android

-- msg[0] msg[1] msg[2]
Button1 0x01 0x00 0, 1
Button2 0x01 0x01 0, 1
Button3 0x01 0x02 0, 1
Button Joystick 0x01 0x04 0, 1
temperature 0x04 value of MSB value of LSB
light 0x05 value of MSB value of LSB
joystick 0x06 position of X(-128 - 127) position of Y(-128 - 127)
touch robot 0x01 0x03 0, 1

2011年11月16日水曜日

AquaSKKの入力規則をカスタマイズした。

これから作る入力規則のファイル名と名前を書いておく。
$ cat $HOME/Library/Application\ Support/AquaSKK/sub-rule.desc
my.rule オレ用
で、そのファイルに入力規則を書く。今回はひらがなモードのときの括弧を全角にしたっかの。入力規則はEUC-JPで保存しなきゃダメなところに注意ね。
$ cat $HOME/Library/Application\ Support/AquaSKK/my.rule | iconv -f euc-jp -t utf-8
(,(,(,(
),),),)
?,?,?,?
!,!,!,!
@see http://aquaskk.sourceforge.jp/kana_rule.html

MacでADK

Androidと何かを繋げるためのADK(Android Open Accessory Development Kit)を試してみようと。でもArduinoとか無かいんだね。しょうがないので、Android ADKのdemokitコンパチなstubをMac上に作って喋らせた。Macのほうのデザインがダサいのは、日本のサラリーマンだからしょうがない。
繋げるのも手間じゃないし、繋ってしまえば、こちらのモンやし、良い感じ。

2011年9月21日水曜日

docutilsのディレクティブを作ってみた。

reStructuredTextで、
.. code-block:: ruby
   ::filename:: hello.rb

   puts "hello, world!!"
と書いて、
hello.rb:
<pre class="brush: ruby">
puts "hello, world!!"
</pre>
に変換させたい。
class CodeBlockDirective(Directive):
  required_arguments = 0
  optional_arguments = 1
  has_content = True
  option_spec = { 'filename': directives.unchanged }

  def run(self):
    node = []
    filename = self.options.pop('filename', None)
    if filename is not None:
      node.append(nodes.Text("\n%s:" % filename))
    else:
      node.append(nodes.Text("\n"))
    opt = {'classes' : []}
    if len(self.arguments) != 0:
      opt['classes'].append("brush: %s" % self.arguments[0])
    node.append(nodes.literal_block(self.content, "\n".join(self.content), **opt))
    return node
めでたしめでたし