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

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等の情報を得るコードが変なのかもしれない。
これも後回し!


以上


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).
ということで成功裏に終了。

2009年5月24日日曜日

C:\KEIL\C51\LIB\C51FPS.LIB

KeilのCコンパイラを使っています。評価版です。

RAMSIZE(256)
CODE( 0x80-0x0FFF )
*** FATAL ERROR L210: I/O ERROR ON INPUT FILE:
    EXCEPTION 0021H: PATH OR FILE NOT FOUND
    FILE: C;\KEIL\C51\LIB\C51FPS.LIB
Target not created

↑こんなメッセージが出ました…


によると
このメッセージは、評価版を使ってるって意味だそうで
つまり4kを越えたって事かな

日本語で「keil c51fps.lib」をググッたけど中国語とロシア語しかヒットしなかったので
日本語で書いておこうかな、と。


いえいえ、俺はロシア語が読めるわけじゃないんですよ。
グーグルさんがむずかしい機械翻訳をしてくれるので、類推しただけです。。。