2020年4月30日木曜日

Key Ichigo 2

KeyIchigoが概ね動作していることがわかりましたのでハードウエアの紹介をしておきます。

KwyIchigo ハードウエア編

まずは写真をご覧ください。基板は経済寸法の10㎝x10㎝です。

簡単な説明

LCDソケット:モバイルモード用128x64ドットLCD用ソケット
バックライトSW:LCDのバックライトON/OFFスイッチです。
W-Fi モジュール:WROOM02をのせてMixJuice互換になります。
EEPROM:Basicプログラム保存用の拡張ROMです。
電源コンバータ:1.9~5Vを3.3Vに変換します。これで乾電池でLCD点灯が可能となります。
電源スイッチ:左がONで右がOFFですが、逆がよかったかも。
LCD,ブザー:IchigoJam標準装備です。
ブザースイッチ:ブザーの音をOFFできます。
USB電源入力:5Vで使うときの電源コネクタです。
Groveコネクタ:センサーなど拡張用のGrove互換コネクタを実装できます。2mmピッチのコネクタがつかえます。
IJ CPU:いうまでもない、LPC1114FDH28。
タクトスイッチ:IchigoJam標準装備品です。
LED:キーボードのLEDですが使うことがないので要らないかも。
UARTポート:ATMEGA328のシリアルポートが出してあります。ブートローダを書き込んでUSB-シリアルアダプタなどをつなげればArduinoIDEでプログラムできる(筈)。
キーボードデコーダ:ATMEGA328を1MHzで使っています。プログラムはソフトウエア編をご覧ください。(Linkを追加しました。)
USBポート:IcjigoJamにつながっている配線の端子を設けました。上下を切り分ければ下半分はPS2キーボードとして動作するように作ってあります。
プログラムポート:GTMega328に書き込むための6ピンコネクタです。
その他:左下の方にキースイッチの間にある小さな部品はマトリクス用のダイオードです。3個使っています。


裏

RCAコネクタは裏につけられます。

LCD載せ

F1~F12は、Funcキーを押しながら最上段のキーを押します。
「-/=」を「=/-」とシルク印刷してしまいました。逆ですね。

電源

Wi-Fiを使うときは、乾電池3本または5V電源で使います。
Wi-Fi の電源は、中央にLDO用のパッドが用意されています。C6にはOSコンをのせて使います。

Wi-Fiを使わないときは、乾電池2~3本または5Vで使います。電圧範囲は1.9V~5Vです。

その他

Groveコネクタは合計6個です。3個はI2Cがつながっています。残りにはOUTがつながっていますので、I/Oとして使うことができます。
IchigoJamは素直に実装されています。
LCD右上のパッドは、I2C接続の温度センサーです。
「10 SWICH 1」を自動起動させると電源ONでLCDが使えますよ。

LINK他

IchigoJamはjig.jpの登録商標です。
詳しくはこちら。




Key-Ichigo

IchigoBoyのフルキー版を考えてみました。

Key Ichigo キイチゴ キーボードソフト編

概要

コンセプトは「ポケットIchigoJam」です。
キーデコーダはATMEGA328Pを使う。
素直なキーマトリクスだとピン数が足りないので一工夫必要でした。
FirmwareはArduinoIDEでつくる。
キー配列はフルキー同等にする。(10キー無し)
LCDもつけてポケットPC化する。(Vidoeコネクタは残す)
ついでにMJとかROM、 センサー用コネクタとかも載せてIoTにも対応。
28ピンソケットは対応。5ピンソケットは位置がずれます。
10㎝角の基板に全部載せます。



最小構成

LINKなど。

猫にコ・ン・バ・ン・ワ のページを参考にさせて頂きました。
ps2dev を使うとマウスとキーボードをエミュレートできるらしいのですが、すでに作ったことがあるので、ライブラリは使わずにコーディングします。

自分でP/S2をプログラムしてみたいので仕様をこちらで拝見しました。
https://www.technoveins.co.jp/technical/keyboard/
https://www.avrfreaks.net/sites/default/files/PS2%20Keyboard.pdf

名前はFB友につけて頂きました。ソフトのトラブルも解決ヒントをFBのIchigoJam-Fanでいただいています。そちらもよろしければご覧ください。

以下、整理します。というより丸写し。

PCとの通信ハンドシェーク

  • PCがCLK=0にしている:PCがBUSY
  • CLK=1、DATA=0:PCからの送信要求
  • データ送信は、CLK=1のとき、データを出してキーボードからCLKを操作する。
今回は1キーのみの対応なので次のようなフローになります。複数のキーが押されたとき最初のキーが離れた時点で次のキーを受け付けるようになります。シフトやコントロールキーはいつでも応答します。

1キー打鍵キーボードの処理
  1. DATA=1ならキースキャンを開始する。
  2. DATA=0ならPCからコマンドを受信して処理し1に戻る。
  3. 押下を検知したら、そのスキャンコードを送信する。
  4. キーのリリースを待つ。タイムアウトしたらオートリピートコード送信する。
  5. 当該キーのリリースを検知したらリリースコードを送信する。
  6. スキャンを続けるか、または1に戻る。
  7. Shift,ALT,CTRLは1と4のところで押下をチェックして別途コードを送信する。

PC->キーボードへの命令

  • 0xed + 0x00~0x07 : LED点灯制御(未確認)
  • 0xee : ECHO Responce要求 (対応)
  • 0xef~0xf2, 0xf7~0xfd: Nop (未対応)
  • 0xf3 + 1byte : Set Typematic Rate/Delay(未対応)
  • F4 : Enable キースキャン開始 (ACK返信)
  • 0xf5:Default Disable、初期化しスキャン停止(未対応)
  • 0xf6:Set Default、初期化(未対応)
  • 0xfe:Resend 再送要求(未対応)
  • 0xff:Reset。リセットしACKを返す。その後セルフテストを開始。(ACKを返す)

キーボードからPCへのコマンド

  • 0x00:バッファオーバーフロー(バッファサイズ16バイト)(未対応)
  • 0xaa:BAT Completed。Basic Assurance Testが正常終了した。(未対応)
  • 0xee:ECHO RESPONCE。ECHOコマンドへの応答(対応)
  • 0xf0:Break code prefix
  • 0xfa:Ack。ECHO, RESEND以外のコマンドの正常受信に対する応答コード
  • 0xfc: BAT Failure(未対応)
  • 0xfd:セルフチェックでエラー発生(未対応)
  • 0xfe:PCに対する再送要求(未対応)
PCからのコマンドはF4とFFにACKを返します。EDもプログラムはしましたが、2バイト目の受信は動作未確認です。IchigoJamが使わなければいらないし。

さて、いくつかのメモです。
クロック周波数は10~16.7KHz( 周期100~ 60uS)です。送信時は80uSに調整しました。受信時は適当です。
キーボードからホストに送信するときは、CLK=1を確認してからデータを書いてクロックをLOWにしてHIGHに戻すことを繰り返します。SPIをプログラムで送信するのと同じです。

ホストからキーボードに送るプロトコルはこうなっています。
  クロックを作るのはキーボードが行う。
  HOST->DEVICEのスタートビットはHOSTが作る。
  PCからキーボードへのデータの送り方。
    PCは100uS以上クロックを0にする。
    PCはDATAをLOWにする。(スタートビットに見える)
    次にクロックを1にするとデータ送信要求状態となる。
    キーボードは10mS以内にデータ読み出しを開始する。
    
これで条件がわかりました。あとはせっせとコーディングします。
PCからのコマンドは全てスルーしても一応動きますので、自作されるかたはまずそれから試せばよいと思います。

>>ハードウエア編につづく(予定)

ソフト編補足 2020年5月2日

IchigoJamのモニタ出力のDefaultはNTSCなのです。KeyIchigoは128x64のLCDが搭載されていますが、そのままでは切り替えないとLCDは点きません。
そこで、キーボードコントローラにIchigoJamからリセットコマンドが送られたら通常のACKにつづけて「F1+SWITCH1,5+Enter」を送信するようにしました。
これで、電源を入れるとLCDが表示を始めるようになりました。

LINK他

IchigoJamはjig.jpの登録商標です。
詳しくはこちら。


2020年3月8日日曜日

格安3Dプリンタを改造してみる (2020/03/15更新)

EasyThreed X1プリンタですが、使えそうなので少し改造しました。

3Dプリンタ 改造編1

さて、使えそうなことが確認できたので改造しておきます。

y軸ケーブル

y軸にケーブルガイドを追加

このような動きをします。
屈曲位置が集中しないので傷みにくく断線しにくくなります。

 フィラメントガイド

フィラメントガイドも追加します。3Dプリンタでよく使う内径2mmのチューブです。
これを止めるパーツを自分でつくります。 これが嬉しいところです。

以前から使っている3D CADで造形して
付いてきたスライサーでGCODE化します。
SDカードに書き込んでプリント開始、、、。

あれ?なんか変です。
そうなんです。鏡像でプリントしてくれます。要するにX軸かY軸の方向が逆なのです。
今後はCuraでスライスしたいので設定がないか探しましたが、無いようです。
今日のところは、スライサーで反転しておきます。 とりあえずメーカーに質問を送りましたが、回答あるかな。

ステップモータを逆回転にして(これは配線変更だけでできる。)原点スイッチの位置を変えればできるけれど、急がないので後にします。

  >>これはコントローラでモーターとリミットスイッチの配線のXとYを入れ替えて対処しました。(2020/03/15追記)

プチ改造の結果

今日の改造結果です。
これで、見張っていなくても使えますね。
断線の心配も減りました。

コントローラは

コントローラの中
中はこんな感じです。ばらして台座に組み込んでしまいたいですが、後の楽しみにとっておきましょう。

鏡像で印刷する件は、X-Y軸の入れ替えで対処するのが、簡単そうです。
同じモーターを使っているようだしコントローラの配線差し替えだけで済みそうです。

フィラメントホルダー

自分でプリントできる1Kgフィラメントリール用のものを作っておきます。
直径は95㎜です。
他にM3のネジとナットと6㎜の鉄球を使います。
上下のパーツの間にはポリスライダーをいれればBetterでしょう。


台にボールの位置をきめるリテイナーをのせて鉄球を並べます。


ネジで止めれば完成ですが、ネジは締めすぎないように注意です。

STLデータを置いておきます。

ここにおきましたが、見えますか???

もうひとつの改造

Toutubeを見ていたら、冷却ファンを追加していました。コントローラにはファン用のコネクタがついているらしい。12V の小型のファンならあるので、やってみたいと思います。プリント品質も上がるはずです。












2020年3月7日土曜日

格安3Dプリンタを使ってみました。3Dプリンタを使って色々作っていますが、時間がかかるのでもう一台あると便利かなと思っていたところ、10㎝x10㎝と小型の激安プリンタが販売されていましたので、買ってみました。

Easy Threed X1 プリンタ


Linkはしませんが「EasyThreed X1」で検索すると複数のサイトで販売されているのがみつかるとおもいます。最安値は4桁でした。


開梱の儀 開けたところ

2層目 配線済みですね。
Y,Z軸です。

問題発見。
ヘッドのカバーの爪が割れていて外れてしまいます。
動作には影響はないです。(^^;;

3層目の台座とはケーブルでつながっています。

最下層
電源とUSBケーブルです。USBは懐かしいABケーブルでした。
しかし、Firmwareのアップデート用でPCから直接プリントには使えないらしい。


長いネジが2本と
SDカードにカードリーダが入っています。
SDカードには説明が入っていますが、英語と中文のようです。
和文の組み立て説明書は印刷されたものが同梱されていました。

爪がおれています。

テープで応急修理。

電源をいれて、コントローラのホームボタンを押すとヘッドの高さをゼロ点に移動します。
が、
こんなに浮いています。これは困るのですが、原因はケーブルが高さ(Z軸)センサに挟まっていました。
ケーブルの固定を後で考えましょう。

画面右下に映っているネジで高さを調整するのですが、
よく見るとベッドを固定しているネジ(画面中央、奥のほう)が緩んでいます。

ベッドを固定しているネジ達です。

こんな感じで増し締めしたのですが、これが後で問題の原因に。

問題がこれ。
ネジを締めすぎたらしく、X軸(横方向)がずれてしまいました。
いわゆる、ステップモーターの脱調という現象です。
前に戻って、ネジをガタのない(遊びのない)ぎりぎりまで緩めてシャフトにグリスを補給しておきます。
グリスは重くなるのでオイルをこまめに給油がよいそうです。(追記)


もう一度作り治しました。スライスもやり直しています。
プリントベッドは磁石で外せてできたものを外すのは楽です。


和文の説明が同梱されていました。もう少し濃く印刷してくれると読みやすいですが、読めないことはありません。

とりあえずのまとめ

USBメモリには英文と中国語のPDFが入っています。スライサもUSBにありましたが中国語と英語メニューです。

X軸脱調問題はもう一度調整してみましょう。ベルトを外すと軽く動きますのでモーター側の組付けをみたほうがいいかもしれません。

フィラメントのホルダはついているのですが、最大荷重が250gだそうです。普通は1kgで買うので、巻き直すかフィーダーを別に用意したほうがいいですね。

あとは、コントローラのケースの中で何かのLEDが点いたり消えたりしているのが気になります。Heaterでもなさそうだし時間があれば後で調べることにしましょうか。

ケーブルの固定とか、少し手をいれたいところもありますが、値段を考えればよくできていると思います。10㎝あれば、色々作れると思います。







2019年11月25日月曜日

IchigoBoy Pocket Kit 98%をつくってみた

従来のIchigoBoy Pockeはチップ部品を多用していたので主に完成品で提供していました。

名前は IchigoBoyPocket Kit98%

CPU以外をリード部品に置き換えてみました。
コネクタとスイッチの位置についてはできるだけ同じにしています。

電源のUSBコネクタは、リード部品といえるかどうか微妙です。(^^;;
EEPROMもDIPが使えたのはラッキ―でした。面実装タイプも使えます。
全部で約50個のパーツが載りますがCPUが唯一半田付けしてあります。つまり2%だけできているので98%キットと言うわけです。
もちろんIchigoJamBasicは書き込み済みです。

スライドスイッチは脚付きタイプと従来品の両方が使えます。
OUT1~6を引き出せるスルーホールを大きくしたので工作に使いやすくなったと思います。

PCとつないでプログラムやファームウエアのアップデートできます。(ソケット付き)

基板の写真 大きさはIchigoBoyより少し小さいです。


表 緑色はコンバータモジュールです。

裏 電池ホルダは両面テープで固定します。

回路図

回路図

PDF版はこちらから。

作り方について 

部品が小さめで、50点と多めなので中級者のかた以上にお勧めします。
配置が密で両面実装していますので、順番によっては難易度が上がります。
小さな部品から付ければ問題はないはずです。

添付の説明書はここからご覧ください。これがすべてです。
22KΩ(赤赤橙金)と2.2KΩ(赤赤赤金)がとてもよく似ているので間違えないようにしてください。

では、ゆっくりと、半田付けをご堪能ください。

LINK他

IchigoJamはjig.jpの登録商標です。
詳しくはこちら。


2019年11月16日土曜日

IchigoJamのI/Oを増やしてみる

IchigoJamは28ピンのLSIを使っているので、IO端子数が結構厳しいです。
そこで、これを増やす方法を考えました。

端子を増やすにはエキスパンダを使う。

エキスパンダって白黒のかわゆい希少動物ではなく、Expandするヤツです。
ふと目についたこれ。

タイトルは、「キャラクタLCDをシリアル接続するアダプタ」です。
キャラクタLCDは最低でも7ピン必要なのですが、マイコンで7本のピンが残っていないときシリアル接続するための基板です。LCD用ですが、中を見ると「PCF8574」が使われていてこれを調べると「汎用IOエキスパンダ」でした。つまり、汎用品を使ってLCD基板を作っています。
ならば、汎用エキスパンダにも使えるはずということで、試してみました。

IchigoBoyPocketにつないでいます。
4ピン部分をROMソケットにつなぎます。IchigoJamの配置とはSDAとSCKが逆なのでそのままでは刺せません。私は配線に変えてつなぎました。
16ピン側がLCDに行く線ですが、これのDB7~DB4,E,R/W,RSの7本が使えます。

ポイントは、

  • READするポートは1をWRITEしておく事
  • I2Cアドレスが2種類あること(#27、#3FでICの種類で変わります。)
  • IchigoJamのROMソケットとは信号が逆順だった。

アドレスが2種類あるので注意が必要です。各々7アドレス追加でき8個を同時につなぐことができます。
単純にここを1バイトI2CWすれば書き込むことができるし、1バイトREADすれば読み出せます。1ビットごとではなく8ビット同時です。
まずは読み出しサンプルプログラムです。行60で#FFをOUTしておきます。
10 'IO Expander
50 POKE#700,255
60 R = I2CW(#3F,#700,1)
100 for i = 0 to 255
110 poke#700, i
120 R = I2CR(#3f,#700,1)
125 ?BIN$(PEEK(#700))
130 NEXT
140 GOTO 100

次は書き込みサンプルプログラムです。

10 'IO Expander OUT
100 for i = 0 to 255
110 poke#700, i
120 R = I2CW(#3f,#700,1)
125 ?I
130 NEXT
140 GOTO 100
ここまでは、簡単ですね。
手元のアダプタでは次のような対応でした。
Jam    アダプタ
Bit7             DB7
Bit6             DB6
Bit5             DB5
Bit4             DB4
Bit3            なし。読むとゼロです。
Bit2    E
Bit1            R/W
Bit0            RS
注:読むときはOUT=1にすること。
注:アドレスは#27と#3Fがあるので動かないときは両方試すとよいかも。

これを使って電子工作してみましょう。

 追加でスイッチをつないだり、モーターをつないだりできますね。
電子工作するときに便利そうです。






2019年9月8日日曜日

IchigoJamで温度を測る

IchigoJamに温度計をつないでみます。

I2Cタイプを使います。理由はこんなところ


  1. アナログだとノイズもあり精度が出しにくい
  2. SPIだと貴重なポートを消費する。

IC品番

ADT7410
秋月さんで購入しました。参考LINKかこちら
ディフォルトなので13ビットで変換しているはずです。

プログラム例



1 @ARUN'TEMP
50 SWITCH1
100 POKE#700,0,0
110 R=I2CW(#48,#700,1)
115 ?R;" ";
120 R=I2CR(#48,#700,2)
125 ?R;" ";
130 T=PEEK(#700)*256+PEEK(#701)
140 PRINT T/128;".";(T+6)%128*10/128;" ";T
150 WAIT 30
160 GOTO 100

読み取りを128で割ると温度になりますが、IchigoJamでは整数で扱うので小数点以下の表示するためにPRINTが少々複雑になっています。Tが読み取ったデータです。

==追記==
このセンサーは、アドレス設定ができて最大4個を同じ線に接続できます。
とりあえず、A0=A1=Hの場合を追加してみました。

1 @ARUN'TEMP
50 SWITCH1
100 POKE#700,0,0
110 ?I2CW(#48,#700,1);
115 ?I2CR(#48,#702,2);
120 ?I2CW(#4B,#700,1);
125 ?I2CR(#4B,#704,2);" ";
130 T=PEEK(#702)<<8+PEEK(#703):U=PEEK(#704)<<8+PEEK(#705)
135 U=[1]
140 PRINT T/128;".";(T+6)%128*10/128;" ";T;" ";U/128;".";(U+6)%128*10/128;" ";U
150 WAIT 30
160 GOTO 100

--さらに追記--

MixJuiceをつないで、温度をクラウドにUPしてみました。

2 CLS:?"Ambient":UART1
3 'MJ PCT application/json
4 'MJ POST START ambidata.io/api/v2/channels/チャンネルIDを書く/data
5 '{"writeKey":"ライトキーを書く","d1":"#"}
6 'MJ POST END
100 'MAIN
110 P=#C1A
120 gosub1000:A=T
130 gosub600:gosub600:gosub600:gosub600
140 wait120
150 goto 100
600 'TX
610 ifpeek(p)<>asc("'")letP,P+1:goto610
620 P=P+1:ifpeek(P)=asc("#")?A;".";(A+6)%128*10/128;:goto620
630 ifpeek(P)<>0?chr$(peek(P));:goto620
640 ?:return
1000 R=I2CW(#4B,#700,1):R=I2CR(#4B,#702,2)
1010 T=PEEK(#702)<<8+PEEK(#703)
1020 T=T/128
1030 RETURN
----------------

回路

回路図はありませんが、A0、A1をGNDにつないでください。あとは電源とGNDとSCLとSDAをROMカセット接続するソケットにつなげばOKです。
秋月さんで購入するなら基板付きもあるので、そちらが便利かもしれません。


結果

実行するとこんな感じです。最初の0,0はI2C関数の戻り値です。最後の大きな数字はセンサーの読み出し値です。