2019年3月31日日曜日

IchigoBoy 2、IchigoBoy Pocket2

IchigoBoyを更新します。

皆さんからご意見頂きまして改定することにしました。

IchigoBoy2

抵抗器の配置で違う種類が混ざっていたので並べなおしました。
抵抗の足の間隔を少し広げて付けやすくしました。
モニターコネクタが当たっていたので切欠きました。
LCDの位置を左右中央に移動しました。
電池コネクタを少し移動しています。
OUT1~6に配線できるパッドを追加しました。キースイッチと切り替えでうまく使えば利用できます。
コマンドが裏側に書いてありますが、電池ボックスで隠れにくいように少し移動しました。
バックライトにジャンパー線を付けていましたが、パターンを追加してジャンパーの半田付けを不要にしました。暗く設定するときはパターンを削ればOKです。
     等々。

IchigoBoy Pocket2

ROMを追加しました。(OFFできるので、外付けROMも使えます。)
Bボタンが押しにくかったので位置を調整しました。
電源スイッチに足つきの壊れにくいものも使えるようにしました。従来タイプも使えます。
基板の中央になりましたが、OUT1~6の端子を出しました。キースイッチと共用ですが使えます。


補足

PocketはROMを追加しました。スイッチの間に置きましたのでちょっと目立ちます。
OUT1~6を配線を半田付けして引き出せるように追加ポートを用意しました。
INはLCDに使っているので、やめておきました。LCDのあるコントローラなどに利用できるとおもいます。
OUT1~6はBoy的にはINに設定して使いますのでそのままであればボタンの状態が追加ポートでわかります。ここで、OUTに変えるとスイッチの状態ではなくOUTした状態に変わります。注意点は、INで使うときはスイッチの状態(通常0で押すと3.3V)になることと、抵抗が入っているので取りだせる電流に制限があることです。

回路は基本的には変わっていませんので掲載は省略します。

回路図追記(Pocket ROM付き版、OUTPORTはIchigoBoy2と同じです。)
ダウンロードはこちら


告知

メイカーフェア京都2019にエントリーしましたので、これにもっていく予定です。



メイカーフェア京都2019に出展しました。お買い上げいただいた皆様ありがとうございました。





Ichigojam用モニターTVの中の基板

IchigoJamで使っているダッシュボードモニタの故障品が届きました。
修理しようとして溜まっています。
とりあえず写真だけ撮ってあったたけで修理は進んでいないのですがこれはこれで面白いので公開しておきます。







電解コンデンサを交換したら動きましたが、、
ケースに入りません。(^^;;;

中身は色々ありますね。
故障個所ですが、ざっと見たところでは電解コンデンサの容量抜けですねえ。電解コンデンサのてっぺんは平らなのが初期状態ですがよく見ると膨らんできています。典型的な不良モードです。コンデンサとしては機能しなくなってると考えられます。

となれば修理作業は単純で、コンデンサを交換すればOKです。

ただ、故障したのは面実装用の小さな部品を使っていて熱がコモッタというのが根本にある可能性があります。それだと同じ部品を持ってきて交換してもまた壊れます。
外形が大きなコンデンサに変えればよいですが、それだとケースに収まらなくなります。

1台はフェライトコアが割れていました。割れたかけらが残っていれば瞬間接着剤で貼り付ければ治りますが、なくしてしまいました。

面実装コンデンサの交換はそれなりに難しいというのもあって放置ですが、近いうちに直したい。です。

LPC1114 にプログラムを書く

IchigoJamに使われているLPC1114は、NXPから無償のコンパイラが入手できます。
書き込みTOOLもFlashMagicがNXP社のサイトからダウンロードできます。
ところが、コンパイラがつくるファイルはELFフォーマットでそのままではFlashMagicでは書き込みできません。Linuxだと変換TOOLがあるのですが、Windowsにはないようです。
LPCExpressoを買えば、ELFファイルを書き込めるので問題はないのですが、FlashMagicでも書けるようにしてみたい。

ELFをBINやHEXファイルにするTOOLを作ろうというのが今回のテーマです。

NXP社のコンパイラ

まずは、LXP11xx用のTOOLとExampleをダウンロードしてきます。
無償でも256Kbまでコンパイルできるようで、問題なく使えます。LPC1114には32KBしかメモリがないので余裕です。

さて、とりあえず以前にも使ったことのあるBlinkyをReleaseでコンパイルしました。
コンパイルに先立って参照するライブラリをコンパイルしておかないとエラーになります。

プロジェクトのReleaseフォルダのなかに「LPCX1114_cmsis2_blinky.axf」というのができていました。拡張子が予想とちがいますが、これがELFファイルのようです。

次に中を見たいのでバイナリエディタを探してもいいのですが、後で変換する予定なので中をみるツールを作ることにします。

ファイルをバイナリでひらくプログラム

Visual Studio2013

C#のデスクトップアプリを作ることにします。
Form1にボタンとテキストボックスを貼って、テキストボックスのマルチライン=TrueにしてFrom1に次のコードを書きます。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace ArmElfHandle
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        
        byte[] elf;

        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            if(ofd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {

                FileStream fs = new FileStream(ofd.FileName, FileMode.Open);

                elf = new byte[fs.Length];

                fs.Read(elf, 0, elf.Length);

                fs.Dispose();

                StringBuilder sb = new StringBuilder();

                for(int i=0; i<elf.Length; i++)
                {
                    sb.Append(elf[i].ToString("x2"));
                    if((i%16)==7)
                    {
                        sb.Append(" -");
                    }

                    if((i % 256) == 255)
                    {
                        sb.Append("\r\n\r\n");
                    }
                    else if((i % 16)== 15)
                    {
                        sb.Append("\r\n");
                    }
                    else
                    {
                        sb.Append(" ");
                    }
                }

                textBox1.Text = sb.ToString();
                
            }

        }
    }
}

実行するとファイルを開くダイアログが現れるので、先ほどのELFファイルを指定します。
結果はこんな感じです。”45 4c 46”(ASCIIでELF)が最初にあってよさげです。
これで、ELFファイルのバイナリダンプができました。このTOOL上では見にくければ適当なテキストエディタなどにコピペすれば見やすくなります。

ELFファイルのダンプリスト

さて、ELFファイルですが、最初の256バイトはこうなっていました。

7f 45 4c 46 01 01 01 00 - 00 00 00 00 00 00 00 00
02 00 28 00 01 00 00 00 - 03 01 00 00 34 00 00 00
6c 5b 02 00 00 02 00 05 - 34 00 20 00 02 00 28 00
13 00 10 00 01 00 00 00 - 00 00 01 00 00 00 00 00
00 00 00 00 ac 06 00 00 - ac 06 00 00 05 00 00 00
00 00 01 00 01 00 00 00 - 00 00 02 00 00 00 00 10
ac 06 00 00 04 00 00 00 - 0c 00 00 00 06 00 00 00
00 00 01 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00

これを後述のLINKを参考に手作業で調べてみます。

ELFヘッダの手解析

7f 45 4c 46  最初の4バイトは固定です。3バイトは”ELF”ですね。
01      EI_CLASS:32ビットアーキテクチャ
01      EI_DATA:リトルエンディアン
       (複数バイトの値は下位バイトから書くということ)
01      EI Version は 1
00 - 00 00 00 00 00 00 00 00 ゼロで埋めてあるらしい。将来拡張用かな

02 00     種類。実行ファイル。(予想通りですね)
28 00     マシンの種類。ARMの仕様書に40と書いてあり一致しています。
01 00 00 00 - Version 1
03 01 00 00  e_entry; システムが最初に送る制御コードの仮想アドレス
34 00 00 00  e_phoff; プログラムヘッダテーブルのオフセット
6c 5b 02 00  e_shoff; セクションヘッダテーブルのオフセット
00 02 00 05 - e_flags; マシン固有のフラグ
34 00     e_ehsize; ELFヘッダのバイト数
20 00     e_phentsize;プログラムヘッダテーブルの登録ごとのバイト数
02 00     e_phnum; プログラムヘッダテーブルの登録数
28 00 -     e_shentsize; セクションヘッダのバイト数
13 00     e_shnum; セクションヘッダテーブルの登録数
10 00     e_shstrndx; セクション名テーブルのあるセクションテーブル番号

これで52バイトですので、テーブル中のELFヘッダのバイト数34と一致しました。
プログラムヘッダテーブルのオフセットが34なのですぐ次がプログラムテーブルだとわかります。テーブルには2つの登録がありテーブルの大きさが20なので各々32バイトです。
とりあえずセクションテーブルは使いません。フラグが何かCPUの設定を持っていそうです。

プログラムヘッダテーブル

ELFヘッダからヘッダテーブルの位置と大きさがわかりました。
次の2ブロックからなるテーブルがあるとわかりました。

エントリー1:
                  01 00 00 00 - 00 00 01 00 00 00 00 00
00 00 00 00 ac 06 00 00 - ac 06 00 00 05 00 00 00
00 00 01 00 

エントリー2
                  01 00 00 00 - 00 00 02 00 00 00 00 10
ac 06 00 00 04 00 00 00 - 0c 00 00 00 06 00 00 00
00 00 01 00

手作業で解読してみます。
エントリー1:
01 00 00 00 - p_type セグメントタイプ
00 00 01 00   P_offset セグメント内のアドレスオフセット
00 00 00 00   p_vaddr 仮想アドレスオフセット
00 00 00 00   p_paddr 相対アドレスマシン用の物理アドレス
ac 06 00 00 - p_filesz ファイル内でのプログラムのバイト数
ac 06 00 00    p_memsz メモリイメージ内でのプログラムのバイト数
05 00 00 00   p_flags メモリセグメント用のフラグ
00 00 01 00   p_align ファイル内のセグメントの配置指定のための数

エントリー2
01 00 00 00 -  p_type セグメントタイプ
00 00 02 00  P_offset セグメント内のアドレスオフセット
00 00 00 10   p_vaddr 仮想アドレスオフセット
ac 06 00 00   p_paddr 相対アドレスマシン用の物理アドレス
04 00 00 00 -  p_filesz ファイル内でのプログラムのバイト数
0c 00 00 00    p_memsz メモリイメージ内でのプログラムのバイト数
06 00 00 00  p_flags メモリセグメント用のフラグ
00 00 01 00  p_align ファイル内のセグメントの配置指定のための数

ELFファイルのアドレスオフセットの位置からfilesz分だけ読み出して使えばよさそうです。
エントリー2のファイル内のデータが4でメモリ上では12で足りませんが、不足分はゼロで埋めます。
これで、ELFからプログラムコードが取得できそうです。

FlashMagicについて

バイナリファイルを書きだしてFlashMagicで書き込むというのが当初のプランでしたが、FlashMagicが汎用ツールのためCPUのIDチェックなど手厚く処理します。このため、時々書き込めなかったりします。
ISPでの書き込み手順は公開されているので、こうなったら自分で作ることもできます。
ISP書き込みはすでに作ったことがあるので問題ないでしょう。



ELFファイルフォーマット:







2018年6月2日土曜日

IchigoBoy作りました

 GameBoyは有名なポケットゲーム機です。

これのオマージュとでもいうのでしょうか、Arduinoを使ったこんなのもあります。
自分でもゲームがプログラムできるというのも興味を惹かれます。
https://www.switch-science.com/catalog/2880/

そこで、自分でも作ってみました。

外観



コンセプト

電池で動く携帯ゲーム機を作る
IchigoJam V1.2で装備されたMobileモード(128x64 LCD表示)を使う。
IchigoJamとしても動く。<<テレビとキーボードとROMカセットが使える。

特徴


  • 単四電池3本動作
  • IchigoJam BASIC搭載で 小学生でも自分でプログラムできる。
    • IchigoJamT基板は別途ご用意ください。
  • DIP部品を使っているので、自分で半田付けして組立できる。
  • 128x64ドット モノクロ液晶搭載
  • 3V動作キーボードなら電池で使えます。電池が新しければ5Vキーボードでも消費電流が少なければうごきます。試してみてください。
  • IchigoJamに通常の5Vをつないでも使えます。キーボード(5V品)を使う時や電池がないときはこれで。
  • TXD、RXDなど通信用信号もソケットに出してあります。

回路



回路を工夫してありタクトスイッチを押すと、IN(番号)=1になります。

  • これでプログラムの移植が簡単になります。
  • OUTで何かを動かすとき面白い動作ができますが、これは後日書きます。

ソフトウエア

STARTキーを押しながら電源ONで起動するメニュープログラムを用意しています。メニューでプログラムを選んでプログラムスタートできます。


1 'Mobile Menu
5 IF IN(9)=0:GOTO5
10 L=0:I=1
20 SWITCH1:CLS:UART1
30 OUT1,-1:OUT2,-1:OUT3,-1:OUT4,-1
40 OUT5,-1:OUT6,-1
50 CLS:?"***************"
100 FILESL,L+3
110 ?"***************"
120 ? CHR$(226);" ";CHR$(227);" & START";
130 LC0,I:?CHR$(225);
200 IF IN(5)=1: GOTO 300
210 IF IN(8)=1: GOTO 400
220 IF IN(9)=0: GOTO 500
230 GOTO200
300 IF I>1:I=I-1:GOTO 600
310 IF L>4:L=L-4
320 IF L<100: L=0
330 GOTO 600
400 IF I<4:i=I+1:GOTO 600
410 IF L=0:L=100:GOTO 600
420 IF L<227:L=L+4:GOTO 600
430 GOTO 600
500 LRUN L+I-1
600 IF IN(5)=1:GOTO 600
610 IF IN(8)=1:GOTO 610
620 IF IN(9)=0:GOTO 620
630 GOTO 50

既にあるIchigoJamモバイル用のプログラムは、キーボードを読むためのIN()コマンドを書き換えるとIchigoBoyで動く筈です。プログラムを入力したらSAVE 0しておいてくださいね。

LINK

記事にしていただきました。くっくわしい。 ありがとうございます。m(_ _)m
http://fukuno.jig.jp/2138

作ってみた個人的感想など

PCN三重さんで少量販売頂きました。
色々コメントも頂いていますので、今後の参考にします。ありがとうございました。
7月の大阪南港メイカーズバザール2018で展示即売予定です。

反応もよく、ゲーム機で終わらせるのはもったいない感じです。ROMソケットに出ているIN3などを使って制御端末や実験冶具製作にも使っています。BASICで簡単なプログラムで色々便利に使ってます。
こんなモノにも使ってみたい。

  • 自作CNCのコントローラ
  • 自作リフロー半田機の温度制御
  • ロボカー・Ichigoチョコのテスト器


2017年12月17日日曜日

GPD Pocket を改造しました

>> English Page

ご存じ、GPD Pocketですが、良くまとまっています。これにμSDカードスロットと生体認証の指紋リーダを追加しましたので、まとめておきます。

GPD PocketにμSDカードリーダと生体認証を追加改造

よくできた超小型PCなのですが、使ってみると3点ほど不満が。

SDカードリーダが欲しい

クラウドサーバでもいいのですが、使い慣れたSDがあると便利です

生体認証でロック解除がしたい。

パスワードや暗証番号は手間だし、見られる心配も気になります。

SIMで公衆回線でネットにつなげられるといいなあ。

これは、金属筐体なので難しそうで今後の課題にします。バッテリー寿命も気になるしね。当面はテザリングで我慢しましょう。

LINK 参考にさせて頂いたLINK

英語サイトですがRedditさんで早い時期から情報があります。
こちらは雑技工房さんで日本語サイトの改造記事です。
色々考えたのですが、結局雑技工房さんの記事と同じような内容になってます。

基本方針

キーボードユニットへのフレキ配線を横取りしてUSB2.0のハブにつなぎます。
電源もここからとります。バスパワーですね。
ハブのポートの一つをキーボードユニットにつなぎます。
マイクとスピーカの配線もここにあるので、それはそのままキーボードユニットにつなぎます。
以上で、USB2.が3ポートと5V電源が取れました。
そこに生体認証デバイスとuSDカードリーダをつなぎます。
ここで注意があります。uSDカードリーダの電源にuSDソケットのカード検出スイッチを入れておきます。こうしないと、Windowsのカードを抜く操作の後、SDを差し替えたとき認識してくれません。ソケットからSDを抜いたとき電源をきれば、再挿入で再認識してくれるわけです。

パーツなど

USBハブ:AitendoさんのUSBハブコントローラ基板 [M4-FE1.1S]
    4ポートのUSBハブです。3ポートを使っています。
水晶:ハブコントローラチップ用の12MHxの水晶を別途購入必要です。
生体認証デバイス。:AMAZONで購入。後で写真を挙げますので探してみてください。
SDカードリーダ:アキバで買ったUSBタイプのカードリーダを分解して基板を使いました。
FFCコネクタ:HIROSE[FH19C-10S-0.5SH]。基板高0.9mmです。高いと入りません。
延長基板:SANHAYATO[ICB-067]0.5mmのピッチ変換基板で厚さ0.1mmです。切って使います。
FFC: メーカー等不明の0.5mmフレキケーブル。引き出しの奥で眠ってました。
SDカードソケット;HIROSE製[DM3AT-SF-PEJM5] Akitukiさんで購入。飛び出し量が多く良いです。これをSDカードリーダに後点けで載せています。
他に配線材料や両面テープ、カプトンテープを使いました。

他に、半田付け必要です。筐体加工にはCNCまたはフライス盤があるといいです。ボール盤でもできるかも。

ギャラリー

完成するとこうなります。

uSDカードがここまで出るので抜き差しが簡単にできます。


筐体を削ります。これが一番の難関です。自作のCNCで加工しました。


中から見るとこうなります。久々の加工でちょっと失敗っぽい。



回路は試作と動作確認から始めます。USBハブの試験回路です。
これはハブ基板にケーブルを着けた試験回路です。

各パーツが確認できたので、並べてみます。収まりよし!
左から、生体認証デバイスーuSDカードリーダーUSBハブ基板です。

SDカードの収まり確認です。かなり出るので抜きやすそう。

HUB基板はこの方向の実装がよさそうです。

延長用基板を載せて長さを決めます。
基板はサンハヤトの0.1mm厚のリジッド基板をハサミで切ってつくりました。

FPCコネクタを半田付けしました。


USBハブにアクセスランプを点けるための配線引き出しですが、結局使っていません。

配線開始。

延長基板をつけて。

収めてみます。



生体認証デバイスです。以下分解手順です。2か所の爪をドリルアウトします。

すると金属枠が抜けます。


樹脂はゴリゴリとニッパー等で切ります。中身を傷めないように注意して。

分解完了。センサーのフレキをちぎらないように。

GPD Pocketのフレキですが抜き差し寿命があります。
抜き差しを繰り返すとこんな感じでフレキのパターンの接触部がへこみます。
こうなると接触不良を起こします。
そんな時は、先端を少しだけ切り取ると新しい部分が接触するので修理できます。

 さいごに

基本的には雑技工房さんと同じ改造です。
FFCが手持ちを使ったのですが、同じものは見つかりませんでした。残念ながら入手先不明です。
改造は自己責任でお願いします。

GPD Pocket [ Adding uSD & Biometric device]

GPD pocket is a good mobile PC, and I like very much to use. But I wanted to add uSD card reader and Biometric device.

Adding Micro SD Card Reader & Biometric Device

Soon I stareted to use my GPD Pocket, I thought it's a good idea to add some feature on it.

Micro SD Card Reader

Biometric Device (Finger Print Reader) for Quick & Secure Log-in

SIM card might be convenient, but leave this on wish list.

LINK

Reddit
雑技工房さんで日本語サイトの改造記事: Page is written in Japanese. My project became almost same as this page.

Basic Idea

Since Keyboard unit of Pocket uses USB 2. interface, 4 port USB hub can be inserted.
Now 3 ports and 5V power are avilable to add some devices.
I added a Finger print reader and a uSD card reader. I boughr compact USB devices and pick PCBs inside of them. Photos of the Finger print reader are posted later on this page.
It is one caution for a uSD card reader. I insert Card Detect Switch to Power line of SD reader. Without this after remove a SD card, windows cannot recognize new inserted card.

Parts

USB hub: Sold at Aitendo[M4-FE1.1S] PC Board type small size USB hub.
X'Tal: HUB controller reqire 12MHx X'Tal but not included.
Biometric Device: See photos later, I bought this at Amazon.
uSD Card Reader: USB Type compact card reader.
FFC Connector:HIROSE[FH19C-10S-0.5SH]. 0.9mm high. This low hight is requird.
Extention PCB:SANHAYATO[ICB-067] 0.5mm to 2.54mm pitch convert PCB. This is ridgit 0.1mmm thick PCB.
FFC or FPC: 0.5mm 10 way FFC. I found this in my parts box. No other information is avilable.
uSD Card Soket:HIROSE[DM3AT-SF-PEJM5] Push on, push off type.
Other: Double stickey tape, Capton tape, wire etc.

You need milling machine such as CNC. Drill press could be used, (but I'm not sure.)

Photos

Final look

uSD card out this position. It's easy to remove it.


Most dangerous step. Mill holes.

Hole from inside. It's not a perfect.



Circuit sould be tested before millimg GPD Pocket.
This is test fixture of USB hub.

Try to locate all component in GPB Pocket.
As you can see, it's enough space.
From Left- Biometric Device, SD Reader, USB hub.

SD card OFF POSITON.

It's better to flip USB hub.

Locate extention PCB.
I cut PCB with Scissors.

Locate FFC and FFC Soket


Wire out for indicater LED, but not used.

Start wiring.

Adding extention PCB.

All fit inside.



Biometric device. Finger print reader.
At first, drill out stopper.

Metal frame can be removed.


Cut plastic carefully.

Done this part.

Flex cable of GPD Pocket has very short remove life.
After 10 times on/off cycle, FFC is dimpled at contact position like this photo.
In this situation, the keyboard stop working.
In order to repair, you cut top of PCB which moves the contact point.

 At The End

Basics of this project is same as the Japanese Link.
I cannot give information about FFC. Please fined one yourself.

Please remodel it at your own risk.





ラズパイの電源をつくって見た話

まえおき

通称ラズパイのRaspberry Pi 3 Model Bは大電流が必要とされています。2.5A とか3Aのアダプタが必要と言われていますが、入手難で大きい。

実際そんなに要るのか半信半疑でしたが、スイッチサイエンスさんが詳しい実験データを公開されていて実態が見えました。データはここからどうぞ。


必要な電源容量

Raspberry Pi 3 Model Bは本体だけなら安定な5V1Aあれば動く。

なぜ2.5A電源が必要とされるのか?

それは、使う電源がUSB充電用アダプタのため、消費電流が増えると電圧が下がってくるからです。充電器は電圧の下がり具合を見て電源の電流供給能力を判断するのですね。つまり公称2.5A電源でも1Aを超えてくると電圧が下がってしまいラズパイの必要な電圧が出ないのです。下がった電圧でも充電には十分なので充電用電源としてはOKなんですね。
というのが上に書いたスイッチサイエンスさんの実験結果を読んで考えたことです。

電源を作ってみた


12→5V レギュレータ。
左が12V入力で上と右が5V出力です


それならば、電流が増えても電圧が下がらない電源ならラズパイは動くか?ということですが、作ってみたところ動きました。
使ったのは、秋月さんで買った12V1Aのアダプタと12V→5Vのステップダウンレギュレータです。
計算上の電流容量は2.4A/5Vになりますが、これでラズパイ+7”モニタ、+キーボードをつないで動作させることができました。すべてつないでも電圧は下がっていません。

注意:この電源は、電流が増えても電圧が下がりませんので充電用には使わないほうが良いと思われます。電圧が下がらないので充電器が電流容量を検知できない可能性があるためです。