ラベル USB の投稿を表示しています。 すべての投稿を表示
ラベル USB の投稿を表示しています。 すべての投稿を表示

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年9月16日月曜日

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

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




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

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

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


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

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

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年7月31日水曜日

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

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

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

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


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

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


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

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



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




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

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

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

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


2008年3月18日火曜日

とりあえずの「変なキーボード」 というページ

around@taichi - around@taichi

例の自作したキーボードについて、
ここに載せた写真数点(まだ全部作業していないだけですが)などを

いつものページ、というほど頻繁に載せていませんが
このページとりあえずの「変なキーボード」 というページを追加しました。

ファームウェアソースも見れるので
みなさまごひいきに~

2008年3月17日月曜日

変なキーボード5

今回は写真なしです…

小さな箱(タッパーなんですが)に入れていた基盤は
はじめは細いリード線で配線したまま箱につっこんでいたのですが
あとから一本一本丁寧にテープで留めて絶縁しました。

思わぬ接触があったようで、予期せぬ動作は
この絶縁作業でなくなりました。


また、スイッチもハンダゴテのあてすぎで
内部が溶けちゃって、常時通電状態というものが2つありましたので
取り替えました。
(中が溶けてたのは分解して確認しました…)

チャタリング対策をハードウェア的にとっていないので
ファームウェアでウェイトをかけて吸収するようにしているのですが
スイッチの重さと指の力のかねあいか、なんだかわからないですが
2回押したつもりが3回入力されたりすることがあって
(薬指で操作するスイッチで頻発)、もしかしたらそのスイッチを取り替えると
うまく行くのかもしれません。


このへんなキーボードをEM・ONEにつないでみたところ、
当然のようですがキーボードとして使うことができました。

あとはブート時にBIOSが認識してくれるかどうかを実験する必要があります。


この後する事は
 チャタリング対策のためのウェイト時間の最適化
 キャップスロック等のLEDの実装
 マウス機能の実装
 ファームウェアの公開
 キーマトリックスの公開

といったところでしょうか。

ファームウェアとキーマトリックスはとりあえず現在のものを公開すべく
準備中です。

変なキーボード4

今日の1つ目は、醜いのですが
スイッチの下側の配線のごちゃごちゃ具合です。


2つ目は、右のモジュールの側面です。
スイッチを支えているアクリル版が半透明なので、配線が透けて見えています。


3つ目は右のモジュールの親指部分です。
こちらにはマイクロスイッチの針金が1本だけついています。


4つ目は、右のモジュールの奥側 人差し指から小指までで操作するスイッチです。

2008年3月13日木曜日

変なキーボード3

↓これは左のモジュールのキーマトリクスの基盤です。
逆流防止のダイオードと、上のほうにプルアップ抵抗が写っています。


↓これは左モジュールのキーの奥側です。
モードを切り替えながら使うキーボードなので、キートップへの文字の表示は
意味がないというか文字が小さくなりすぎるので やめました。
↓これは左手の親指用のキーです。
白いキーが前後に2つあり、さらに左右に針金がのびているのが
この写真なら見えるのではないでしょうか。
この針金2本と右手の親指でも1本あつかうので
合計3本の針金(マイクロスイッチ)でモードを切り替えます。

変なキーボード2

↓一枚目は、左のモジュールを上から撮影したものです。
見ての通り、キーがかなり少ないです。
左から、小指で4つ、薬指と中指で2つずつ、
人差し指で4つ、親指で2つです。
この写真では見えないのですが、親指にはあと2つ、マイクロスイッチから延びた針金があり、
これでモードを切り替えながら打鍵します。



↓2枚目は、USBケーブルが出ている方の箱のふたを開けたところ。
オプティマイズさんのFX2はピンが順番通りに出ていないのと
同じピンに複数のスイッチなどをつなぐことがあるので、ピンの整列と
各ピン毎に2つずつコネクタをつけられるように
ユニバーサル基盤を一つ挟んでから左右のモジュールに配線しています。
これから先、まだまだ機能を追加していくので
その際の接続もここに行います。



↓3枚目は、上の写真の箱の裏側です。
オプティマイズさんのFX2がうっすらとみえる…はず…
ピンク色の線は、ファームウェアを書き換えるときに一旦はずすジャンパピンに
スイッチをつないで箱の上から操作するためのものです。
そのスイッチを押しながらUSBケーブルをPCに接続するとファームウェアを書き換えることができるようになります。

2008年3月12日水曜日

変なキーボード1





1枚目は、全景です。
左右の黒いのが、今回作ったキーボードです。

2枚目は左の、
3枚目は右のモジュールです。

2007年9月10日月曜日

string descriptorは偶数アドレスから始めること

今回の注意点!
  • string descriptorは偶数アドレスから始めること
  • endpointへの書き込み(ホストへの報告)のバイト数はdescriptorどおりであること


シバ某様、ありがとうございます。

お時間を頂戴して、私の汚いコードをごらん頂き、
かつ、オプティマイズさんの掲示板(No.169)に丁寧な解説も付けてくださいました。

で、修正してみました。
ご指摘いただいたように、ファームの書き込み後に、1回目の接続ではマウス部分がエラーになり、
2回目の接続でマウスとして認識されます。

string descriptorは報告されたようです。


2回目でないと認識してくれない理由は、、、、

なんでしょうねぇ。
ホストが聞いてくる順番で答えてない、と言うことなのでしょうか。
なんかのアドレス指定が入れ替わってたりして。。。

詳しくはこちらのページに書きました。

がんばるっす!
またこちらにファイルを載せておこうと思います。
こちらのページからごらんになって、みなさまのお知恵を頂戴できれば幸せです。


当ブログ内Link

2007年9月7日金曜日

びっくりしたなぁ

昔作って、放置してある俺のとあるページが、「谷岡のページ」というところからリンクされているのを発見しました。

このページ、現在はこのページに統合しようとしていて、今は暫定的にこのブログこの投稿に保存してあります。

このページ親ページは「超漢字やBTRON」に関するもので、もう10年くらい前に書き始めたものかも…
いちおう、Googleで睡眠をとりたい俺はこんなページに移植中…遅々として進まないんですが。

ようやく振り出しに戻るUSB

いまだに製作中のEX-USB FX2LP での firmwareですが…
ようやく、振り出しに戻りました。

製作中のものは キーボードとトラックボールの2つのインターフェースを持つ複合デバイスなのですが
窓(複数形)につなげると
1つめのデバイスであるキーボードは認識され、
2つめのデバイスであるトラックボールは認識されません-というか、「HIDの何か」であることは認識してくれますが、ドライバを選んでくれません。

また、string descriptorをちゃんと返してないようで、窓(複数形)のデバイスマネージャのプロパティで文字列を確認できません。

これからファイルをブログでないページのほうに載せようと思います。
こちらのページから、みなさまのお知恵を頂戴できれば幸せです。

2007年4月9日月曜日

PSP用のUSB通信と電源をUSBから取るケーブル

そうそう、書いておきましょう。

PSP用の、USB通信と電源をUSBから取るケーブルを
使ってます。

これ、EM・ONEにも使えるんです。

電源のコネクタはちょっと寸足らずな感じで
抜けやすそうですが、使えてます。

PSPのためにすでにご利用の方は
新しく買う必要ないですよ~

2007年3月23日金曜日

warning 126: unreachable code

USBのファームウェア、書いてSDCCでコンパイルしています…
Fenrirさんのコードでは何のエラーもなくmakeできているように見えますが

俺が俺のコードをコンパイルすると こんなん出ます~(make.log
fw.c:277: warning 126: unreachable code

?ASlink-Warning-Undefined Global '__nop_' referenced by module 'funnykbd'
make: *** [funnykbd.ihx] Error 1

どなたか、なにかご存知でしょうか????

Malefile
funnykbd.c
dscr.asm

Fenrirさんのものに手を加えたつもりがないもの:
fw.c
USBJmpTb.asm