2013年12月12日木曜日

新しいバージョンのBlender(2.69)に対して行ったこと

Blender 2.69をダウンロードしました。

やっぱり自作のPythonスクリプトを動かすためには、なんかが足りないようです。

ググる先生を検索していると過去の自分の記事を発見しました。

新しいバージョンのBlenderに対して行ったこと


今回も同じことを行うことで無事動きました。

すぐに忘れる脳には、やっぱり必要なんだな。ブログ。

しかし、なんだな。なんにも作業が進まないのに、Blenderのバージョンだけが上がっていくという…


2013年12月1日日曜日

SDCCによるFX2LPのFirmware開発に再挑戦 その3 (コンパイル成功)

今回はコンパイルに成功しました。

前回までの細かさとは打って変わって、非常に大雑把になってます。
ごめんなさい。


使ったもの:
SDCC-3.3.0
MinGW   mingw32-base
   msys-base   


http://sourceforge.net/projects/fx2lib/ からダウンロードした fx2lib-src-0.1.tgz 
pfenrirさんちで公開されているヘッダファイルとmakefile



前回、嫌んなっちゃったんで、ちょっと違うことをしてみます。


http://sourceforge.net/projects/fx2lib/ から、 fx2lib-src-0.1.tgz をダウンロードしました。

tgzファイルなんですが、ググってみると、解凍コマンドがわかりましたので、MinGWのコンソールで解凍できました。
コマンドはhttp://uguisu.skr.jp/Windows/tar.htmlを参考にさせていただきました。

私はSDCCでのコンパイル用に「C:\SDCC」というフォルダを作っていたので、そこに解凍してできた「fx2lib」というフォルダとその内容をすべて「C:\SDCC\fx2lib」として保存しました。


makefileのINCLUDESのところに「C:\SDCC\fx2lib\include」、LIBSのところに「C:\SDCC\fx2lib\lib」を設定しました。

で、makeすると、これがない、あれがない、こんな命令知らない、といろいろ言われるので、対応します。
なんだか覚えてませんが、なかったものは前回までにpfenrirさんちから頂いたファイルをコピーしました。なぜコピーしたかというと、なにか変更しなくちゃならなくなったら、元のファイルをいじりたくなかった、というだけですので、本来はINCLUDESやLIBSのパスに加えるだけでいいと思います。

他にも xdata は判りません、みないなのもあったと思いますが、すべて前回までに知っていたところだったので問題なく対応出来ました。

すると、どうでしょう。
makeがエラーを吐くことなく終わりました!

最終的には
Intel Hex file to EZ-USB Binary file conversion utility
Copyright (c) 2012-2013, Cypress Semiconductor Inc.
4979 Bytes written.
Total Code Bytes = 4726
Conversion completed successfully.
ということで、できたようです。

ただ、ここまで来ても、「make 1> ./build_by_sdcc/make.txt 2>&1」で保存しておいたファイルを見るとerrorが吐かれていたりするので検索して確認し、対応し、回避しています。



次回以降は実際にfx2lpのeepromに書き込んで動作確認します。






SDCCによるFX2LPのFirmware開発に再挑戦 その2

注意: ただの駄文です。
    結局、今回はSDCCによるFX2LPのFirmware開発は成功していません。



前回、SDCCさんは ezusb.lib がお気に召さなかったので、再度pfenrirさんちから取得しなおして、make。

今度は

Multiple definition of _EUSB
Multiple definition of _EA
memory overlap at 0x0 for RSEG1
memory overlap at 0x1 for RSEG1

と言われたので探してみると、私が fx2regs.h をいじった形跡が…

2箇所、
390行目付近:
sbit EA    = 0xA8+7;

480行目付近:
sbit EUSB    = 0xE8+0;

を、はじめはコメントされていたのに、復活していました。

で、これを再度コメントアウトして、makeすると…

fw.c:210: error 20: Undefined identifier 'EUSB'
fw.c:216: error 20: Undefined identifier 'EA'

おお、これ、見たことある。これを言われたから fx2regs.h をいじったんだった…

ん? 活かしてもダメ、コメントにしてもダメ。いったい、どうすれば?

よく見ると、fx2regs.incが、fx2regs.hと同じフォルダにあります。
このfx2regs.incは、pfenrirさんのものです。
が、fx2regs.hは↓のものでした。
https://raw.github.com/stefanrauch/bel_projects/master/cy7/cyfx2usbuart/fx2regs.h

このfx2regs.hの中でコメントアウトされていたEUSBとEAの2群を復活して、make clean
make。

Multiple definition of _EIEX6
Multiple definition of _EI2C
Multiple definition of _EIPX4
Multiple definition of _EIPX5
Multiple definition of _EIPX6
Multiple definition of _PI2C
Multiple definition of _EUSB
Multiple definition of _PUSB
Multiple definition of _EA
Multiple definition of _ES0
Multiple definition of _ET0
Multiple definition of _ES1
Multiple definition of _ET1
Multiple definition of _ET2
Multiple definition of _EX0
Multiple definition of _EX1
Multiple definition of _EIEX4
Multiple definition of _EIEX5
memory overlap at 0x0 for RSEG1
memory overlap at 0x1 for RSEG1
memory overlap at 0x2 for RSEG1
memory overlap at 0x3 for RSEG1
memory overlap at 0x4 for RSEG1
memory overlap at 0x5 for RSEG1
memory overlap at 0x6 for RSEG1
memory overlap at 0x7 for RSEG1
memory overlap at 0x8 for RSEG1
memory overlap at 0x9 for RSEG1
memory overlap at 0xA for RSEG1
memory overlap at 0xB for RSEG1
memory overlap at 0xC for RSEG1
memory overlap at 0xD for RSEG1
memory overlap at 0xE for RSEG1
memory overlap at 0xF for RSEG1
memory overlap at 0x10 for RSEG1
memory overlap at 0x11 for RSEG1

今度はこんなに~

とりあえず「EIEX6」が含まれているファイルを探すと、次の4ファイルありました。
ezregs.h
ezregs.inc
ez2regs.h
ez2regs.inc

ezregsとez2regsの両方が使われてるってことかな。

ところが、ezregsを呼び出しているファイルを探すと、存在しません。
が、ez2regsの両ファイルには
If you modify the register definitions below, please regenerate the file
    "ezregs.inc" which includes the same basic information for assembly inclusion.
と書いてあるので、誰かが呼んでいるのだろうと思うことにして、

ezregsの両ファイルから、さきの2群をもう一度コメントアウト。

同じのが出る~~
では、ezregsとez2regsの計4ファイルからコメントアウトしてみましょう。


fw.c:210: error 20: Undefined identifier 'EUSB'

もう、面倒になってきちゃった(苦笑)

2013年11月18日月曜日

SDCCによるFX2LPのFirmware開発に再挑戦 その1

(本投稿中、「&」や「>」、「\\\」といった表示がありますが、直しても直しても戻ってしまうので諦めました。それぞれ1バイト文字の&、>、¥のことです。すみません)


FX2LP(EZ-USB)を使った「変なキーボード」の制作ですが、
どうにも、フリー版のプログラムサイズの問題に引っかかってしまい。
数年前にも挑戦して挫折した、SDCCによるコンパイルに、再挑戦してみます。


まずは、pfenrirさんちの記事のサンプルをkeilでコンパイルしてみます。
pfenrirさん、ありがとうございます。勝手に使ってます。すみません。

最近のμVisionで開くと、いろいろパスが変わっていますので、修正します。
Target 1 の Source Group 1 に入っているファイルもパスが変わっていてペケ印がついていますので、これにも対応します。

Options for Tariget 'Target1' の Output タブの下部、Run User Program の1つ目に、通常、
C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Bin\hex2bix -i -f 0xC2 -o bulkloop.iic bulkloop.hex
のように入れますが、このファイルの指定時にコンパイルするフォルダを指定します↓
C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Bin\hex2bix -i -f 0xC2 -o .\build_by_keil\bulkloop.iic .\build_by_keil\bulkloop.hex


で、コンパイルすると、
C:\CYPRESS\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\TARGET\INC\LPREGS.INC(266): error A10: ATTEMPT TO DEFINE AN ALREADY DEFINED SYMBOL
などと言われますので、その部分をコメントアウトします。

もう一度コンパイルすると、

エラーなくできました。iicファイルもできています。

他にもなんかいじくったかもしれませんが、記憶が曖昧で書けない…

はじめ、hexファイルが出来なくて困っていたんですが、projectのoptionを開いてチェックボックスのチェックを一旦外してOKしてからまた入れる、というのを繰り返したら、できました。

FX2LPにダウンロードしてまでは確認していませんが、もらってきたソースでiicファイルまで動くことが確認できました。





では、同じソースを、SDCCを使ってコンパイルしましょう。


準備:
まずは、SDCC-3.3.0 をインストールしました。

次に、mingw-get-setup.exe をインストールしました。
さらに、 C:\MinGW\bin にある mingw-get.exe を起動し、
All Packages
    MinGW
        MinGW Base System
にある、 mingw32-base のチェックボックスをクリックして、"Mark for Installation" を選び、メニュー Installation - Apply Changes を選んでインストールしました。
同様に、
    MSYS
        MSYS Base System
にある、msys-base をインストールしました。

MSYSのシェルは、
C:\MinGW\msys\1.0\msys.bat を開くと起動しました。



pfenrirさんちで公開されているヘッダファイルをまとめて一つのフォルダに保存し、makefileの中ではじめに参照するように設定します。


MSYSシェルを起動してmakefileのあるフォルダまでcdで移動して、makeコマンドを発行しました。

こんなん出ました:
sed: -e expression #2, char 17: unknown option to `s'

おそらく、makefileの
cat tempfile | sed -e 's/^+.*//g' -e 's/[^\.]*\.rel/$(BUILD_DIR)\/&/g' >> $(BUILD_DIR)/depend.inc; \
の部分から来ていると思うのですが、なんだかわかりません。

(以下、素人による原因究明過程ですんでひと目で問題点がお分かりになる方には単なる駄文長文ですね。ごめんなさい。)


ここで、このtempfileの内容を取得したものを示しますね。
fw.rel: fw.c c:/SDCC/pfenrir_inc/fx2.h c:/SDCC/pfenrir_inc/fx2regs.h \
c:/SDCC/pfenrir_inc/syncdly.h
+ c:\PROGRA~1\SDCC\bin\sdcpp.exe -nostdinc -Wall -MM -I"c:/SDCC/pfenrir_inc" -obj-ext=.rel -D__SDCC_MODEL_SMALL -DSDCC_MODEL_SMALL -D__SDCC_FLOAT_REENT -DSDCC_FLOAT_REENT -D__SDCC=3_3_1 -DSDCC=331 -D__SDCC_REVISION=8894 -DSDCC_REVISION=8894 -D__SDCC_mcs51 -DSDCC_mcs51 -D__mcs51 -D__STDC_NO_COMPLEX__ -D__STDC_NO_THREADS__ -D__STDC_NO_ATOMICS__ -D__STDC_NO_VLA__ -isystem "c:\Program Files\SDCC\bin\..\include\mcs51" -isystem "c:\Program Files\SDCC\bin\..\include" "fw.c"
periph.rel: periph.c c:/SDCC/pfenrir_inc/fx2.h \
c:/SDCC/pfenrir_inc/fx2regs.h c:/SDCC/pfenrir_inc/syncdly.h
+ c:\PROGRA~1\SDCC\bin\sdcpp.exe -nostdinc -Wall -MM -I"c:/SDCC/pfenrir_inc" -obj-ext=.rel -D__SDCC_MODEL_SMALL -DSDCC_MODEL_SMALL -D__SDCC_FLOAT_REENT -DSDCC_FLOAT_REENT -D__SDCC=3_3_1 -DSDCC=331 -D__SDCC_REVISION=8894 -DSDCC_REVISION=8894 -D__SDCC_mcs51 -DSDCC_mcs51 -D__mcs51 -D__STDC_NO_COMPLEX__ -D__STDC_NO_THREADS__ -D__STDC_NO_ATOMICS__ -D__STDC_NO_VLA__ -isystem "c:\Program Files\SDCC\bin\..\include\mcs51" -isystem "c:\Program Files\SDCC\bin\..\include" "periph.c"

「cat」はファイルの中身を表示するコマンドらしいので、続く「|」によって「sed」にファイルを渡しているようです。
なので、基本的な「sed」の使い方に則って
sed -e 's/^+.*//g' -e 's/[^\.]*\.rel/./build_by_sdcc\/&/g' tempfile > ./build_by_sdcc/depend.inc
のように書いても同じことができるはず。
やってみると、同じエラーが出ますね。

1つ目の変換指定だけにして実行すると、エラーなく動きました。
sed 's/^+.*//g'  ./build_by_sdcc/tempfile.txt > ./build_by_sdcc/depend.inc

検索文字列の指定は「^」は行頭を指すので、行頭に'+'があって、「.*」は任意の文字がゼロ個以上ということ、
置換文字列は指定されていないので見つけたら削除するとうことになります。
最後の「g」は見つけたものすべてを変換せよということらしいです。
合計すると実行結果は
fw.rel: fw.c c:/SDCC/pfenrir_inc/fx2.h c:/SDCC/pfenrir_inc/fx2regs.h \
 c:/SDCC/pfenrir_inc/syncdly.h
periph.rel: periph.c c:/SDCC/pfenrir_inc/fx2.h \
 c:/SDCC/pfenrir_inc/fx2regs.h c:/SDCC/pfenrir_inc/syncdly.h
となるのは理解出来ました。


問題の2つ目の変換指定「s/[^\.]*\.rel/./build_by_sdcc\/&/g」について。
検索文字列は、「\.」が任意の文字ではなくてピリオドそのものを指し、「[^\.]」なのでピリオドではない1文字、後ろに「*」があるので「[^\.]*」はピリオドではない長さゼロ以上の文字列、
「\.rel」は文字列'.rel'そのものを指す。合計してウィンドウズのワイルドカード的に書くと'*.rel'ということですね。
置換文字列は、あれ?どこからどこまでだ?
「./build_by_sdcc\/&」かな?でも、sedは検索文字列と置換文字列、オプションの区切りにスラッシュを使うのでこのままじゃダメな気がする。

「s/[^\.]*\.rel/\.\/build_by_sdcc\\\/&/g」にしてみたら、エラーはでなくなりました。
しかーーし、
2つ目のだけを実行したファイルを見ると
./build_by_sdcc\/fw.rel: fw.c c:/SDCC/pfenrir_inc/fx2.h c:/SDCC/pfenrir_inc/fx2regs.h \
 c:/SDCC/pfenrir_inc/syncdly.h
+ c:\PROGRA~1\SDCC\bin\sdcpp.exe -nostdinc -Wall -MM -I"c:\SDCC\./build_by_sdcc\/pfenrir_inc" -obj-ext=.rel -D__SDCC_MODEL_SMALL -DSDCC_MODEL_SMALL -D__SDCC_FLOAT_REENT -DSDCC_FLOAT_REENT -D__SDCC=3_3_1 -DSDCC=331 -D__SDCC_REVISION=8894 -DSDCC_REVISION=8894 -D__SDCC_mcs51 -DSDCC_mcs51 -D__mcs51 -D__STDC_NO_COMPLEX__ -D__STDC_NO_THREADS__ -D__STDC_NO_ATOMICS__ -D__STDC_NO_VLA__ -isystem "c:\Program Files\SDCC\bin\..\include\mcs51" -isystem "c:\Program Files\SDCC\bin\..\include"  "fw.c"
./build_by_sdcc\/periph.rel: periph.c c:/SDCC/pfenrir_inc/fx2.h \
 c:/SDCC/pfenrir_inc/fx2regs.h c:/SDCC/pfenrir_inc/syncdly.h
+ c:\PROGRA~1\SDCC\bin\sdcpp.exe -nostdinc -Wall -MM -I"c:\SDCC\./build_by_sdcc\/pfenrir_inc" -obj-ext=.rel -D__SDCC_MODEL_SMALL -DSDCC_MODEL_SMALL -D__SDCC_FLOAT_REENT -DSDCC_FLOAT_REENT -D__SDCC=3_3_1 -DSDCC=331 -D__SDCC_REVISION=8894 -DSDCC_REVISION=8894 -D__SDCC_mcs51 -DSDCC_mcs51 -D__mcs51 -D__STDC_NO_COMPLEX__ -D__STDC_NO_THREADS__ -D__STDC_NO_ATOMICS__ -D__STDC_NO_VLA__ -isystem "c:\Program Files\SDCC\bin\..\include\mcs51" -isystem "c:\Program Files\SDCC\bin\..\include"  "periph.c" 
./build_by_sdcc\/fw.rel …「\/」なんて、どんなパスだよ、ということで
「s/[^\.]*\.rel/\.\/build_by_sdcc\/&/g」とするとできました。

(ということは、「&」は検索文字列そのものを指しているみたいですね。だって、発見した'fw.rel'が消えずにあるので)

上記を合わせて、コマンドは
もとの
cat tempfile | sed -e 's/^+.*//g' -e 's/[^\.]*\.rel/$(BUILD_DIR)\/&/g' >>  $(BUILD_DIR)/depend.inc; \
から
sed -e 's/^+.*//g' -e 's/[^\.]*\.rel/\.\/build_by_sdcc\/&/g' .tempfile >> ./build_by_sdcc/depend.inc; \
になるでしょう。

 make 1> ./build_by_sdcc/make.txt 2>&1
とコマンド発行して結果を取得しましょう。

ちなみに ./build_by_sdcc/depend.inc はこんな感じです。c:/SDCC/p.....って、変なパスだなぁ。これで動くのかね?
./build_by_sdcc/fw.rel: fw.c c:/SDCC/pfenrir_inc/fx2.h c:/SDCC/pfenrir_inc/fx2regs.h \
 c:/SDCC/pfenrir_inc/syncdly.h
./build_by_sdcc/periph.rel: periph.c c:/SDCC/pfenrir_inc/fx2.h \
 c:/SDCC/pfenrir_inc/fx2regs.h c:/SDCC/pfenrir_inc/syncdly.h

makeは、sedのあとで上の depend.inc をインクルードして実行するわけですが…
なんか、sdccさんは、ソースファイルの内容がお気に召さないご様子です…
sdcc -c -V --debug --opt-code-speed --model-small -I"C:\SDCC\pfenrir_inc" -I"c:\program files\sdcc\include" -I"C:\Keil\C51\INC" -I"C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Target\Inc" -I..//include -o build_by_sdcc/fw.rel fw.c
+ c:\PROGRA~1\SDCC\bin\sdcpp.exe -nostdinc -Wall -I"C:\SDCC\pfenrir_inc" -I"c:\program files\sdcc\include" -I"C:\Keil\C51\INC" -I"C:\Cypress\USB\CY3684_EZ-USB_FX2LP_DVK\1.0\Target\Inc" -I"..//include" -obj-ext=.rel -D__SDCC_MODEL_SMALL -DSDCC_MODEL_SMALL -D__SDCC_FLOAT_REENT -DSDCC_FLOAT_REENT -D__SDCC=3_3_1 -DSDCC=331 -D__SDCC_REVISION=8894 -DSDCC_REVISION=8894 -D__SDCC_mcs51 -DSDCC_mcs51 -D__mcs51 -D__STDC_NO_COMPLEX__ -D__STDC_NO_THREADS__ -D__STDC_NO_ATOMICS__ -D__STDC_NO_VLA__ -isystem "c:\Program Files\SDCC\bin\..\include\mcs51" -isystem "c:\Program Files\SDCC\bin\..\include"  "fw.c"
sdcpp.exe: fatal error: when writing output to : Invalid argument
C:/SDCC/pfenrir_inc/fx2.h:166: syntax error: token -> 'BOOL' ; column 16
心配した変なファイルパスは通っているようですね。スゴイ変な感じ。ありがたいけど。

fx2.hは、結局、
https://raw.github.com/stefanrauch/bel_projects/master/cy7/cyfx2usbuart/fx2.h
から取得したものを使用しました。

fx2.hの"BOOL"がお気に召さないのは、SDCCが"bit"を解釈してくれない(型として持ってない?)ので、
typedef bit             BOOL;
の前に、
#define bit __bit
が追加されています。"__bit"とするとわかってくれるみたいです。

さらに、
extern code BYTE   USB_AutoVector;
でエラーが出ました。
SDCCでは"__code"と書くべきらしいので、直前に
#define code __code
が追加されています。

fx2regs.hも、結局
https://raw.github.com/stefanrauch/bel_projects/master/cy7/cyfx2usbuart/fx2regs.h
を取得して使用しました。

xcode at (0xE400) hogehoge;
のようなところは
__xdata __at(0xE400) hogehoge;
と書くと良いようで、
#define at __at
#define xdata __xdata
が追加されています。


fx2sdly.hも
https://raw.github.com/stefanrauch/bel_projects/0d04410aaf9fdf08728649f722dc5bae1083dc65/cy7/softuart/fx2sdly.h
から取得して使用しました。

その他、
intrins.h
の冒頭部分を
#ifndef _nop_
#ifndef SDCC //added 2013-11-17
#define _nop_() { \
  _asm \
    nop \
  _endasm; \
}
#else//added 2013-11-17 bigin
#define _nop_() { \
  __asm \
    nop \
  __endasm; \
}
#endif//added 2013-11-17 end
#endif
としました。


makefileにある"AS = asx8051"なんですが、どうやら名前が変わったようです。
"AS = sdas8051"とすることで動きました。


fw.c の
//-----------------------------------------------------------------------------
// Interrupt Functions For SDCC
//-----------------------------------------------------------------------------
#ifdef SDCC
の下に、
#ifndef interrupt
#define interrupt __interrupt
#endif
を追加しました。

fw.c と periph.cで、
#include "syncdly.h"
をコメントアウトして
#include "fx2sdly.h"
を足しました。


他にもちょこちょこと触った気がしますが
細かくは覚えてなくて(汗)


この段階でのmakeの結果は
export PATH=/usr/bin:/usr/local/bin:$PATH; \
rm -f ./build_by_sdcc/depend.inc; \
for i in fw.c periph.c; do \
sdcc -E -MMM -I../pfenrir_inc -V  $i 1>> tempfile; \
if ! [ $? = 0 ]; then \
rm -f tempfile; \
exit 1; \
fi; \
done; \
#cat tempfile | sed -e 's/^+.*//g' -e 's/[^\.]*\.rel/./build_by_sdcc\/&/g' >> ./build_by_sdcc/depend.inc; \
sed -e 's/^+.*//g' -e 's/[^\.]*\.rel/\.\/build_by_sdcc\/&/g' tempfile > ./build_by_sdcc/depend.inc; \
cat tempfile > ./build_by_sdcc/tempfile.txt; \
rm -f tempfile
export PATH=/usr/bin:/usr/local/bin:$PATH; \
cp USBJmpTb.asm ./build_by_sdcc/; \
cd ./build_by_sdcc; \
sdas8051 -plosgff USBJmpTb.asm
export PATH=/usr/bin:/usr/local/bin:$PATH; \
cp dscr.asm ./build_by_sdcc/; \
cd ./build_by_sdcc; \
sdas8051 -plosgff dscr.asm
export PATH=/usr/bin:/usr/local/bin:$PATH; \
sdcc -V --debug --model-small --xram-loc 0xe000 --xram-size 0x200 --iram-size 0x100 -I../pfenrir_inc -o build_by_sdcc/bulkloop.hex -L ../pfenrir_lib -l ezusb build_by_sdcc/fw.rel build_by_sdcc/periph.rel build_by_sdcc/USBJmpTb.rel build_by_sdcc/dscr.rel
?ASlink-Error-Bad offset in library file ../pfenrir_lib/ezusb.lib(discon)
+ c:\PROGRA~1\SDCC\bin\sdld.exe -nf "build_by_sdcc/bulkloop.lk"
+ c:\PROGRA~1\SDCC\bin\sdld.exe -nf "build_by_sdcc/bulkloop.lk" returned errorcode 1
make: *** [build_by_sdcc/bulkloop.hex] Error 1
なんでしょうねぇ。
exusb.lib が気に入らないんでしょうか。









2013年10月28日月曜日

先週末のfirmware実験 USB (funny keyboard v2b) やっとアナログジョイスティックが動いたよ

さてさて、firmware実験です。

前回、トラックボールモジュールにコりたので、アナログジョイスティックにする、と宣言していたわけですが、
やっと回路を組み直して、実験に成功しました。

まあ、失敗やら二度手間やらは下に書くとして、

今後やることは


  1. スティックを丸く回してるのに、画面上ではマウスカーソルが四角く動くので、その改善。
  2. CapsLock等のインジケータの実装
  3. スクロールマウスへの拡張
  4. Ctrl+C Ctrl+v Ctrl+x の送出を単独のキーで行う


といったところでしょうか。
もちろん、普段使うためにはケースというか、外装をしっかりかっこよくする必要がある、なんて思いますが。

1番のは、当然といえば当然ですが、アナログジョイスティックの棒は、くるくる動かすと、丸く動きます。ゲームコントローラーでも、そうですよね。四角く動いて四隅のカドで引っかかる、なんてことはないわけです。そこがなんとまあ、落とし穴でした。
上下、左右の端までスティックを倒したときは、その出力は最大または最小近くまでになりますねー。
しかし、斜め45度のときは、ルート2の逆数(1/(2)^0.5)にしかならないんですね。


しかし、カーソルの見た目の速度は縦、横それぞれの成分のベクトルの足し算のはずなので、
それぞれがルート2の逆数だとしても足せば1になりそうなもの。

実際には、ななめにカーソルを動かすと、縦だけ、横だけの場合よりもゆっくり動きます。

しかし、くりくりとスティックを回すと四角く動くという…

うーん、単にADコンバータからの出力をカーソルの移動量に変換するときの、300から400までは+2として扱う、という幅の置き方の問題なのかもしれません。



で、失敗談など…

左手側にひっつける、FX2LPから線を引き出すための基板(ハンダ付け、仮組み 先週末の変なキーボード3)をもう一回作りなおしたりして。
ADコンバータのGNDと電源を間違えて変なニオイさせてみたり。

ADコンバータに接続するFX2のピンの入出力設定は、自分で設定していたら動かなくて。
defaultのままでよかったみたい。

左手側にひっつける、FX2LPから線を引き出すための基板(ハンダ付け、仮組み 先週末の変なキーボード3)については、FX2LPのモジュール基板から出ているコネクタではポートごとにピンが並んでなかったりして、配線の確認時に苦労するんですが、それが済んでしまえばどこからどの線が出ていようが全く関係ありません。
なので、前回作成したものは、なんでもいいから引き出しやすいように作ってみた、というものでした。
が、やっぱり、「調子悪いなぁ、外さなきゃわかんないなぁ」ということが結構あったり、何度確認しても不安だったりして、配線引き出し用の基板は、工作のしやすさよりもヒューマンフレンドリーさを重視することにしました。
さらに、前回までは使わない線まで一生懸命引き出していたのですが、今回はパスっと割愛。

後日写真載せますね。
作ってすぐ実験したくて、写真撮るの忘れてました。

ADコンバータMCP3002のデータシートには、4ピンにはVSS (SSは添字で小さい)、8ピンにはVDD/VREF(DDとREFは添字)と書いてあるのですがどっちがGNDか、わかりにくい。なんだか適当に「こっちだろ」と思い込んで接続していたら、電子部品特有のきな臭いニオイがしてきます。
触ったら… 熱い!!! お亡くなりになったかどうか確かめてませんが、とりあえずもうひとつ持っていたので交換して実験継続。

以上

2013年10月9日水曜日

Blenderに入れたら便利そうなaddon

Blenderに入れたら便利そうなaddonを。
まだ入れて使ってないので、感想は後日。

情報元は「Blenderアドオン図鑑 - tomo@web - Google Sites」です
ありがとうございます。

Measure Panel
体積を計算できるらしい。
ゲームエンジンで動かす物の重さを体積を元に決めたりできるかも。

Instructions

Interface/Menu Overview
Once enabled, you can find the menu for this script in the properties panel. "N" key.
Scripts 3D interaction Measure Panel.jpg
This script adds a line between two points, either the cursor & a selected object or two selected objects.
The script returns the value (distance/length) of the line in the script interface & in the 3D view.





API Navigator
スクリプト書くときに重宝するかも
UsageYou can browse through the tree structure of the api. Each child object appears in a list
that tries to be representative of its type. These lists are :
   * Items (for an iterable object)
   * Item Values (for an iterable object wich only support index)
   * Modules
   * Types
   * Properties
   * Structs and Functions
   * Methods and Functions
   * Attributes
   * Inaccessible (some objects may be listed but inaccessible)
The lists can be filtered to help search in the tree. Just enter the text in the filter section. It is also possible to explore other modules. Go to the root and select it from the list of available modules. It will be imported dynamically.

In the text section, some information is displayed. The type of the object, what it returns, and its docstring. We could hope that these docstrings will be as descriptive as possible. This text data block named api_doc_ can be toggled on and off with the Escape key.



時間なくて2つしか見れなかった…

2013年9月25日水曜日

ちょっと電子工作は一休みです…

なんで一休みか、というと、
9月14日にモンハン4が発売になり、3DSに突き刺して使うカードが手に入らなかったので
同日ダウンロードしました。
それからというもの、狩りの毎日です。  といってもこれまでと変わらないんですが。

頭の中にはアナログジョイスティックの配線の仕方がぐるぐる回ってるんですが。
次はフルフルに行くか、リオレイアさんにしておくか…のほうが強くぐるぐるしてる感じです。

体は一つしかないもんなぁ、という秋の夜長です。

では~

2013年9月16日月曜日

松原拓也さんのページの紹介

松原拓也さんのページです




[自作]USBアナログジョイスティック……… 今おいらが作ろうとしているもの

ほかにも、プチロボをいじってたり………… 今作っているものの後で…優先順位2位くらいでやりたいこと
楽しそうです。

ワンダースワンが出てきたり………… 昔、このあまり売れなかった(ごめんなさい、個人的感想です)ハードが好きでした


やってる人は昔からやってるんですんよね~ (あたりまえなんすけど)

……… 今おいらが作ろうとしているもの

2013年9月8日日曜日

もうトラックボールには疲れたので、次からはアナログジョイスティックにします firmware実験 USB (funny keyboard v2b)


 
を、使うことにしましたが、ユニバーサル基板に回路をハンダ付けする気力を失っています。

しかし、なんにもしないでジョイスティックの実験に移るのも、やはり癪な話です。

なので、ブレッドボードで実験しました。

が、動きません。。。。。。
ブレッドボードにICがちゃんと刺さってないのかも。
でも、うちにあるブレッドボードはこれひとつ。もうなんともできない。

で、このトラックボールモジュールとはオサラバすることにします。
理由は、私がうまく扱えないことと、出るパルスの頻度が、どうもPCの広大な面積を行き来するために向いていないと感じることです。


次からは、某ゲーム機のコントローラーに内蔵されているアナログジョイスティックを使って実験します。


AD変換のICを使った実験は以前にやったことがあるので、なんとかなるでしょう。
それより、アナログジョイスティックをしっかり固定する方法と、キーボードをマウスモードするためのキーを、
アナログジョイスティックの操作中にONにしておく必要があるのですが…どうやって…
バネでも使ってみる?



2013年9月7日土曜日

一方向にだけ動かない(笑)firmware実験 USB (funny keyboard v2b)

トラックボールモジュールを使って、一方向にだけ動かない件を前回書きましたが、

  1. 全ての配線を再チェック      →   問題なし
  2. 同型番ロジックICへの取り替え  →   変化なし=動かないまま

ということになりました。

ので、トラックボールモジュールが壊れてるのではないかと思われまする~

ちなみに、動いていないのはトラックボールモジュールの赤い基板に「U」と白い文字でプリントされた方向です。ローラーの回転は目視確認できるのですが。


もう一つあった、
  「あと、斜めに動いてくれない気がする。」
の件ですが…

全く動かないということはありませんが、非常にゆっくりしか動きません。

firmwareの作りとして、
ボールの回転を伝えるパルスがUSBコントローラーの外部割り込みを起こし、
PCから「マウスカーソルの移動量を報告せよ」という指令が来るまでの間に起こった割り込みの回数に応じて割増した数を移動量としてPCに報告する。
ということにしているので、非常にゆっくりしか動かないということは…
左右と上下で2つの外部割り込みを起こしていることが問題を起こしている気がします。

実は「4入力のNOR」を入手済なので、またちょっと「親指モジュール」を作ってみます。
けど、今日はなんだか気力がないな~

これを作ってもスムースに動かなかったら、このデバイスはPC画面でマウスカーソルをグリグリ動かすのには向いていない、と思って見限るのも大事かもしれませんね。

カウンタICでパルスを数えておいて、PCからの報告指示をトリガーにして、ICから数を読み取って…という手も考えたのですが、なんだかカウンタICは難しそうです。
このトラックボールモジュールは上下左右で4つのパルスを出すので4つのICから数を読み取る??? ほぅら、もうワカラナイ~(笑)

トラックボールモジュールと同時入手したー
某ゲーム機コントローラーのジョイスティックに
乗り換えてしまおうかな…
AD変換ICのほうがよっぽど簡単だゎ。

では、また!!


2013年9月3日火曜日

NORゲート使用 先週のfirmware実験 USB (funny keyboard v2b) できたはずなのに問題発生編

ハンダ付け、しました。
できました。

できた、はず。


左方向にだけ、ウンともスンともいいません。

他の3方向へは、動きます。


あ、すみません。
トラックボールモジュールからのパルスをUSBモジュールに取り込むときに、
NORゲートを使おう、という件です。

NORゲート用の親指モジュールを作りました。

なぜか、どんなにボールを回しても、左方向にマウスカーソルが動きません。

上、下、右には、動くんです。

ボールを回してすぐにマウスカーソルが動き出さない(時間差がある)のは気になりますが。

あと、斜めに動いてくれない気がする。

左に動かないことについては、初心にかえって、回路の出来具合を何度でも確かめるしかありませんね。
徹底的に回路を調べて、問題があれば修正する。
もし問題がなければ、NORゲートのICを予備のものに変更してみる。
それでもダメなら、、、トラックボールモジュールをもうひとつ買ってきましょうか。。。


斜めに動かないとすると…
上下方向の動きで外部割り込みを一つ、左右方向の動きで外部割り込みを一つ、それぞれ使っているのですが、
もし、外部割り込みがほぼ同時に起こって片方を取りこぼす、という話であれば
4入力のNORゲートを買ってくる必要があるかもしれません。

なんとも難しいモンです。


2013年8月31日土曜日

active-highかどうか、ちゃんと確認しませう  今日(これから)のfirmware実験 USB (funny keyboard v2b)

なんか、タイトルがいつもと違いますが(笑)。


結論から言うと、トラックボールモジュールからのパルスをUSBモジュールに取り込むときに、
NORゲートを使うことにしました。



トラックボールモジュールからのパルスをUSBモジュール(56ピンFX2LP)に取り込むところで
うまく行ってません。
ORゲートのロジックICを使ってダメで、ANDゲートのロジックICを使ってもダメで。


上図はORゲートロジックICの7432を使った図
7432の出力をUSBコントローラー(FX2LP)の外部割り込みピン(INT0)に接続し、
up と down はUSBコントローラーにも接続してある。

上図の矢印の位置は、実験中は7432の山の左側にあると思っていました。
でも想定通り動作しないので、図にあるように山の右裾で外部割り込みが発生しているようです。

FX2LPには、エッジではなく high または low で外部割り込みが起きるモードもあるのですが、そのモードでの実験結果も外部割り込みが起きるタイミングは上図の矢印の位置であることを示していました。
つまり、FX2LP の INT0  と INT1 の外部割り込みは、active low (high → low)だったわけです。
説明書というか、Cypress社の資料をよく読むと、そう書いてある。あちゃ
そして、active high で外部割り込みを起こすことはできなさそう。


なので、NORを使うことにしました。


これなら、 active low の外部割り込みが欲しいタイミングで起きるはず。


OR(7432)やAND(7408)と違って、NOR(7402)はピンの配置(inputとoutput)が異なっているので、親指モジュールを作り直しです。




新しい親指モジュールができたら、firmwre の external interupt は negative ORからの信号なので active low の edge sensitive で検出可能で、トラックボールモジュールからの信号を直接読み取るピンがhighになっているときにマウスカーソルを動かすようにすればいいでしょう。


今日は、ともかく、ハンダ付けに没頭したい。。。。


2013年8月18日日曜日

今日のfirmware実験 USB (funny keyboard v2b)  ゴールが見えてきたのだろうか、と疑う編(笑)

2013-08-18

ハンダ付けの間違っていたところ、修正しました。

前回お手上げだったキーコードの入れ替わりは、なんだかんだコードを整理しているうちに、勝手に直ってました…
なんだったんだらうか。

トラックボールモジュールからのパルスの検出については、もうちょっと研究します。
元のパルスの出てくる速さとか、どのくらいの長さHをキープしているのか、とか、
さらにORのロジックICの反応の速度とか、も、大事なはずだけど、今は無視してプログラムしちゃってるので。


とりあえずは…
ハンダ付けができていることが確認できたので、グルーガンで配線を保護します。

2013年8月7日水曜日

今日のfirmware実験 USB (funny keyboard v2b) お手上げにわからんぞ編

2013-08-07

今日もちょっとコードを見ていました。

普通のキーをマウスのボタンとして取り扱うところのコードに、昔のコードが混じっていて
早い話が、間違ってたので、修正しました。


モードが2になるとハチャメチャなコードがレポートされる件については、
ほとんどお手上げです。

変数keytableの1つ目の次元がモードで、2つ目の次元がcolumn、3つ目がrowです。

key  designed keycode          -->  output keycode
 g3  0x34 = keytable[2][3][6]  -->  0x31 = keytable[2][4][3]
 c5  0xE7 = keytable[2][5][2]  -->  0x04 = keytable[0][4][5]
 c4  0xE6 = keytable[2][4][2]  -->  0x05 = keytable[0][1][6]
 a3  0xE5 = keytable[2][3][0]  -->  0x21 = keytable[1][4][5]

かならずモード「0」になるわけじゃなくて、「2」のままのもあるし、「1」になってるのもあるし。


きっと見る人はいないでしょうけど…置いておきます。。。

変数keytableの設計に使っている、スプレッドシート

2013年8月5日月曜日

今日のfirmware実験 USB (funny keyboard v2b) なんだかおかしいひとりごと編

2013-08-05

モード変更周りのコードを再確認しました。

ColumnとRowの使い方がごちゃごちゃになってました。
ColumnもRowも、自分で決めた設定なのですが、ピンのHigh、Lowの設定を行うのがどちらで、キーの押し下げ具合の結果として読み取るのがどちらなのか、混乱してました。
電子回路の本当の意味を理解せずに見よう見真似でやってたからですね。

「R」のキーを押すと、モードが「1」になってしまっていたのは、このせいでした。
モードを調べるところでだけ、ColumnとRowを逆にしていたので、「R」のキーがモード変更用のキーとして働いてしまっていたのでした。

この修正により、「R」キーがレポートされるようになりました。

モード「0」では、全キーが正しく作動中。


モード「1」(右手親指のモードシフトキー)は正しく動いている模様。
しかし、モード「2」になるはずの左手親指のモードシフトキーを押すと、まったく意図しないキーコードがレポートされてしまっている。
右手「Windows」キーでなぜか「a」が 出る。
右手「Alt」キーでなぜか「b」が 出る。
右手「Shift」キーでなぜか「4」が 出る。
右手「Jキーでなぜか「5」が 出る。
右手「:」キーでなぜか「]」が 出る。
なんか、ずれてる?

うわーーーーーーーーーーーーーーーー!!!!
明日やることが増えました。
どんなふうにずれているのか。
そしてそれはなぜなのか。

2013年8月4日日曜日

今日のfirmware実験 USB (funny keyboard v2b) 後半 問題点の整理

今日後半の実験は~

やることリスト:

来週中にすること:
モード変更周りのコードを再確認すること。
レポートの1バイト目を作るところのコードを再確認すること。

来週末にすること:
左手モジュールの親指のキーの半田付けやり直し。一番上のキースイッチはなんだか働きが悪いので取替えること。

これらの次にやること:
1:ホスト(PC)からCapsLock等の情報を得るコードを見直す。
2:ロジックICの選択。


今日わかったこと:

よかった点1:
トラックボールの押し込みによるマウスのメインボタン(左クリック)が生きている。

よかった点2:
同時に問題点6でもあるのだが、トラックボールモジュールのLEDが光っている。
青と白。

よかった点3:
右手モジュールも働いている。

よかった点4:
floatを使わないハードコーディングが成功した。



問題1:
どうやら、左手モジュールの親指で使うキーの配線を間違えている。
位置を逆にしてしまった。 1、2、3、4 と並べるべきところを、3、4、1、2と並べたような感じ。

問題2:
「R」 のキーが押されたことを報告しなければならないのに、「F2」(ファンクション2)が報告される…

問題3:
「Windows」キーが報告されず、「Ctrl」キーが変わりに出てくる。これは左右共通。

問題4:
モード変更が起こらない。

問題5:
トラックボールが、なぜか上下は動くが、左右に動かない。
かってに動き続ける。
動きが前半で予想したような滑らかさではなく、瞬間移動になっている。

問題6:
トラックボールモジュールのLEDが光っていることを確認できたが、
写真のように半透明のボールを通して光が出てこない。なにかに遮られているのだろうか。
また、LEDの点灯が制御されていない(偶然点くか?)ような…


問題1への対応:
仮組みをばらして配線を変更。半田鏝。
だがしかし、今日はもう、なぜか眠くて集中力がないので、半田鏝作業は危険で、面倒くさいし、また来週!

問題2への対応:
「R」キーはモード”0”のときに報告される。同じキーがモード”1”なら「F2」を報告する。
つまり、「R」のキーは同時にモード”1”に入らせるような結線になっているかもしれない。
回路をテスターで見た限りは混線も短絡もないようなので、プログラムのモード判定部分が壊れている可能性もある。
まずはプログラムをじっくり見直す。

問題3への対応:
「Windows」キーは、モード変更の次に特殊な「Shift」「Ctrl」「Alt」と共に、キーボードレポートの1バイト目に入れるべく読み取りしなければならないキーのひとつである。
回路をテスターで見た感じでは問題なさそうなので、プログラムをじっくり見直す。

問題4への対応:
問題2への対応と同じく、まずはプログラムをじっくり見直す。

問題5への対応:
これはよくわからない。
前から動きが変だし。なんか、動くときと動かないときがあるし、勝手に進み続けたりするし。
ロジックICはTC74AC32Pを使ったのだが、ORではなくて違うやつなのかな。
この対応は、後回し。

問題6への対応:
遮られているかも、というのは、来週明るいところでよく見てみる。今はもう暗くなってきたし、疲れたから、やめ!
ホスト(PC)からCapsLock等の情報を得るコードが変なのかもしれない。
これも後回し!


以上


floatが使えないので計算結果を整数化して配列に入れて使う 今日のfirmware実験 USB (funny keyboard v2b) 前半

トラックボールモジュールが回転のパルスを出したら発生する外部割り込み関数内で、

Xp += 1;  のように
普通に考えれば、トラックボールモジュールが回転のパルスを出したらその回数を素直にホスト(PC)へのマウスカーソルの移動量として報告(Xp)するのだと思うのですが、

どうにも移動がゆっくりすぎて、とてもじゃないけど広い画面では実用に耐えそうにありません。

そこで、

Xp = (NCfm*(pow((xcip*1.0),2.0)+(xcip))+0.5);
ホスト(PC)から、マウスカーソルの移動量の報告依頼があるまでの間に、トラックボールモジュールが回転のパルスを何回出したか(xcip)によって指数関数的に、ホスト(PC)への報告量(Xp)を決める、ということを考えたのですが(NCfmは定数)、
Keil uVision2 試供版では、なんとfloatが使えない=pow()も使えないということが、昨日判明しました。

やりたいことは、マウスカーソルの移動量を増やしてやること。
永遠に増やし続けるなんてことはありません。
ホスト(PC)からのマウスカーソルの移動量の報告依頼の時間間隔内に、トラックボールモジュールが回転のパルスを何回出すことができるのかは、分かりません。

とりあえず、今回は実験のために、上の式のxcipが1から24までの24個の計算を外部で行い(表計算ソフトで簡単にできます)、結果を配列にハードコーディングしてしまいましょう。

#define MAXxyi 24 
char RC[MAXxyi] = {1,2,3,5,7,9,12,16,20,24,28,34,39,45,51,58,65,73,81,89,98,108,117,127};

if (xcip <= 23){
     Xp = RC[xcip];
} else {
     Xp = 127;
}
xcip += 1;

ただし、この方式では、どこかのタイミングで増やしたホストへの報告用の移動量を初期化(ゼロに戻す)する必要があり、今はホストが値を読み取ったら初期化しようと考えています。
しかし、考えられるのは、マウスカーソルの移動スピードがガクン、ガクン、と落ちて一定せずに、きっと気持ち悪いんだろうな、ということ。


上向きの短い矢印のところでホストへの報告が出る、と、移動量が初期化されるので、マウスカーソルが移動するスピード(グラフの傾き)が、ガクンガクンするだろう。。。。

2013年8月3日土曜日

KEILコンパイラ評価版はfloatが使えません *** FATAL ERROR L210: I/O ERROR ON INPUT FILE:

*** FATAL ERROR L210: I/O ERROR ON INPUT FILE:
    EXCEPTION 0021H: PATH OR FILE NOT FOUND
    FILE: C:\KEIL\C51\LIB\C51FPS.LIB



こんなんでましたけど~ (懐かしすぎる)

Fatal Error L210↑ ここによると、


C:\KEIL\C51\LIB\C51FPS.LIB がありません。
だってさ。

探したけど。
確かに無いわ。

で、

µVISION: MEASURE EXAMPLE PROBLEMS IN EVALUATION SOFTWARE↑ ここによると、


ANSWER
The C51 Evaluation Software is limited to 2K and does not support floating-point. The error you receive indicates that C51FPS.LIB cannot be found. This file is the library for floating-point math for small model programs and it is only included with the licensed software.
なんと。 その機能はお金払ってないから使えません。ですと。
ただ、べき乗が使いたかっただけなんですけど、float が使えない。。。。。


展開するか。。。?
しかし、floatが使えないとなると、割り算もできない。
恐るべし、評価版!


2013年8月2日金曜日

error C249: 'DATA': SEGMENT TOO LARGE, *** ERROR L107: ADDRESS SPACE OVERFLOW

リンカやコンパイラが知らせてくれるエラーコードは、素人にはわかりにくいものです。
しかし、コンパイラなどのツール名と一緒にエラーコードをググれば、いろんな情報を得ることができます。

今日はちょっとした、自分用のメモ(いつも、いつでも自分用ですが)。

ご自身でファームウェアを書いていらっしゃる方は、こんな記事を読まなくても検索するなどしてエラーコードの意味を調べていらっしゃると思いますが、日曜大工ならぬ日曜プログラマの方は、エラーコードの意味を調べてみるといいと思います。

さてさて

CypressのUSBコントローラー、FX2をKeilのuV2でコンパイル。
評価版なので4Kbyteまでのファームウエアしか作れないのです。

で、その制限を超えたらどんな表示が出るのかなー と思って、ちょっとやってみました


output windowに
error C249: 'DATA': SEGMENT TOO LARGE
が出たら、そのソースファイルがでっかすぎる、ということのようです。

ちなみに、上のerror C249は、
#define MAXxyi 64  // iteration times
signed char Xi[MAXxyi];
signed char Yi[MAXxyi];
と書いた時に出たもので、


これを
#define MAXxyi 30  // iteration times
signed char Xi[MAXxyi];
signed char Yi[MAXxyi];

リンカがエラーを出すこともあるようで
*** ERROR L107: ADDRESS SPACE OVERFLOW
となると、個々のソースファイルではもんだいなくても、なんか大きすぎるみたいですね。

このとき、L107といっしょに
*** ERROR L118: REFERENCE MADE TO ERRONEOUS EXTERNAL
*** ERROR L105: PUBLIC REFERS TO IGNORED SEGMENT
も出ていました。

さらに
Program Size: data=139.5 xdata=4473 code=3362
Target not created
ということで停止。


で、
#define MAXxyi 24  // iteration times
signed char Xi[MAXxyi];
signed char Yi[MAXxyi];
とすると、

Program Size: data=127.5 xdata=4473 code=3362
と変わらないのに…
Total Code Bytes = 3362
Conversion completed successfully.
"funny-kbd_v2b" - 0 Error(s), 0 Warning(s).
ということで成功裏に終了。

2013年7月31日水曜日

ハンダ付け、仮組み 先週末の変なキーボード3

さてさて、もう水曜日になってしまいましたが、先週末の変なキーボード 第3弾です

前回、USBコントローラーからの配線用の基板を作り替えたいというところで終わったと思います。

次の週末には、基盤に対して平行方向に線が出るようにデザインしたUSB 本体モジュールへの結線用基盤を作成することになるでしょう。。。


もう作って仮組みしちゃったあとなんですが、基板と水平方向に線が出るようにコネクタがついています。
この写真では見えないのですが、裏側にも同様にコネクタが出ています。

真横からの写真です:
ちょっと見にくいですが、上の写真の拡大で、赤い矢印を2つつけました。
L字型に見えるのが、コネクタを刺すピンです。


左手用モジュールとUSBモジュールをつなぐ線を作ってなかったことに気づいたので、急遽作成

仮組みしました。
右手用モジュールは、保護のため袋に入っています。



箱に入れれば… 会社で昼休みにデバッグできますかねぇ




2013年7月24日水曜日

新しいバージョンのBlenderに対して行ったこと

Blender 2.68をダウンロードしました。

新しいバージョンのBlenderを入手したらやること、ということで、
個人的メモメモ


pythonからのエラーとかを見るためにコンソール付きで起動したいので…
A:  blender.appのパッケージ内容→Contents/MacOS/blender のエイリアスを作った(参照)。


以前(2.66)のときに、pythonにいくつかツールを導入していたことを思い出し…
B:  旧Blender.appのパッケージ内容→Contents/MacOS/2.66/python/lib/python3.3にコピーしていた次のフォルダとファイル
フォルダ:
  • numpy
  • numpy-1.7.1-py3.3.egg-info
  • pillow-2.0.0-py3.3.egg-info
  • PIL
ファイル:
  • _imagingmath.so
  • _imagingtk.so
  • _imaging.so
  • _imagingft.so
↑を、新Blender.appのパッケージ内容→Contents/MacOS/2.68/python/lib/python3.3にペーストした。

2.68導入直後に動かなかった、上記ツールを使った自分のpythonスクリプトが、これで動くようになりました。



Mac版blenderで簡単にコンソールを表示する方法 | 積み木Blog

Macblenderで簡単にコンソールを表示する方法 | 積み木Blog


すごいすごい!
全然知らなかった。

まずはFinderでblender.appを表示します
次に、blender.appを右クリックしてパッケージの内容を表示
Contentsフォルダの中にあるMacOSフォルダの中のblenderをダブルクリック

ありがとう、積み木Blogさん!

2013年7月22日月曜日

ハンダ付け、コネクタを作る 先週末の変なキーボード2

さてさて、先週末も、なんでやねんという忙しさでしたが、なんとか2時間ちょっと作業時間を確保できたので、左右のモジュールをつなぐ線の制作(?)を行いました。

一緒に定規でも写せば良かったですねー
導線が見えますが、この太さが2mmありません。
中央ちょっと上に写っている、いっぱい銀色の足が生えたのがありますが、この足の間隔が2.5mmです。細かいですねぇ。ビーズ細工でも作っているみたいです。
上の写真は端子にハンダ付けしている最中です。
散らばっているちっちゃいのをひとつひとつ線の先っちょにハンダ付けします。
全部ついたら、右の方に写っているやつに端子を差し込みます。
小さな部屋が12個あるのがお分かりになるでしょうか。

差し込み終わりました。
この線はより線(細い銅線が集まっている)ですが、やはりハンダ付けした部分は単線のようなものなので、振動や曲げに弱いものです。
今回のように手に持って使うことを前提としたものではこのままでは心もとないので、付け根部分をグルーガンで補強します。
補強した写真は、、、、割愛!


さてさて、これで工作は終了~と思いきや、USB 本体モジュールへの結線用基盤で、基盤から直立して線が出ているので、組み上げた時に手のひらに当たります。
これがじゃまになりそうなことはわかっていたのですが、やはり問題、というか、気に入りません。
ので、次の週末には、基盤に対して平行方向に線が出るようにデザインしたUSB 本体モジュールへの結線用基盤を作成することになるでしょう。。。


2013年7月18日木曜日

ハンダ付け、各モジュールの写真 先週末の変なキーボード

数年ぶりに復活して実験中の変なキーボード、ですが…
ようやく左右の各モジュールの配線が終わりました。

左手用モジュール
ベースモジュール:
表(?) 人差し指から小指用
裏(?) 親指用

親指モジュール:
表(?) トラックボールです
裏(?) スッキリ(?)してますね


USB 本体モジュールへの結線用基盤:
表(?) 各モジュールへの配線側
裏(?) USBモジュール側
USBモジュールの本体:
コチラ側に、上のUSB 本体モジュールへの結線用基盤の裏側が刺さります。



右手用モジュール:
表(?) 人差し指から小指用
裏(?) 親指用


左右のベースモジュールを繋ぐのは、約1メートルの長い導線(12本)なんですが、これをソケットに繋ぐ(写真の白くて基盤からちょっとはみ出してる横長のやつ)ために、合計24個のちっちゃな部品にハンダ付けしなくちゃならなくて、これがハンダが流れ過ぎてピンが入らなくなるという…
面倒です(笑)

そいつを作って全部のモジュールを繋げたら、実験実験。

確実に通電していてショートしていないことが確認できたら、線の繋ぎ目だけでもグルーガンで止めていきます。基板上の線は単芯で非常に細いので折れやすいためです。

前回、数年前に作った時に比べて、キーの数が8個増えていますので、その分ちょっとだけややこしい回路=配線になっています。
また、前回はキーには導線を直接つないでいた(基板上に配置していない)ので、非常にシステマティックに基板上の配線を行うことができた(キーの配置に関係なく回路の配置を自由にできた)のですが、今回はキーの配置と基板上の配線がイコールなので必ずしもシステマティックとはいかず、少なくとも私にとっては、これもややこしさの元でした。

ユニバーサル基板上への配線については、前回よりはキレイに出来たと思います。
前回はエナメル皮膜のついた銅線がペンのようなケースに入っていて…というやつで配線していて、こすれるとショートしてしまうので、絶縁する作業が結構面倒で、また見た目が悪くなる(誰も気にしてないのに)原因の一つでした。あのエナメル線を部品の足にくるくる巻きつけるためと、後の配線のときにじゃまにならないように線の長さに余裕をもたせていたのもショートを誘発していたかもしれません。
今回は耐熱性の被覆を持った導線を使ったのでそのへんはよさそうです。
また、無理に部品の足に巻きつけずに、足と一緒に穴に差し込んじゃう戦略で楽ができました。そのために非常に細くて単芯の線を使ったので、折れやすくなっています。
最終的にはケースを作って入れようと思っているので全体をグルーガンで固める必要はないと思いますが、基盤との接合部は固めておきたいですね。
耐熱性の被膜がついた線、すごいですね。ハンダが溶けてるのに、この被膜は溶けないんですよ。

ここまで読んでくださる奇特な方がいらっしゃるかどうか…
ありがとうございます。
では、また、お会いしましょう。

蛇足で、クイズです。
最初に作ったのは、どのモジュールでしょうか?
また、最後に作ったのは、どのモジュールでしょうか?

2013年7月11日木曜日

USBの情報源のメモ

http://www.itf.co.jp/tech/road-to-usb-master/hid_class

インターフェイス株式会社というそうです。

情報源が増えるのはいいことです。

おれのような素人は例示されているコードを実験してみて使えそうなところを使わせてもらうので
例が増えるのも、大歓迎です


2013年6月15日土曜日

今日のfirmware実験 USB (funny keyboard v2b)



今日は…


やっぱりマウスカーソルは右上に行ってしまう。

firmwareのマウスカーソル移動判定部分で、読み取るピンが間違ってたかもと思って修正してみたが、効果なし…


firmwareのキーボード部分では、結線していないピンへの出力や読み取りを避けるように修正してみた。

前みたいに「a3のキーを押したら、Ctrl+Alt+Shift+の状態になったまま」ということはなかったけど、何もレポートされない…

PCにもともとつながってるキーボードのCapsLockを押してLEDを点灯させてみたけど、実験機のLEDは光らない…


2013年6月9日日曜日

今日のfirmware実験 USB (funny keyboard v2b)

えー、firmwareの本体を載せもせずにこんなこと書いても、なんの情報にもらなないことはわかっているのですが


マウスを触っていないのに、画面右上に移動してしまいます。
常に右上に行くようにレポートしているようです。
PCから引っこ抜くと、マウスの動きは止まります。

キーは、a3のキーを押したら、Ctrl+Alt+Shift+の状態になりまして…
PCから引っこ抜いても、その影響が消えません。
なんか、レポートでご法度を犯しているのでしょう。


blackberryのtrackballは、LEDにvcc(3v)をつないだら点灯したので、つないだピンを1にしたら光るでしょう。

長かったですが、
あたしゃ生きてます、というお話でした (なんのこっちゃら)

2013年4月4日木曜日

グローバル・ローカル名前空間ーーー文字列としての変数名を使って変数を使うーー(なんのこっちゃ)

三次元日誌 さん家に、探してた方法が載っていました。三次元日誌さん、ありがとうございます。

ある変数に、ある値を保存したい。だけど、その変数名を、文字列としてモジュールに渡したい、なんてことが、Blenderを使っていて、起こりました。
Game Property にその変数名を入力しておきます。
Logic Editor で、適当にpythonのModuleを呼び出して使うと、オブジェクトごとに違う変数名を使うことが出来るはず。


なくなっちゃうと困るので、以下、魚拓です:


http://d.hatena.ne.jp/ousttrue/20071115/1195157915

[]メモ:変数名の入った文字列から変数の実体にアクセスするAdd Star

わりとどの言語でもこの手の情報は調べにくいのだが、やっぱりだいぶ手間取った。
__main__とかパッケージ、importの辺りが関連していると思ったんだけど微妙にはずしていてなかなか見つからず。

グローバル名前空間

globals()["HOGE"]

ローカル名前空間

locals()["HOGE"] # 変更禁止らしい。

モジュール名前空間

getattr(Module.Submodule, "HOGE")



2013年2月13日水曜日

岩波講座ロボット学 6 ロボットフロンティア


岩波講座ロボット学 6 ロボットフロンティア



この本は、ナノマシンの話であったり、医療用ロボットだったり、人工知能やヒトの機能・知能を興味の中心にしている私のような者にとっては多少退屈。

しかし、2章の「脳科学とロボティクス」は単に脳を手本としたロボット学や人工知能研究への導入文として読んでも面白そうだ。
脳科学とロボティクスが共発達していくことも書かれている。
また、David Marrの「ビジョン」、伊藤正男の「脳のメカニズム」が紹介されている。

5章では「認知力学系とロボティクス」と題して、記号接地問題は、そもそも存在しない、という立場を紹介している。

6章の「デジタルヒューマン」も結構面白い。
元々は自動車の衝突実験で使われるダミー人形をコンピュータシミュレーション上で用いるためのもののようだが、人間のサイズ、構造、硬さ柔らかさ、動きなどの蓄積された情報はヒューマノイドロボットを作る際に大いに参考にされるべきものだと思える。

意外に、ヒューマノイドロボットの開発者が人間の行動、体の特徴を研究していないということがわかる。
これだけ二足歩行のヒューマノイドロボットが開発されている日本なのに、SHIN-WALKのような、言われてみれば当たり前のようなことが天才高橋智隆さんの登場までわからなかったという…
HRP-4Cの歩行はかなり良くなっているが、モデルウォークにはあと一歩及ばない。
ロボットの動きがメカメカしいのは、モーションの作成が面倒くさいというのもあると思うけど(モーション作成者のセンスの問題?)、使っている動力の違いによるものが大きいと思います。脱力するだけでぶらぶら受動的に動く筋肉は、同時に、電気モーターに比べればかなりの瞬発力を発揮します。電気モーターでは颯爽とした動きが難しいのはこの点に問題があると思うのです。また、能動的に制御しなければ筋肉のあの受動的な「ぶらぶら」感は表現できません。高橋智隆さんにモーションの生成プログラムの作成指揮をとってもらえば、「ぶらぶら」感を自動的に再現できるモーションエディタができるかもしれませんね。 

以下、記号接地問題について、わかってない奴が寝言を言ってます。
自分が、記号や抽象的な概念を、どうやって「納得」しているか、というような問題だと、大雑把には理解している。
認知力学というものがまた雲をつかむような概念なような気もするが…
というか、あんまり理解できてません。
自分が初めて目にする図表があるとして、その数値やグラフの意味を理解するためには、頭の中でその図表のタイトルや情報の出てきた背景・分野などの既知の情報との接点を探していると思う。
そんな難しいことでなくて、「自分に向かうある方向(例えばベクトルx)を持ち、ある距離dからある速度vで飛んでくるボールがあるとき、状況に応じてこれを避けるのか、つかむのか、蹴飛ばすのかを選択し、体を適切に運動させ、選択した行動を達成する」というようなときを例にすると…
この時に、ただ記号的にベクトルの軸の定義やベクトルの各要素の値、速度とその単位、自分までの距離などを文字として見せられたり、コトバで聞かされたりしても、すぐには動けないと思う。でも、自分の目で直接そのボールを見れば、そんな記号や数字を知らされる必要はなく、ほぼ自動的に体は動く。
記号で与えられたときは、自分の内部情報や内部座標系を用いて理解できるように翻訳しなければ体は動かせない、この翻訳が記号と認識を繋ぐための操作だと思う。
それに対してはじめから自分の内部情報や内部座標系を用いて認識されたボールに対する対応は素早い。翻訳の必要がないということは、記号接地問題が存在しないということだと思う。
ということで… さっぱりわからんな。
翻訳の必要がないと言うよりは記号を用いていないような気がする…





2013年2月8日金曜日

GS02のクレードルも作っていた!

さきほど、iPod touch 5th のクレードルを投稿したばかりですが
かなり前に作っていて、投稿していなかったことに気づいたので、いまさらですがGS02のクレードルをお目にかけましょう(誰か見てんのか? よーう、元気?)。



材料はやはりLaQ
Lightningケーブルはしっかりしているので、コネクタ部分だけ隠れてればOKでしたが、Ariaの時といい、今回といい、Micro USB はちょっとぐらつく感じなので、位置合わせが面倒。ということで、Ariaのときと同様に、スマホの左右と背面をしっかり導くための構造となっています。
中身は、Ariaのときに作った向きを変えるための組み合わせ↓


正面 ちなみに後ろの円筒の中はワンピースのナミさん

右から。全体が傾いているのがわかります。

斜め後ろから

正面ななめ上から、&ナミさんの御御足

隙間がグルーガンでタプタプに埋まってます



LaQの面白いところは、サイズを合わせることができる、ということ。

上のGS02にはシリコン製のカバーをつけているのですが、カバー込みでジャストフィットするように作りました。
左右と背面をしっかりホールドしているので、下に隙間があってもぐらつきません。
おかげで、ストラップがたっぷりついていても大丈夫。
背面をピタッと納めて滑らせれば装着完了です。

カバーを替えることがあれば… クレードルも作り直しですな。









iPod touch 5th の充電台を作ってみた

iPod touch 5th には、言わずと知れた「Lightning」コネクタが使われていますが、
このコネクタで使用出来るクレードルがあまりない。
いや、複数選べてたとしてもきっと気に入らない。変わり者だから。

ということで、以前にも

HTC aria (S31HT) のクレードルを自作してみたりしたように、

iPod touch 5th用のクレードルを作ってみた。

以前と同様、使うのはLaQです。

正面

画面左が正面です
 ↑の写真の左から2つ目、下から3つめの四角のところに、Lightningコネクタがあります。一番高い所の天板に指を置いて、抜き差しするときに力を入れやすくします。

画面右前が正面

斜め後ろから

背面

載せてみました

良い感じ。

ちなみに、Micro USB→Lightning変換器を使ってます。
ケーブルは、長さを変えたくなったりするので買い替えが予想されます。
高額なLightningケーブルを直接ひっつけてしまうと、替えたくなった時に被害甚大。
ということで変換機の出番です。

実は変換機の脇にちっちゃく穴を開けてビスを通すという荒業でしっかり固定。
隙間は得意のグルーガンで埋める!


あ、ケータイをGS02に買い替えたので、そっちのクレードルも新しくしてたんだ…
あとで投稿しよう。→したよ!