stretch

OSのupgrade
Debian stretchが出てから約三ヶ月が経過し、少し仕事も落ち着いたので、upgradeしてみた。/homeを別のパーティションにしているので、データは消えないが、念の為にbackupしてから、作業に入る。 いつもはisoをCDRに焼くが、今回は1GのUSBメモリに入れることにした。isoファイルをcpで/dev/sdbにコピーして、syncすれば準備は終わった。biosの設定をUSBからbootできるように変えて、インストール。パーティションを切るところで、ルートと/homeの設定をする以外は、特に特別なことは無い。 必要なソフトを入れたが、苦労したのはやはりプリンターだった。okiのc301dnというプリンターなのだが、hipercというdriverを使わないといけない。以前の記録を頼りにインストールした。まず、foo2zjs.tar.gzを取ってきて、展開してmakeしてmake installする。このとき、dcをインストールする必要があった。これで、cupsからppdを指定すれば無事終了。 まあ、OSをupgradeしても、背景の色が変わったぐらいで、大きな変化は感じられないけど、以前と同じような感覚で使えるのは、良いことだろう。

Read more...

utf8で

新しい元素の漢字の文字コード
118までの元素名が決まってしばらくした5/9に中国語の漢字が決まったらしい。遅ればせながら、homepageを更新した。 新しい漢字もあるのだが、それに対して新しいユニコードも定義されたようだ。 今回、新しく定義されたのは、ニホニウムの簡体字とテネシンとオガネソンの漢字である。ニホニウムの漢字の予想は外れたが、あとの二つは予想通りである。ニホニウムは金偏に尔という字で&#40941、テネシンは石偏に田で&#40940、オガネソンは気がまえに奥で&#40939である。でも、自分の環境だと新しい漢字はPCに表示出来ていない。まだフォントが無いので仕方ないが。新しいdebianだと表示できるかな。そろそろOSをupgradeしようかな。

Read more...

GPIB adapter using Arduino Nano

自作USB-GPIBアダプター 少し古い計測装置の多くは、GPIBをインターフェースとして用いている。GPIBボードは高いし、ドライバーを入れるのは面倒なので、これまでにいくつかのGPIBのアダプターを自作してきた。例えば、昔のプリンターポートを使ったり、AVRでシリアルから変換したりした。また、FTDIのFT232Rのbitbangモードを使えば、新しいUSB-GPIBアダプターができるという考えで設計だけして作成をしていないものもある。今回、raspberry piからGPIBを使う必要が出てきたので、USB-GPIBアダプタを作ることにした。raspberry piのGPIOを使って直接GPIBを動かすこともできる気がするが、今回はarduinoを使うことにした。コンパクトに作りたいので、arduino nanoを使うことにしたが、似たようなものを作っている人も沢山いるので、それを真似して作ったが、かなりソースもいじって、ほぼ別物になってしまったので、ここに公開しておこうと思う。 GPIBケーブルを半分に切って、配線を基盤に集合抵抗と一緒に半田付けして、nanoに繋いだ。ケーブルの端にに25mm25mm*45mm程度の直方体が付いたような感じの出来上がりになった。それぞれの信号は、6.8kと3.3kでそれぞれGNDと5Vに繋いてあり、inputモードにするとhighになり、outputでlowにすることができる。タイムアウトの処理も入れたし、通常の使用はこれで大丈夫だろう。本当はbinaryを転送できるようにしたいが、0x0aを命令の区切りとして使っているので、これを転送する際の処理を別に考えないといけないのが面倒で、今回はasciiだけの処理にした。arduinoのソースを載せておきます。 #include <string.h> // GND-6.8kOhm-PIN-3.3kOhm-5V #define DIO1 2 // GPIB 1 : I/O data bit 1 #define DIO2 4 // GPIB 2 : I/O data bit 2 #define DIO3 6 // GPIB 3 : I/O data bit 3 #define DIO4 8 // GPIB 4 : I/O data bit 4 #define DIO5 3 // GPIB 13 : I/O data bit 5 #define DIO6 5 // GPIB 14 : I/O data bit 6 #define DIO7 7 // GPIB 15 : I/O data bit 7 #define DIO8 9 // GPIB 16 : I/O data bit 8 #define EOI 11 // GPIB 5 : End Or Identify #define REN 12 // GPIB 17 : Remote ENable #define DAV A0 // GPIB 6 : DAta Valid #define NRFD A1 // GPIB 7 : Not Ready For Data #define NDAC A2 // GPIB 8 : Not Data ACcepted #define IFC A3 // GPIB 9 : InterFace Clear #define SRQ A4 // GPIB 10 : Service ReQuest #define ATN A5 // GPIB 11 : ATteNtion #define GPIBTIMEOUT 200000 //200ms char com[256] = "
Read more...

用途限定の抵抗測定システム

arduino UNO用の電気抵抗測定シールド
電気抵抗を測定するシステムが不安定になっていたので、システムの更新を計画している。そのシステムは、限られた用途にしか使わないので、1ミリオーム程度から1オーム程度まで測定できれば良い。これまでは、GPIBで電源とデジボルを制御して測定していたが、抵抗の値が限定されるのであれば、安価なICを組み合わせれば、ほぼ同等のシステムを構築できるのでは無いかと考えられる。 そこで、計装アンプとADコンバーターとarduino UNOを使って、抵抗測定システムを作ることにした。仕様としては、白金抵抗温度計以外に4つの試料を同時に測定できるようにした。arduinoのピンから供給する0Vと5Vを使って、抵抗と直列に繋いだ試料に電流を流す。電流は標準抵抗にかかっている電圧から求め、それと試料にかかっている電圧から、抵抗が計算できる。熱起電力を打ち消すためには、arduinoのピンの電圧を反転させれば良い。 ADコンバーターとしては、MCP3425を用いた。このICは、プラスマイナスの電圧をそれぞれ15bitで読み取ることが出来、2/4/8倍のアンプも内蔵しているので、ダイナミックレンジは18bitと言える。温度計を測るには十分であるが、試料には5mA程度の電流を流すことにすると、電圧が小さすぎるので、計測アンプで増幅する必要がある。計装アンプはLT1167を使って200倍程度の増幅することにした。 最終的には、MCP3425を10個とLT1167を4個使って、arduinoで4つの試料を同時に測定できるシステムが完成した。測定時間も片側0.5秒ぐらいで測定しても、ノイズはそれほど大きくなかったので、1秒程度で測定ができる。まだ、試運転の段階で、本格稼働はしていないが、予定程度の性能を持つシステムができた気がする。

Read more...

シリアルをRで使ってみた

Rでarduino
arduinoとシリアルで通信するときに、その結果をグラフをにしたかったので、Rを使ってみた。少し検索してみたが、あまり情報が見つからなかったので、手探りでやってみた。まず、fileコマンドで/dev/ttyUSB0を開けて、読んだり書いたりしてみたら、多少は動くことが分かった。しかし、読むときに、最後まで読んでしまうと、それ以上読み込めなくなることが分かった。そこで、開いて読んで閉じるということを繰り返すことによって、やりたいことができることを確認したのだが、しばしばエラーが出てしまう。手でコマンドを打つと動くのだけど、コードにすると、エラーがでる。でも、それなりに動くからいいか。必ずしも必要かどうかは不明だが、適宜sleepを入れて、結果として以下のようなコードになった。もちろん、読み込んだデータの処理もしないといけないが、それは省略している。

while(TRUE){
 f<-file("/dev/ttyUSB0","r+")
 Sys.sleep(0.1)
 cat("G0000\n",file=f)
 Sys.sleep(0.1)
 d<-scan(f,quiet=TRUE)
 Sys.sleep(0.1)
 close(f)
 Sys.sleep(1)
}
Read more...

形式によるコマンドの違い

Rのグラフのセーブ

Rで作ったグラフを画像ファイルにセーブするときには、ファイル形式によって、コマンドが違う例えば、epsやpdfの場合には、

dev.copy2eps(file="temp.eps")
dev.copy2pdf(file="temp.pdf")

とすると表示されているグラフがセーブできる。幅や高さも表示されている通りになる。具体的に指定するためには、グラフを書く前に、X11(width=6,height=4)として、指定すれば良い。ちなみに単位はインチである。一方pngやjpegの場合には、幅や高さのdefault値が四角くなっているらしく、表示されているグラフと、セーフされたグラフの形が違ってくる。 これを指定するためには、以下のように解像度をdpi単位で、幅と高さをpoint単位で指定する必要がある。

dev.copy(png,file="temp.png",width=72*6,height=72*4,res=72);dev.off()
dev.copy(jpeg,file="temp.jpg",width=72*6,height=72*4,res=72);dev.off()

ドットで構成された図の形式だと仕方ないのかも知れないが、面倒だ。

Read more...

バイナリのレジストリ

regコマンドを使って
以前、HDDが死んで、HDDの入れ替えを行ったPCのソフトが不調になった。古いHDDの中身は取り出していたのだが、ソフトの部分を置き換えても、レジストリが違うので動かない。レジストリはバックアップしていなかったのだが、システムファイルがあるので、そこからレジストリの情報を取り出せないかと思って調べたら、できるようだ。 レジストリは、windows/system32/config内に保存されているが、バイナリなので、そのままでは読めない。レジストリをいじるためには、regeditを良く使っていたが、組み込まれていないレジストリはこれでは扱えない。XP以降ではregというツールを使えるようになっており、これを使うとバイナリファイルに保存されているレジストリを取り出すことができる。コマンドプロンプトでバックアップされたバイナリのレジストリファイルがあるところに行って、reg load HKLM\Temp_software softwareとすると、System\Temp_softwareというレジストリの下に、softwareというファイルに保存されていたレジストリが展開される。これをregeditを用いて取り出せば良い。注意しないといけないのは、regeditを立ち上げていると、エラーが出てしまうことである。このせいで、しばらく悪戦苦闘してしまった。 レジストリを入れ替えて、ソフトのファイルを古いHDDのものに入れ替えたら、無事に動くようになった。

Read more...

xvkbdを使ってみた

raspberry pi用の仮想キーボードのカスタマイズ raspberry piにLCDを取り付けたが、まだまだ使える状態に無かったので、少しいじってみた。タッチパネル用の仮想キーボードとしては、matchbox-keyboardを入れていたが、カスタマイズが難しそうだったので、xvkbdを使うことにした。デフォルトでコンパクトなタイプが立ち上がるように、.local/share/applications/xvkbd.desktopを編集して、以下のようにした。 [Desktop Entry] Name=xvkbd Exec=xvkbd -compact -modal Icon=xvkbd Type=Application Comment=Virtual Terminal=false Categories=Utility; ここで、問題になるのが、バックスペースである。コンパクトモードにすると、デリートキーしか無くなって、直前の文字を消すためには、矢印で戻ってからデリートを押さなければならず、面倒である。そこで、/etc/X11/app-defaults/XVkbd-commonを編集して、設定を変える。まず、二つのキーのサイズを入れ替える。 !XVkbd*BackSpace.width: 75 XVkbd*BackSpace.width: 45 !XVkbd*Delete.width: 45 XVkbd*Delete.width: 75 そして、実際のキーの配置を入れ替えるために、このファイルの最後に以下を加えた。 xvkbd.NormalKeys: \ F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Delete \n\ Escape 1 2 3 4 5 6 7 8 9 0 - = \\ ` \n\ Tab q w e r t y u i o p [ ] BackSpace \n\ Control_L a s d f g h j k l ; ' Return \n\ Shift_L z x c v b n m , .
Read more...

古いwineのインストール

wineとdebianの相性
昨日debian stretchにwine0.9.25を入れるのに失敗したので、仕方なく古いdebianを使うことにした。選んだのはdebian lennyの5.0.10 i386である。CDイメージからインストールして、まずは/etc/apt/sources.listに

deb http://archive.debian.org/debian/ lenny main
deb-src http://archive.debian.org/debian/ lenny main

を追加して、

aptitude update
aptitude install build-essential flex bison libx11-dev libxext-dev

とする。 ここで、wine 0.9.25をコンパイルするのだが、何も工夫せずに./tools/wineinstallを実行するだけで、インストールできた。問題のソフトも無事に動く。ただ、シリアルのエラーは出ている。このソフトが動くか動かないかが何で決まっているのか、さっぱり分からない。タイミングかな?

Read more...

i386をインストール

wineとdebian stretch

古い測定システムのPCが死亡したので、別のPCを測定用に立ち上げようとして苦労している。そのシステムは2012年の2月に立ち上げて、一度PCが死んだけど、近い世代のPCにHDDを載せ替えて使っていたが、そのPCも死んで、同じ世代のPCが見当たら無かったので、仕方無く別のPCにシステムをインストールしようとしている。

このソフトは、windows95かNT4.0でしか動かないらしく、シリアルポートも使っている。これをwineで動かしていたのだが、wineのversionによって動かないことが分かっている。最新のwineで動いてくれないかなと思って試してみたが、

fixme:comm:set_queue_size insize 4096 outsize 4096 unimplemented stub

と出て、装置が認識されなかった。また、昔の記録によると、0.9.25で動かしていたので、これをインストールしようとしたが、64ではコンパイルできなかった。そこで、OSをi386のdebianにしようと思って調べたら、つい最近新しくstretchが出ていたので、このi386をインストールすることにした。

とりあえず、isoイメージを落として、CDRに焼いて、LXDEをインストールした。aptitudeとwineのコンパイルに必要なbuild-essential flex bison libx11-dev libxext-devをインストール。そして、https://dl.winehq.org/wine/source/0.9/からwine-0.9.25.tar.bz2を取ってきて展開する。2012-02-09のところに書いてあるように、ファイルを変更して、./tools/wineinstallを実行する。しかし、libs/port/interlocked.cのところでエラーが出る。tools/wineinstallを

CONFARGS="CFLAGS=-fgnu89-inline"

と変更して、config.cacheを削除して、コンパイルすると、少し進んでtools/wrc/parser.yでエラーになる。このファイルに

#define YYLEX		yylex()

を付け加えたら、また少し進んだ。今度は、いくつかの関数が重複して定義されていますと言われる。これは、おそらくinterlocked.cのところのエラーを回避したために起こっているようだ。 ううん、難しいな。

Read more...