松田さん(PCN代表)開発、RAM4KBのコンピューター、LPC1114で動く極小JavaScriptエンジン搭載OS「IchigoLatte」が、いよいよ製品版に向けたベータ版完成とのこと。 IchigoJam Tと同様、小さなコンピューターFDH28に替わって空いたスペースに搭載された、ユニバーサル基板パターン「Latteキャンバス」が特徴!


IchigoJam同様、1MbitのEEPROMを外部保存として使えるので、くっつけてみます。


接続回路を元に、どうつなげて、はんだづけするかあれこれ考えるパズルっぽさが楽しい。


I2C用のプルアップは2.4kΩ、SCL、SDAのピン配置からこのようなつくりにしてみました。ちょっと面倒な被覆ジャンパーは1本に抑えられました。


無事、起動!コンソールの ls コマンドで一覧が取得できます。

サンプルで動かしたのは古籏一浩さんの「IchigoLatteを楽しもう」より「ラスタースクロールもどき」改(sin32→sin8)


emerge+さんの「アクリルケース for IchigoJam T」にも似合います(ボタン用パーツはつけていません)


アクリルケースの保護シートは、しばらく水につけておくとするするとはがれます!


コンピューターを操るための言葉、プログラミング言語は、時々刻々と進化します。 IchigoJamで入門言語BASICを学んだあとは、ちょっと大人なOS「IchigoLatte」でJavaScript入門もオススメです!
(回路とコンピューターは共通なので、OSを入れ替えればIchigoJam←→IchigoLatte、両方使えます)

BASICにJavaScriptに使いこなせるようなところを見せつけて、本格的なパソコンをゲットしよう!

Lenovo Japan留目社長Hana道場で未来談義。9/12はいよいよ「鯖江市地域活性化プランコンテスト」公開プレゼンテーション。 留目さんとは審査員でもご一緒します!ITのまち鯖江、次の一歩につながるプランは登場なるか!?(photo by Miki Takebe

会場は鯖江市誠照寺USTアリ、13時からスタート

参考リンク
- JavaScriptで電子工作!フリーな工作エリア「Latteキャンバス」を設けた製品版IchigoL... - about yrm
- IchigoLatte

省メモリ実装のためPS/2キーボードにのみ対応としていた、IchigoJam。
USBホスト機能がついたコンピューターを使うと高くなってしまうので、ソフトウェアでなんとかする実験。
参考図書「改訂新版 USBハード&ソフト開発のすべて

USB1.1の規格では速度は2種類、12Mbpsのフルスピードモードと、1.5Mbpsのロースピードモード。 USBキーボードは遅い方なので、48MHzで動かしているCPU、LPC1114では1.5Mbpsの1信号時間に32命令(=48/1.5)実行できる計算。

常に信号を待たないといけないUSBデバイス側と違って、USBホスト(パソコン側)は、ホスト側の都合で信号が送れるのでなんとかなりそうです。


IchigoJamに接続したPS/2、USB両対応のキーボードをUSBキーボードとして接続して、キー入力した際の信号をオシロスコープでみた様子!

あとは、この信号をデコードすれば晴れてUSBキーボード対応ともできるはず!
(ただし、実装にメモリを結構使ってしまうので保存領域は最悪4つから1つに減らさなくてはいけないかも・・・)


こちらは送信信号と受信信号が混ざってしまった失敗中の様子。
オシロスコープ、便利!

大きくてかわいいNXP社製LPC1114FN28に加えて、新しいIchigoJam基板でサポート予定のLPC1114FDH28
違いは電子部品用語でパッケージと呼ばれる端子の形状です。

LPC1114FN28は、DIP(Dual Inline Package)といって、ユニバーサル基板と同じ、2.54mm(1/10インチ)間隔で並ぶ端子がICの両面について、下に刺さる形状になったパッケージ。工作しやすく見た目もかわいいのですが、大きさは速度とコストの大敵です。

LPC1114FDH28のパッケージは、TSSOP(Thin Shrink Small Outeline Package)という、穴の空いていないランド(はんだづけする部分)用のパッケージSOP(Small Outline Package)の端子幅を0.65mmまで狭くしたというもの。細かいですが、なんとか手ではんだづけ可能です。

最近の端子が多くて小さいICは、BGA(Ball Grid Array)というグリッド状に並んだピンが完全に基板から見えないところに配線してあるパッケージも多いです。こうなると手ではんだづけすることは不可能、クリームはんだ、ステンシル、ホットプレートなどを使った別の方法ではんだづけする必要があります。

それでは、新しいIchigoJamで対応する、TSSOPのLPC1114FDH28をはんだづけ方法を紹介します。フラックス、マスキングテープ(またはセロテープなど)、はんだ吸い取り線を用意しましょう。

1. CPUの上を表す印を確認して、テープで真ん中、端子がランドにぴったり乗るように固定

2. フラックスを端子とランドに塗る
3. はんだを少量はんだごてにつけて、すばやく端子をなぞるようにはんだづけ(フラックスのおかげで端子とランドに吸い付きます)
4. くっついてしまった端子同士を、はんだ吸い取り線できれいに吸い取ります

5. 片側ができたらテープをはがして、基板をひっくり返し、反対側も同様に

6. テスターを使ってチェックその1、隣り合う端子がつながっちゃっていないか確認(音がなったらNG、はんだを吸い取りましょう)

7. テスターを使ってチェックその2、配線部本とCPUの端子がつながっているか確認(今度は音がならなかったらNG、もう一度はんだづけしましょう)

8. 確認できたらCPUのはんだづけは完了!あとは普通に組み立てます。ICソケットは、はんだづけしなくてもOK

9. ICソケットにIchigoJamシールを貼っておきましょう!

こちらのブログ「LPC1114を600mil→300milにする動画を投稿しました。 ( 工学 ) - チカラの技術 - Yahoo!ブログ」のLPC1114FN28の内部写真にあるように、中身はスカスカ、現代のコンピューターの小ささを体感できます。

はじめてのはんだづけに今回の表面実装はちょっと難易度が高すぎるので、LPC1114FDH28の実装済み版も用意される見込みです。発売まで、もうしばらくお待ち下さい。
IchigoJam プリント基板ハーフキット S(表面実装CPUはんだづけ済み)
IchigoJam プリント基板完全組立キット S(上級者向け、表面実装に挑戦!)
2020-05-12 追記 T → S

IchigoJamで使っているお気に入りのCPU、NXP社の「LPC1114FN28」、最近のCPUでは珍しいDIP(Dual inline package)といって、ピン間が広く、はんだづけがしやすいのが特徴のステキなコンピューターです。

実は、このCPU、より小さな組み込み用途に使える、同じ機能の小型版「LPC1114FDH28」というものがあります。 この両方のCPUに対応した、IchigoJamの新基板を準備中です。


真ん中がおなじみ LPC1114FN28、右が小型版 LPC1114FDH28、ピン数も機能も速さも同じ
左に見えるのが両方のCPUに対応した、新プリント基板β


トレードマークのピン配置が分かりやすいシールも、小型版にICソケットを重ねて、シールを貼れば大丈夫という発見!


この変更と合わせてより組み立てやすくなるよう調整中です。
(表面実装(SMD)の小型CPUは手ではんだづけするのが難しいので、プリント基板に実装した状態での出荷を想定しています)


全部自分で組み立てできる、従来のCPU版はこのような部品セットになります
(ビデオ端子は黄色になります)


新基板の登場、お楽しみに!

参考リンク
- こどもパソコンIchigoJam

IchigoJam ver 1.0 リリースから半年、Facebookグループ「IchigoJam-FAN」にてβ版を重ね、ついにver1.1のリリースです。 β版をお使いいただいた方々、ご意見いただいた方々、ありがとうございました!

ver1.1ファームウェアのダウンロードは、こちら「ichigojam-1.1.1.zip

LPC1114の32KBのFlashROM中、8KBはプログラム保存に使うため、残りの24KB。自ずと限界もありますが、あまり複雑にはしたくないこどもパソコンIchigoJamなので、今回の追加コマンドは9つだけです。 下記、ざっと紹介します。

ver1.1 新コマンド 9つ! (PWM/UART/SRND/LANG/DEC$/STOP/CONT/LINE/RESET)一覧

PWM n,m,l (サーボモーターの制御や、SOUNDに加えて和音に使える目玉機能!)
パルス出力 n:ポート2〜5 m:周期20msec中0.01msec単位でHIGH時間指定0-2000
サーボ用100-200前後 l:0.01msec単位の周期指定(省略可能)
PWMとは、Pulse Width Modulation、電圧が一定時間だけ高い状態を繰り返す機能です。
周期指定lは、ポート2〜4とポート5の2系統使えます。つまり、音声として使う場合は2音程。

UART n,m (Universal Asynchronous Receiver Transmitter、いわゆるシリアル通信)
シリアル出力を制御します n:出力制御、m:入力制御 (n=0:出力なし、1:PRINTのみ、2:PRINT/LC/CLS/SCROLL(初期値)、3:改行\r\n変換モード) (m=0:入力受付ない、1:入力を受け付ける(初期値)、2:ESC無効モード)
起動直後、UART1,1となっていて、PRINT(または、?)で出力した文字はそのままTXDから送信され、RXDからコードを入力することでキーボード代わりになります。
(デフォルト通信速度は115200bps、8bit、パリティなし、ストップビット1bit)

SRND n (乱数初期化、ランダマイズ)
RND(n)による乱数列を初期化します。指定した数によって、乱数列が固定されます。
ランダムに面を生成するゲームに使うと、毎回決まったステージを生成できて便利です。

LANG() (言語種を返す)
今回の目玉、モンゴル語対応!
モンゴルで使われるキリル文字は、カタカナの代わりに入っています。
その状態をプログラムで取得するためのコマンドです。
(1:カタカナ&ローマ字入力、2:キリル文字&モンゴル語配列)

DEC$(n,m) 10進数の桁数指定付き表示
PRINT文でいままで使えた、16進数を表示する HEX$((n,m) や、2進数を表示する BIN$(n,m) に加えて準備。
スコア表示なので桁数を揃えたい時に使ってください。

STOP プログラムを中断
ver1.1からESCキーで停止した際、停止した行数を Break in 10 などと表示されるようにしました。
STOPコマンドはこの状態をプログラムで作ることができます。デバッグ(プログラムの間違い探し)にどうぞ!

CONT 実行中または中断した行を再度実行する
SOTPやESCで停止した行から再開します。行の先頭から実行されるので注意!
裏ワザ的ですが、プログラム中で使うことで、現在実行中の行を頭から実行するために使えます。
下記のように書くとキー入力待ちになります。

10 IF INKEY()=0 CONT

LINE() 実行中の行番号を返す(非実行中は0)
IchigoJamのGOTOやGOSUBは、変数が使えます。現在行からの差分で飛ばすために、下記のように書くと便利です。

10 GOTO LINE()+n*10

RESET リセット(電源入れ直し相当)
電源を入れ直しをソフトウェア的に実行します。保存していないプログラムは消えてしまうので注意!

高専教育にもじわじわと広がっている、IchigoJam。
今回は高専プロコンでNICT賞獲得したチームのいる、東京高専へ。

「時代が高専に追いついた!? ものづくり起業と次世代Web」


ものつくる高専生、自分の友だちのちょっとした不満をステキ道具をつくって解決しちゃおう!


起業家甲子園に向けて打ち合わせ終了!クリスマスツリーと先生を囲んで!
小学校でのタブレットを使った教育環境を防犯防災教育から変える!!
「ホップ!ステップ!マップ!」のオリジナルシャツもゲット!


W3C日本ミーティングでは、ウェブアクセシビリティが熱いという新情報!
障害のある人でも、こどもでも、おじいちゃんおばあちゃんでも、誰にでも優しいWebを目指します。
オープンデータによる情報提供と、利用者にぴったりなアプリという分離も進むことでしょう。

IchigoJam BASICには、自分で自身の電源を切るSLEEPコマンドがあります(LPC1114 deep power down モードへ移行)。 その後、IchigoJamの内蔵ボタンが押されるか、BTNピンがGNDになった時に復帰し、0番のプログラムを自動実行します。

図書館空席監視システム、sabotaの「つくえなう」のようにずっと座席の状態を監視するシステムの場合、電源が入りっぱなしは電池がもったいないので、定期的に実行させたいところです。 残念なことにLPC1114には、休止状態から一定時間後に起動する機能がないため、80円マイコンLPC810を使って実現します。 (追記、IchigoJam ver 1.2 では、低電力スリープモードが搭載されました)


LPC810の電源をIchigoJamからもらい(VCCとGND)、WAKEUP用に1ピンIchigoJamのBTNピンへつなぎます。
LPC810は1分おきに休止状態から起きて、100msecだけWAKEUPピンをGNDにし、また寝ます。
IchigoJamのプログラム0には必要な仕事をしたらまたSLEEPするようにしておけば、できあがり!
無線LANと組み合わせて省エネIoT化するのに便利です。
(LPC810用プログラム:GitHub - taisukef/wakeupeverymin


ISPピンとRESETピンを自動制御できるようにした開発環境(約2年前から進化しました

自転車探しツールとして活躍したLPC810、コンパクトなのでC言語入門にも良さそうです。
Armマシン語をハンドアセンブルして、IchigoJamから直接書き込めちゃうと楽しいかも!?

マシン語の体験が終わったので、高速に足し算するプログラムをつくってみましょう!

プログラムをひとつひとつマシン語対応表を見て、2進数列にして打ち込んでいくことをハンドアセンブルといいます。手(ハンド)で組み立てる(アセンブル)ので、ハンドアセンブル、てづくりですねっ!

IchigoJamのマシン語では、レジスタというBASICで使う変数のようなものが使えます(ひとまず安全に使えるのは、R0-R3の4つ)。レジスタに値をいれたり、レジスタ同士で計算して、その結果によって分岐(BASICでいうGOTO)することで、プログラムを組み立てます。

まずは、指定した数字までを足し算するマシン語プログラムをつくってみます。
BASICから渡される数は、レジスタR0に入っていて、RETした時に同じくレジスタR0に入っている数がUSRコマンドの値となります。

まずは実験 R0=R0+1 をハンドアセンブルしてみましょう。
下記の表から、演算の一番上 00110 が該当します。Rd = R0 なので、0を2進数3桁で表す 000、足す値は 1 を2進数8桁で表す 00000001
これを全部くっつけると
0011000000000001
という16bitのマシン語ができあがります。
マシン語プログラムからBASICへ戻る、分岐内にある RET 0100011101110000 を付け加えて、前回やったように上位8bitと下位8bitを入れ替えて書き込みます。

POKE #700,`00000001,`00110000,`01110000,`01000111 ?USR(#700,10) 11

では、繰り返し計算させてみます。

R1=0 R1=R1+R0 R0=R0-1 IF !0 GOTO -2 (計算結果が0でなければ2つ前の命令にジャンプ!) R0=R1 RET

これをハンドアセンブルすると...

00100 001 00000000 (R1=0) 0001100 001 000 001 (R1=R1+R0) 00111 000 00000001 (R0=R0-1, ※0001111 001 000 000 でもok) 11010001 11111100 (指定の-2から更に-2した-4の2進数表現256-4=252を使う) 0100011000 001 000 (R0=R1) 0100011101110000 (RET)

IchigoJamに書き込み、実行してみます。

POKE #700,`00000000,`00100001 POKE #702,`01000001,`00011000 POKE #704,`00000001,`00111000 POKE #706,`11111100,`11010001 POKE #708,`00001000,`01000110 POKE #70A,`01110000,`01000111 ?USR(#700,10) 55 ?USR(#700,100) 5050

動きました!

ミッション1. BASICで同じようなプログラムをつくって速度を比べてみましょう
ミッション2. 階乗(指定した値まで掛け算する 3の階乗=1*2*3)するマシン語プログラムをつくってみましょう

IchigoJamで使えるマシン語表(基本編)

※GOTOに指定する値は、飛ばしたい差分から更に-2した数を指定する
負の数は補数表現(256を足した数、-1 = 255、-2 = 254・・・)を使用する
命令2コ前に飛ばしたいとき252、3コ前の時251・・・

IchigoJamのCPU、NXP社のLPC1114FN28は、Arm社のCortex-M0をベースに作られています。Cortex-M0で動くマシン語が、16bitが基本のシンプルで美しいArm Thumb-2命令セットです。

多くのスマホやタブレットでもArmアーキテクチャーが使われていて、この命令セットと互換性があります。つまり、Armマシン語をマスターすれば、超高速動作するiPhoneアプリを創ることができちゃうかも!?

- 連載、IchigoJamではじめる、Armマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法
12. レジスタ不足に上位レジスタとスタック操作
13. コンパイラはじめのいっぽ、EVAL実現法とマシン語生成
14. サイズを取るかスピードを取るか、割り算のアルゴリズムとマシン語実装
15. マシン語化で1万倍速!? セットで学ぶアルゴリズムとコンピューター

こどもに自分専用のパソコンを持ってもらいたい!

家庭用テレビと、よくあるスマホ用USB電源、ちょっと古いPS/2キーボードがあれば、1,500円でプログラミングの学習をスタートできるコンピューターIchigoJam(イチゴジャム)。 夏休み、たくさんのこどもがプログラミングを始め、ゲームや、新しい工作をしてくれました。

OSを書き換えられるIchigoJam、次のバージョンでは、工作の幅をぐっと広げるサーボモーター対応と併せて、学校やパソコンがある環境でのサポート機能を拡充を予定しています。 現状でも画面への出力と同時にシリアル出力、キーボード入力と併せてシリアルでの入力を受け付けるなど、限定的に使うことはできましたが、簡単なゲームであればシリアル通信経由でパソコンから行えるように改良中です。

シリアル通信のテストを兼ねて、手軽なシリアル通信の開発環境を探していたところ、Chromeのシリアル通信ライブラリ「chrome.serial」を発見。ひとまず基本的な通信実験ができたので、シリアルモニターアプリ「IchigoConsole」と名付け、ChromeAppに登録、公開してみました。


IchigoConsole - Chrome Web Store」

受信は止まりますが、切断しない状態で別途ファーム書き換えができるのでIchigoJam開発に便利でした。 ブラウザだけでシリアル通信ができる、chrome.serial、IchigoJamのバージョンアップするツールも作れるかも? mbed以上にお手軽な組み込み環境にもできそうな予感!

開発中のバージョン、Facebookグループ「IchigoJam-FAN」からお試しください!

外部クリスタルが標準搭載となったIchigoJam UIchigoJamは、I2Cサーボにも対応し、日常をオートメーション化する組み込みガジェット開発用にも便利に使いやすくなるようバージョンアップ中です。

CPU(NXP社LPC1114FN28)がICソケットで抜き差し可能になりました。 大きめのマイナスドライバーを隙間に差し込むと比較的簡単に取り外すことができます。 ファイル番号0に、プログラムを保存しておくと、BTNピンをGND接続で起動時に自動的に読み込まれ実行します。

その際、IchigoJam U用に書き込まれた外部クリスタル12MHz対応版の場合、クリスタルも別途付けておく必要がありましたが、 現在開発中の1.0.2β8では、外部クリスタルが付いてない時に、自動的に内蔵発振器を使って動作するように改良しました。 (開発中のファームウェアは、IchigoJam-FANのファイルからダウンロードできます)

IchigoJam-FANへ投稿いただいたWDT(ウォッチドッグタイマー)を使った方法を実装しました。
WDTとは、マイコンが自分自身がちゃんと動いていることを定期的に確認したり、自動的に再起動したりしてくれる便利な機能です。怪しいことが起きたら吠えて知らせてくれる、まさに番犬(=ウォッチドッグ)!

1. WDTによって再起動されたのであれば内蔵発振器で動かす

if (LPC_SYSCON->SYSRSTSTAT & (1 << 2)) {
	// IRC
} else {
	// try XTAL
}

2. 通常起動なら、WDTをまず動かす
int freqsel = 1 // 1:0.6MHz - 15:4.6MHz
int divsel = 64; // 2(fast) - 64(slow)
LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 15); // WDT on
LPC_SYSCON->PDRUNCFG &= ~(1 << 6) // WDT on
LPC_SYSCON->WDTOSCCTRL = (divsel / 2 - 1) | (freqsel << 5); // 1, 64 = 9.3kHz
LPC_SYSCON->WDTCLKDIV = 1;
LPC_SYSCON->WDTCLKSEL = 2; // WDT
LPC_SYSCON->WDTCLKUEN = 0;
LPC_SYSCON->WDTCLKUEN = 1;
LPC_WDT->MOD |= (1 << 0) | (1 << 1); // enable、auto reset
LPC_WDT->MOD &= ~(1 << 2) // clear timeout flg
LPC_WDT->TC = 0xff; // min 0xff
LPC_WDT->FEED = 0xaa;
LPC_WDT->FEED = 0x55;

3. 外部クリスタルに切り替える(外部クリスタルがついてないとWDTが自動的に再起動して1へ)
LPC_SYSCON->SYSPLLCLKSEL = 1; // use XTAL
LPC_SYSCON->SYSPLLCLKUEN = 0;
LPC_SYSCON->SYSPLLCLKUEN = 1;

4. 外部クリスタルでちゃんと動いたら、WDTを止める
LPC_SYSCON->PDRUNCFG |= 1 << 6; // WDT off
LPC_SYSCON->SYSAHBCLKCTRL &= ~(1 << 15) // WDT off

日常とコンピューターがどんどん近づけていきましょう!


(こちら、IchigoJam Uより小型なIchigoJam、クリスタルを挿しても挿さなくても動いて便利!)

開発環境として使っているMacBook Airのメモリ(RAM)は4GB、記憶容量(SSD)は250GB。対するIchigoJamは、メモリ(RAM)4KBで100万分の1、記憶容量(Flash)32KBで780万分の1。コンピューターの進化に改めて感動する。

少しずつ改良を続けたIchigoJam、バージョン1.0.0を迎えるにあたって、ユーザーさんの意見(on Facebookグループ IchigoJam-FAN)も踏まえて改良中。いただいた、多くのご要望に応えるべく、懸案だったFlashへの書き込み方式を変更し、うまくいった!


(IchigoJam Flashの使い方が変わりました)

LPC1114FN28は、4KB単位でしか書き換えられないため、後半3スロットを使って3ファイルを書き込み可能としていましたが、2スロットに交互に書き出しする方式に切り替え、保存件数1件増、プログラムに使える1スロット、4KBを確保することに成功しました!

1byteの節約にしのぎを削った今までから思うと、4KB=4096byteは、とても広大な空間!
こどもパソコンIchigoJam バージョン1.0.0のリリース版、ご期待ください!

参考リンク
- こどもパソコンIchigoJam
- IchigoJam - jig.jpサービス

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS