^ page top

2017-11-06

 Arduino で USB変換して、Windows上で連射速度のチェックをする。33.1連射/秒、計算ソフトの理論値は、32.1 なので大体あっている。

参考リンク
 USB Gamepad Using Wii Classic Controller and Arduino Leonardo USB変換
 Shwatch++ 連射測定ソフト
2017-08-30

 ファミコンもどき、スーファミもどきの両ゲームパッドの調子が悪いので、wii 用のぱちもんコントローラを、USB 化した。ノートPCと短いケーブルで使いたかったので、Arduino は、中に埋め込んだ。

 そのものズバリのサンプルがあったので、作業は簡単。市販のコントローラと違って割り当てを自由にプログラムできるのが最大の利点。

 アナログスティックがついているので、スーファミのぱちもんの倍ぐらいの値段(700円くらい)なのも妥当か。プラスチックの支えがあるので、意外とまともに使える気がする。純正のコントローラは、もう買えないみたいだし、最近のゲーム機のコントローラは、無線化していて高いし、微妙なんだよね。



 元のプログラムは、スタンダードな配列と、XBOX的な配列とを、HOMEボタンで、切り替えられるようになっている。Pro Micro 自体には、13番ポートのLED は付いていないので、別途、追加した。点灯したら、特定のゲームに合わせた特殊な配列、無点灯なら、通常コントローラとして機能するよう設定した。
2017-03-01

 キューブ型のNASを流用した巨大レシーバ、というか、USB接続の外付けハードディスクのオマケにレシーバが付いてる物体。レシーバに追加したリレーによって、4個のディスクを赤外線リモコンで個別にオン・オフできる。USBハブ経由の接続なので、厳密な意味では正しく動作しない。書き込み中に電源を切ったりしないよう注意する必要がある。

 HDDには、突入電流云々言って電源入れっぱなしが一番良いってのは、よく言われる。間違いとは言わないが、そんなのは、サーバルームのような条件が整って、且つ値段の桁の違う機器類での話。民生用のヘナチョコ機器をいっしょに語るのはマヌケもいいとこ。頻繁に切り替えるのでなければ、使わないときは電源を切っておくのが一番ってのが、僕の結論。

 最初は、ACアダプタ駆動にしようと準備していたが、良く考えてみたら、HDD以外にも、ケースFANを回す分が必要だったので、諦めて普通の電源使うことにした。配線は、変換ケーブルを利用した。一応、マニュアルでも電源操作が出来るよう、オルタネイトのスイッチに変更した。



 基板作り直した。表示部分の7セグメントディスプレイと、赤外線受光部を別基板に、LEDは、電線で引き出した。




 表示パネル裏側、インジケータ用LEDをユニバーサル基板の切れ端にハンダ付け。

 7セグメントディスプレイと、赤外線受光モジュール。HDD1~4のインジケータ用に穴あけた。



HDD用12Vの配線、やり直した。

ファンは、8センチのPWMタイプ。ファンコンは、両面テープでつけた。






 Arduino レシーバに書き込むのは、主電源に接続した 5ch 目のリレーを、HDDに繋ぐ1~4ch と自動連動するようにしたもの。USB接続のHDDは、認識に少々時間がかかるので、わかりやすくするため、rmx3 側でも、ドライブインジケータを表示するようにした。Kodi が起動していれば、そちらにもメッセージを送る。

 スモークフィルムを貼って完成。

2017-01-05

 送信・受信それぞれ別の基板のモジュール。片方向のみのワイヤレス通信。試してみたけど電波弱くて話にならん。電圧上げるのは、実用度低いし、ちゃんとしたアンテナつければ、まともに使えるようになるのか?

 まぁ、電波が届いても、ガシガシ通信するような用途には使え無さそう。通信相手が、PCとかだったら、送信側だけ作ればいい ESP8266 でいいわけで、今となっては使いどころもないのかも。
参考リンク
 VirtualWire Library
2017-01-03

 Da Vinci 32U のブートローダを書き換えるのに必要なライタ用の治具を作った。表向きと、裏向き、両方で使える。ISP用6ピン端子付けていれば、こんなのは不要だけど、邪魔というか、出っ張っちゃうからね。

 一応、書き込めてるみたいだけど、ヒューズ・ビットの設定が良く分らない。DFU 版の初期値はいくつだったのか?しくじったなぁ。
Da Vinci 32U ブートローダ
 Arduino 版 da-vinci-32u.zip da-vinci-32u-master.hex
 DFU 版 megaUSB_DFU_Bootloaders.zip ATMega32U4-usbdevice_dfu-1_0_0.hex
 Pro Micro のクローンは、まんま Leonardo だな。

 USB HUB 経由だとベリファイ・エラー出まくりだったが、本体に直接繋いだら何の問題も無かった。上手く書き込めない場合は、USBポートや、ケーブルを疑う必要がある。
davinci_usbtiny_bootloader.bat

@echo off
echo Da Vinci 32U を初期化します
pause
avrdude -v -patmega32u4 -cusbtiny -e -Ulock:w:0x3F:m -Uefuse:w:0xcb:m -Uhfuse:w:0xd8:m -Ulfuse:w:0xff:m
timeout 3
avrdude -v -patmega32u4 -cusbtiny -Uflash:w:da-vinci-32u-master.hex:i -Ulock:w:0x2F:m
echo エラーがないか確認して下さい
pause
bat 実行結果


Da Vinci 32U を初期化します
Press any key to continue . . .

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "D:\_program\avrdude\avrdude.conf"

Using Port : usb
Using Programmer : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:\\.\libusb0-0001--0x1781-0x0c9f
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00
flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : USBtiny
Description : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.04s

avrdude: Device signature = 0x1e9587
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D9
avrdude: safemode: efuse reads as C3
avrdude: erasing chip
avrdude: Using SCK period of 10 usec
avrdude: reading input file "0x3F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x3F:
avrdude: load data lock data from input file 0x3F:
avrdude: input file 0x3F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified
avrdude: reading input file "0xcb"
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xcb:
avrdude: load data efuse data from input file 0xcb:
avrdude: input file 0xcb contains 1 bytes
avrdude: reading on-chip efuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of efuse verified
avrdude: reading input file "0xd8"
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xd8:
avrdude: load data hfuse data from input file 0xd8:
avrdude: input file 0xd8 contains 1 bytes
avrdude: reading on-chip hfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of hfuse verified
avrdude: reading input file "0xff"
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.01s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xff:
avrdude: load data lfuse data from input file 0xff:
avrdude: input file 0xff contains 1 bytes
avrdude: reading on-chip lfuse data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lfuse verified

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as CB
avrdude: safemode: Fuses OK (H:CB, E:D8, L:FF)

avrdude done. Thank you.


Waiting for 0 seconds, press a key to continue ...

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "D:\_program\avrdude\avrdude.conf"

Using Port : usb
Using Programmer : usbtiny
avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:\\.\libusb0-0001--0x1781-0x0c9f
AVR Part : ATmega32U4
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 9000 9000 0x00 0x00
flash 65 6 128 0 yes 32768 128 256 4500 4500 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00

Programmer Type : USBtiny
Description : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.03s

avrdude: Device signature = 0x1e9587
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as CB
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: Using SCK period of 10 usec
avrdude: reading input file "da-vinci-32u-master.hex"
avrdude: writing flash (32750 bytes):

Writing | ################################################## | 100% 62.61s

avrdude: 32750 bytes of flash written
avrdude: verifying flash memory against da-vinci-32u-master.hex:
avrdude: load data flash data from input file da-vinci-32u-master.hex:
avrdude: input file da-vinci-32u-master.hex contains 32750 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 40.41s

avrdude: verifying ...
avrdude: 32750 bytes of flash verified
avrdude: reading input file "0x2F"
avrdude: writing lock (1 bytes):

Writing | ################################################## | 100% 0.02s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x2F:
avrdude: load data lock data from input file 0x2F:
avrdude: input file 0x2F contains 1 bytes
avrdude: reading on-chip lock data:

Reading | ################################################## | 100% 0.01s

avrdude: verifying ...
avrdude: 1 bytes of lock verified

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as CB
avrdude: safemode: Fuses OK (H:CB, E:D8, L:FF)

avrdude done. Thank you.

エラーがないか確認して下さい
Press any key to continue . . .
 正しく実行できていれば、Arduino は、初期化されて、BLINK のプログラムがピコピコ動いてるはず。
2017-01-01



TP5ATT
TP33VCC
TP32GND
TP4CLOCK
TP3COMMAND
TP2ACK
TP1DATA
 
 HORI Fighting Stick PS / HPS-07 / 基板 0888-32

 ジャンクなプレステ用のコントローラーを、PC に接続するべく、Da Vinci 32U で工作。チャタリングなのか、入力が安定しない。デバウンス対策が必要か。信号変換よりも、直接ボタンに繋いだほうが、確実なんだろうけど。

 たまにしか使わないのに、Arduino を1個消費するのも、もったいないんで、ソケットを筐体の横に貼り付けた。
参考リンク
 PSX Library デジタル入力のコントローラ用
 Arduino Joystick Library Arduino IDE 1.6.6 以降
2016-09-30

 4CHリレーとドッキング。一応、カチカチ切り替わってるっぽい。


 ボタンを押すたびに、リレーがオン・オフのトグル動作か、指定秒のみオンなのか選択できるように。

 レシーバの各設定は、rmx2 から行う必要があるが、動作自体は、Arduino 側で独立している。

2016-09-23

 空中配線だとグラグラして座りが悪いので、ユニバーサル基板をはさんだ。前と同じように作ったのになぜか動かなくて困ったが、一回り小さな赤い7セグメントLEDのピン仕様が違うせいだった。

 VAIOのリモコンレシーバでは、専用リモコン以外、PCの電源を操作出来ないが、こちらは自由に割り当て出来るので、リモコン選択の幅が広がる。
2016-09-15

 ALPSマニアとしては、やはり押さえておかないといけない80年代の楕円型のスイッチ。MSX にも同じスイッチが使われていたが、これは、ダイナブックより前、ラップトップPCのキーボード。鉄板無しで、軽くて弱そうだが、スイッチケースごとハンダ付けされているので、思いの外しっかりしている。キートップが、金属カバーを叩く乾いた音が心地よい。

 状態が良ければ悪くないスイッチに思えるが、手に入れたものは、錆びが全体にあって、かなり怪しい。廃品業者のブツは、保管状態が悪かったり、そもそも水かぶったものだったりするので、個人の保管品か、コンピュータ専門の業者じゃないとダメだな。とりあえず、錆止め、脱脂、潤滑の3剤投入した。

 ノートPC等のユニット化されたキーボードは、基板パターンをいじらずに、フラットケーブルからのマトリクス信号を、マイコンに結線して利用出来る。このキーボードの場合は、11x8 のマトリクス、つまり マイコン側に、19本分のピンが必要になる。いつもの Pro Micro じゃ足りないので、 ダ・ヴィンチ32U でテスト。

 今回は、類似機種のマトリクスを公開している方がいたので、大いに助かった。一から調べようとするとかなり時間がかかる。細かなピッチのフラットケーブルを電線に付け替えるのが一番大変だった。

 海外版の T-3100 の英語版キーボードの配列は、かなり僕の理想に近いが、この J-3100 は、余計な日本語キーが追加されていて残念なことになっている。下段の「漢字」、「カナ」は、他のキーに割り振ればいいが、問題なのは 「ENTER」。縦長で、さらに、左横に使いもしない「¥」がある。これが邪魔。「ENTER」と「¥」ボンドでくっつかないかな。
参考リンク
 TMK Keyboard keyboard controller firmware for Atmel AVR USB family
 How to build your very own keyboard firmware deskthority
 謎のキーボードユニット neko Java Home Page
2016-09-03

 4極4芯ケーブル用のソケットが、手に入ったので組み立て。Pro Micro に、動作確認用のLEDと、リセットボタンを追加。ADBやPS/2のコネクタよりも、抜きさししやすいな。向きも分かりやすいし。他の工作でも使えそう。

 一般的なクロスケーブル(受話器コード?)仕様にしちゃったんで、オリジナルのケーブルだと動かないな。というか、中に基板入れてUSB端子仕様に改造しようと思ってたんだけど、これ1台しか無いし、加工はやめておく事に。
2016-09-02


 KODI の制御用リモコンのレシーバに、時計機能を追加。これだけで、Arduino 版を使う意味が出来た。

 rmx2 側にも、sleep ボタンの設定を追加。いわゆる「おやすみタイマー」で、押すたびに、120→90→60→30 と指定分後にサスペンドさせられる。

 設定さえ済んでしまえば、USB デバイス単独で、電源管理(サスペンド&復帰)出来る。まぁ、普通の人は、リモコンでオンオフするほど複数の PC を使わないわな。


 僕は、7セグメントLEDって好きなんだよね。意味も無くオーディオタイマーとか、いっぱい持ってるし。やっぱ、緑色が一番キレイだな。


2016-08-13


 Macintosh Plus の頃、80年代の、ADB ですらない古いメカニカルキーボード。電話線みたいな、4芯のモジュラーケーブルで接続する。まぁ、今頃手に入るとは思ってもいなかったが、写真とは違って、実物は、中々のカッコ良さ。

 おなじみの TMK Converter を使って、仮組みでテスト。ロックキーと、反応しないスイッチをバラして組みなおし。とりあえず、全キー認識した。キーをバラすには、基板からハンダを吸い取って外す必要があるので、非常に面倒。キースイッチ自体は、リニアで悪くない。今見ると、何ともバブリーな造り、最近のチマチマしたのとは、正反対。無駄なスペースこそ粋!なんだよな。
参考リンク
 TMK Keyboard keyboard controller firmware for Atmel AVR USB family
 Macintosh M0110 USB converter geekhack
2016-04-12
Arduino USB IR Receiver 前に作ったUSB接続の赤外線受光ユニット

 今回は、データの送受信を、USB HID の RAW データとして扱う。ソニーのUSBレシーバと同じように、リモコンのボタンを押した時と、離した時、2つのタイミングでデータを送る。なので、受け取り側のプログラムも、ほぼ同じように処理できる。

 そんなわけで、次Ver の rmx は、さんざん拡張してきた分をバッサリ省いて、別物の rmx2 としてリリースする。対応デバイスは、ソニーのと、Arduino 製の2つだけ。

 緑枠が、Arduino版だけの設定。リモコンで PC の電源と4ピン分のリレーの制御を出来るようにした。

 Arduino の赤外線ライブラリを見ると何処のメーカのリモコンでも使えそうな感じなのだが、どうも上手くいかない。時々データ化けを起こす。

 ボタンを押しているのに処理できないと、あれ?あれ?と2度押し3度押しとかストレスたまってよろしくない。ソニープロトコルは、比較的安定しているが、RC6 とか微妙すぎ。

 いや、プロトコルの話じゃなくて、単純にリモコンの出力の違いなのかも。VAIO のリモコンなんて、あさっての方向でも認識するしな。

2015-12-22
 Pro Micro もどきを使った USB 接続の受光ユニットをつくってみた。普段は、旧バイオのリモコンセットを使っているが、同じようなものを、Arduino でも出来るのか実験。

 プログラムは分かっても、電子工作側の知識は、ほとんど無し。もちろん、部品の見分けぐらいは付くし、ハンダ付けは可能。しかし、中身が良く分からない。LED は、オンオフさせるピンから、GNDへ繋ぐ。抵抗を挟んで、光り加減を調整、昔習ったオームの法則ってやつだ。動作を理解できる部分は、この辺まで。肝心のリモコンの信号を処理させるには、3本足の受光素子モジュールを、それぞれの対応するピンに接続すればいいらしい。ハード側は、あっさり完成(実際には、ブレットボードで試した後で、組み立てた)。

 で、ソフト側。このデバイスからPC側に、どうやってデータを渡すか考える。ネットのサンプルだと、キーボード入力に変換しているのが多いようだが、それではダメ。あくまでもデータだけ渡したい。データ専用の適当なUSBデバイスをでっち上げたいが、難しそう。とりあえずは、自動で割り当てられているシリアルポートで通信することにした。

 Windows で、ボタンデータを受信してコマンド振り分けする rmx 風のシリアル通信ソフトを作って試す。問題なく使えそう。ライブラリで認識されるリモコンなら、なんでも使えるのは、いい点。ただ、抵抗一つ手に入れるのに、数百円もの送料が、掛かったりもするから、電子パーツ類を簡単に手に入れられる環境じゃないと高くつく。
2015-12-06

 SparkFun Pro Microのパチもの。Arduino Leonardo として認識される。ATmega32U4 であるから、手持ちの Davinci32u の代わりになる。ADB変換は、ピン数が必要なわけじゃないから、これで十分。


2014-04-20

 v f キーから上をカット。空いたスペースに、Caps / Scroll / Num Lock の ランプと、コントロール用の ダ・ヴィンチ32U を詰め込む。何度も切ったり付けたりしたので、ぐちゃぐちゃ。仮止めなんで、ホットボンドで固定してたりする。使えそうならキレイに作り直す。

 レイヤー切り替えのポジションランプが点灯するので分かりやすい。この LED部分は、4回も作り直した。スイッチを押しても干渉しないようにするのに大苦戦。次やるときは、素直にチップLEDを使おう。裏側の元々あった穴からリセットボタンを押せるようにしたが、プログラマブルなテンキーなわけだから、より押しやすい表側にボタンがあってもいいかも。

 ひとレイヤー、丸々 19キー分は、ハードウェアレベルの割り当てが出来そう。ソフトウェアで割り当てるなら、さらに増やせるが、そんなにあっても覚えきれないしな。
2014-04-08

 NEC の 黄金時代、PC-9801ノート用オプションのテンキー。当然、年代もののメカニカル。これも、2,3個動きの悪いキーがあって残念な状態。劣化してなければ、アルプスに負けないくらい素晴らしいんだが、いかんせん、スイッチの分解が無理なのが致命的。交換用のマトモなスイッチを手に入れるのも難しい。いくら、レトロ・キーボードが好きでも、メンテが難しいようでは常用できない。

 先日組み直したコンバータの ダ・ヴィンチ32U が余ったので、実験用に、TMK Keyboard の 98→USBコンバータを作ろうとしたのだが、上手くいかない。キーは認識してるようだが、反応悪いし、入力も出来ない。そもそも、ソースの中身なんぞ、よく分かってないから、いじりようもない。とういわけで、98コンバータは諦めて、キーボード自身のマトリクスを乗っ取って動かすことにする。信号変換ではなく、縦横のキーマトリクス全てを結線して直接操作するやり方。これが理解出来れば、オリジナルなキーボード作成の知識になるはず。
参考リンク
 TMK Keyboard keyboard controller firmware for Atmel AVR USB family
 How to build your very own keyboard firmware deskthority
 チュートリアルを見ながら、試行錯誤した結果、とりあえずは動いてるっぽい。最低限のところだけしか理解できていないが、5つあるファンクションキーを、レイヤ切り替えにして、入力できた(たぶん)。

 単純に、USBで動かしたいだけなら、拡張キーボードⅡでやったように、他のコントローラ基板を乗せ替えるのが、技術的には簡単(作業自体は面倒)。テンキーレスやフルキーボードならば、小細工なしでもそのまま使えるわけだから外付けのコンバータや、基板の乗せ替えで問題ない。配列が特殊で、独自の割り当てをしたい、とか言う場合は、今回のように USB接続のマイコンを部品代わりに使って、オリジナル動作のコントローラを作成する必要が出てくる。
2014-04-04

 Flip 版の ダ・ヴィンチ32Uを、使ってみた。ピンヘッダ・フレームを付けて、裏向きにしてスッキリ。押せなくなった リセットボタンと、ジャンパピンの代わりに、小さなタクトスイッチと、スライドスイッチを追加。LED も別に付けた。裸じゃ、まぶしい。

 Arduino Bootloader 版との違いは、
1.書き込み用(HWB)のピンヘッダのハンダ付けが必要。
2.専用の書き込みソフト Flip(GUI)、または dfu-programmer(CUI) を使う。
3.ドライバも違う。(C:\Program Files\ATMEL\Flip 3.4.5\usb)
4.当然、書き込み手順も違う。ジャンパ→リセット→書き込み。
 hex ファイルの書き込みに、リセットボタンだけの Arduino Bootloader 版か、ジャンパ操作+リセットボタンの Flip 版か。

 Arduino Bootloader 版の方が、ひと手間少ないが、実際の書き込みタイミングが難しい。タイミングを自動化するソフトを自作したので、不便なく使えるようになった。Flip 版は、キッチリとプログラム動作と、書き込みモードが分かれているので、間違えようが無い。運用時は、ブートローダを挟まず、直接プログラムが起動する。つまり、立ち上がりが速い。コールドブート時も安心。

 結論、Arduino IDE を使わないなら、Flip 版で間違いない。
2014-02-24
 ダ・ヴィンチ32U への書き込みは、avrdude というプログラムで行うが、この書き込みタイミングが中々シビアで難しい。キー配列を変えるたび書き込みが必要なので、毎回イライラすることに。僕が用意した Arduino Bootloader 版の ダ・ヴィンチ32U は、元々、Arduino IDE から使うものなので、他でコンパイルしたものを書き込む自体、イレギュラーなことなのかもしれない。Flip 版の方は、専用のソフトで書き込むので、以下の手続きとは無関係。
リセットボタンを押す → デバイスの切り離し
 → ブートプログラム起動 → ブート側のCOM認識 → ユーザープログラム(キーボード)起動
 ユーザープログラムが起動(今回の場合はキーボードとして認識)すると、COMポートは消えてしまうので、その間の絶妙なタイミングで書き込みを実行しないといけない。
 仕方ないので、COMを監視するアプリを組んで、書き込みタイミングを自動化することにした。
write 実行 → リセットボタン → (アプリ:Da Vinci 認識待ち → 書き込み)
 失敗も多いが、無いよりマシ(たぶん)。どうしても、デバイス認識出来ない場合は、一度USBから抜いた後、差し直して再チャレンジ。M$のデバイスドライバがゴミなのか、USBの接続先を変える度に、ポートNoも変わっていくし、なんなんだ、このウンコ仕様。
2014-02-23


 USBハブとコンバータをキーボード内に組み込んで、しばらく使っていたが、いじくりまわしているうち、調子が悪くなって結局、ハブは外して、コンバータも外付けすることに。ユニバーサル基板に、ADB端子のソケット(ミニDin 4pin S端子と同じ)と、ダ・ヴィンチ32U をハンダ付け。空中配線と違ってバラけることもない。後は適当なケースを探そう。

 外付けにすれば、他のADBキーボードでも使い回せるが、独自のキー設定(キー入れ替えや、ファンクション割り当て)をしてしまうと、実質そのキーボード専用のコンバータになってしまう。コンバータ側で、キーボードの情報を取得できるのならば、振り分けも可能なのかもしれないが、その辺は、さっぱり分からない。もっとも、キーボード交換毎に、設定の書き換えをしても、一手間かかるだけで大した問題ではない。保存しておいたバイナリを書き込むだけ、1分もかからない。

 無くなったテンキー部に割り当てられていた、Del 等の足りない分を、ファンクションキーと組み合わせるために、keymap.c を編集する。Fn + ← で Home 、Fn + 1 で F1 とか。CapsLockとOptionキーの2つを、スペースバーの左右に移動して、Fnキーとして使う。Powerキーには、かな漢オン・オフ切り替え用に、F13 を割り当てた。悩みどころは、カーソル。色々なパターンで試してみたが、どれもいま一つ。ここは、ダイヤモンドカーソルに慣れるべきか。

 拡張キーボードⅡの改造も3回も作り直しているように、不器用なのもあって、一発で満足な出来にはならない。このキーボードも、筐体側がボロボロになってしまったので、作り直しが必要。実際にやってみないと色々分からないこともあるわけで。
2014-01-30

 20数年前のマックの標準キーボード。元々、キーと筐体の色は同じなんで、こんがり黄色く焼けているのが分かる。プラスチック中の何かの成分が、化学的に反応して色がつくんだそうな。

 部品取り用に4台ほど確保しているが、拡張キーボードほど大きくもないので、そのまま使えなくもない。そこで、前から気になっていた TMK Keyboard(ADB → USB 変換のコンバータ)を組み立てることにした。Fnキーを、自分で設定して使えるので、足りないキーの問題もカバーできそう。そもそも、市販のADB-USB変換デバイスでは、ハードレベルでのキー・カスタマイズは無理。フルキー揃っている拡張キーボード等なら問題ないが、キー数の足りない M0116J では、とても使えない。

ADB-USB 変換


 TMK Keyboard keyboard controller firmware for Atmel AVR USB family
 Strawberry Linux ダ・ヴィンチ32U ATMEGA32U4 マイコン
 エチュードの頃 ADB to USB converter on Da Vinci(改良版を試す編)
 ちっこいUSB接続のマイコンボードと抵抗1つ、それと4pin のメス・コネクタ。老眼なのか細かいとこが見えない。いよいよ、ルーペ買わないとダメだな。とりあえず動いたが、詳細不明だ、よく分からない。色々出来そうなのに、電子的な知識が無いのがもどかしい。