福野泰介の一日一創 - create every day

ver 1.3、ちょっとメモリの使い方を誤り、ver 1.2.3 で動いていた数式で動かない問題が発覚。

P=PEEK([0]) Complex expression

このエラーは、数式が複雑すぎる時にでるエラー。

例えば 3+(2*5) という計算をする場合、
1. まず3と、足し算する必要あり、と覚える
2. 括弧があるので、さらに2と、かけ算する必要あり、と追加で覚える
3. 5とかけ算し、10と覚える
4. 覚えていた3と足し算し、答は13
という感じのプログラムが IchigoJam BASIC というOS(オーエス、基本ソフト)の中で動いてます。

計算と記憶が得意なコンピューターくんですが、無限に記憶できるわけではありません。
IchigoJamで使える容量は、4kbyte、32768bit。3万個ちょっとの0か1のデータを記憶できます。
(4kbyte = 4 x 1024byte = 4096byte = 4098 x 8bit = 32768bit)

メモリをどのように使っているか表す図をメモリマップといいます。
IchigoJam BASIC on LPC1114 RAM メモリマップ (ver 1.3 beta 6)


計算式の中で、後から使うものはどんどんスタックに積んで、一時的に覚えていきます。
LPC1114では、スタックを末尾のアドレス 10000FDF から、小さくなる方向に向かって使っていきます。

一次記憶がどんどん溜まっていくと・・・、そう、この図でいうとI2Cバッファ、コマンドラインバッファの順に浸食していってしまうのです。 ちょっといいCPUだと、このような浸食を防ぐための仕組みがありますが、シンプルなCPU LPC1114にはありません。

そこで計算途中にスタックの今使ってるポイントをチェックして、溢れそうなら Complex expression エラーを出すように作ってあるわけです。 ver 1.3.0 では、IchigoJam BASIC OS用変数領域がちょっと大きく、そのメモリ位置をスタックのすぐ上にしてしまったことで、フリーズリスクが高まってしまっていました。 (ARM 関数呼び出し引数の渡し方 - Qiita

こちら、ver 1.3 beta 6は、上記のようにOS用のメモリの使用量をちょっと削減し、物理メモリの先頭に配置、万が一のスタック溢れにも最悪I2Cバッファやコマンドラインバッファの破壊までにとどめて、フリーズすることがある不具合を解消しました。
IchigoJam 1.3b06.zip

このようにメモリギリギリの戦いにはArmマシン語を含むコンピューターそのものの知識は欠かせません。興味がでた方、こちらからどうぞ!
Armマシン語入門

IchigoJamで活躍、100円だけど1秒に5000万回も計算しちゃうCPU、NXP社のLPC1114FN28/FDH28。

32KBのFlashROMという書き換えも可能な記憶装置を内蔵していて、そこにIchigoJam BASICというOSを書き込むことで、IchigoJamとして動いています。(別のOS、IchigoLatteを入れるとJavaScriptが使えます!)

通常は、FlashROMに書き込むプログラムをC言語を使って開発しますが、Armマシン語を使って最小の開発環境づくりに挑戦、一応エルチカすることに成功!

FlashROMの先頭、アドレス0番から4byteにスタックの初期アドレス、その後にリセット時(電源投入時)に実行するアドレス、更に様々な割込に対応するアドレスが続く、192byteのvectorsという領域があり、その後プログラムが通常続きます。

リセット時以降、割込を使わなければその領域もプログラムに使っても大丈夫かも?ということで、実験してみました。

DATA L #10001000 DATA L #00000009 R1=[@GPIO1DIR]L R0=`100000 [R1]=R0 R1=[@LED]L [R1]L=R0 GOTO 0 @GPIO1DIR DATA L #50018000 @LED ' PIO1_5 DATA L #50010080

RAMは#10000000からの4KBなので、後ろから順に使うスタックをその一番後ろ、#10001000と設定します(ISPコマンドを使う場合は32byte空けましょう)。

続いての#9は、その後アドレス8から始まるプログラムの先頭にマシン語のThumb-2として呼び出すことを示すために1を足した、アドレス9を指定します。

以後は、通常通りマシン語でプログラムを作りますが、起動直後LEDが接続されているPIO1_5は入力になっているので、GPIO1DIRを使って出力に切り替えるコードを追加します。 これでLEDを光らせるプログラムができました!

リセットされた時に呼び出されるプログラムは帰る場所がないので、終了はRETではなくGOTO 0と無限ループにしておきます。

asm15 assemblerにhex出力機能を追加したので、hex fileとして出力したものを、lpc21ispなどを使って書き込むと点灯成功!

:100000000010001009000000024920200870024979 :0C0010000860FEE70080015080000150F5 :00000001FF

わずか28byteととってもコンパクトに開発できるので、IchigoJamを開発機として、マイコンや別のIchigoJamに書き込んで使うこともできそうです!

せっかくなのでマシン語でエルチカしてみましょう。もっとすっきり書けそうですが、何かの不具合で短くするとうまくいかない点は要調査です。(誤り発覚、最小は32byteでした

DATA L #10001000 DATA L #00000009 R1=[@GPIO1DIR]L R0=`100000 [R1]=R0 R2=0 R1=[@LED]L @LOOP [R1]L=R0 R7=[@WAITCNT]L R6=R7 R6-=1 IF !0 GOTO -1 R2=0 R1=[@LED]L [R1]L=R2 R6=R7 R6-=1 IF !0 GOTO -1 GOTO @LOOP @GPIO1DIR DATA L #50018000 @LED ' PIO1_5 DATA L #50010080 @WAITCNT DATA L 3000000

クロックは初期設定時は内蔵IRCを使った12MHz動作なので、1回4cycleかかるループを、300万回まわすことで、1秒置き点滅が実現できました!

LPC1114ベアメタルなエルチカ!アフリカ上空にて

普通の開発環境を一切使うことなく、マイコン開発ができたので、次は、IchigoJamだけで行うマイコン開発に挑戦です!

IchigoJam-FANにて、IchigoJamの拡張版にほしいものを大募集した結果、たくさんのご要望いただきました!

1. プログラム領域拡大 112票
2. HDMI 69票
3. USBキーボード(HIDサポート) 69票
4. カラー化 30票
5. キーボードUS/JP切替 29票
6. 浮動小数点 25票
7. 長い変数名 17票
8. グラフィック描画機能 16票
9. バッテリーバックアップの時計 15票
10. ネットワーク 15票
*アンケートよりトップ10を抜粋、複数回答あり

断トツナンバーワンだった、プログラム領域拡大。
ちょっといいCPU「NXP LPC1114FHN33/333」を使って作ってみました。

IchigoJam 1.3beta!?(仮称)

プログラムサイズ拡大:1KB → 4KB
配列サイズ拡大:102 → 614

いつものIchigoJamへのバージョンアップはできません。
ROMが56KB以上、RAMが8KB以上のLPC1114またはLPC1115へ書き込んで使ってみてください。
LPC11Uシリーズは、GPIOの扱いなどに互換性がなく未対応です。

links
- IchigoJam-FAN (ファイルからβ版ファームウェアダウンロード可能)
- LPC1115評価ボード (未確認ですがきっと動くはず)

I2C is good protocol to connect devices just 2 wires (except power and GND).
IchigoJam has commands I2CR and I2CW to access via I2C.
I try to change for the future version.

This is one of application to connect Wii Nunchuck, but I couldn't get value yet...

10 POKE#700,#40,0,0,0,0,0,0,0 20 IF I2CW(#52,#700,2,#700,0) ERR 30 @LOOP 50 IF I2CW(#52,#701,1,#700,0) ERR 70 IF I2CR(#52,#700,0,#702,6) ERR 80 FOR I=0 TO 5:?PEEK(#702+I);" ";:NEXT:? 90 WAIT 30 100 GOTO @LOOP

I have a plan to be I2CR/I2CW command simply.
Try the beta version firmware on IchigoJam-FAN.

*I did it! It's works!

links
- “WiiChuck” Wii Nunchuck Adapter Available – todbot blog
- Wiiヌンチャクの動作確認しました: 猫にコ・ン・バ・ン・ワ

Fukui KOSEN is my alma meter and there are 57 KOSEN in Japan.
Japan exported KOSEN to Mongolia already! I went there 2 years ago. (report)


Last year, 2 Japanese people in charged of Mongol KOSEN got the conferment from Mongolia president. Congratulations!
"西山明彦先生、 モンゴル国「ナイラムダル勲章」を受勲 !! | モンゴルに日本式高専を創る支援の会"


In that celebration party connected to Mongol KOSEN!


I update IchigoJam ap (IchigoJam as PC/Mac application) to support Mongolia.
You can download beta version at IchigoJam-FAN.
And I posted to IchigoJam club at Mongol KOSEN.


IchigoJam for Monglia 1.2b37 firmware supported the mini LCD monitor!
Let's challenge to make it! (for Mongol KOSEN students)
"schematic of LCD shield for IchigoJam"


Assemblage at Akihabara our first IchigoJam workshop on September 2014.
This is the beginning.


This day I enjoyed soldering with many kids!

Kids and KOSEN are our Hope!

links
- モンゴルに日本式高専を創る支援の会 - IchigoJam report at Mongolia

Happy New Year!

I updated IchigoJam beta firmware. You can download on IchigoJam-FAN.
Updated command: VIDEO n, SWITCH(0:TV/1:LCD)
VIDEO 0: video off
VIDEO 1: video on (32x24)
VIDEO 2: video on (32x24) inverted
VIDEO 3: video on (16x12)
VIDEO 4: video on (16x12) inverted
VIDEO 5: video on (8x6)
VIDEO 6: video on (8x6) inverted
VIDEO 7: video on (4x3)
VIDEO 8: video on (4x3) inverted

※VIDEO4 on IchigoJam 1.2 beta 34


Web for all!

Programming for all kids!
"PCN Kids Programming Contest 2016 in Winter | PCN Programming club network"

links
- Kid's PC IchigoJam - first programmable computer ($15)

松田さん(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 プリント基板ハーフキットT(表面実装CPUはんだづけ済み)
IchigoJam プリント基板完全組立キット T(上級者向け、表面実装に挑戦!)

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

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


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


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


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


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


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

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

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