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

LPC1114マシン語ベアメタル開発の魅力、プログラミングも世界共通語!

2017/10/21 23:55:00
#IchigoJam #asm 

たった28byteから始めるマシン語アプリ開発」でエルチカがうまくいかない謎が解けました。
4byteの数値が続くヘッダの8番目「Criterion for valid user code」の不備でした。(Thanks Amaganagi-san

ということで、LED1に相当するマシン語の最小コード改はこのコードを含めた32byteとなります。

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 @VALID_USER_CODE DATA L #FEDC5665

命令byteが20byteを超える場合は、次のように記述します。

DATA L #10001000 DATA L #00000021 DATA L 0,0,0,0,0 DATA L #EFFFEFDF R1=[@GPIO1DIR]L R0=`100000 [R1]L=R0 R2=0 R7=[@WAITCNT]L R1=[@LED]L @LOOP [R1]L=R0 R6=R7 R6-=1 IF !0 GOTO -1 [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

VALID_CODEは、hex(0x100000000-0x10001000-0x21) = 0xEFFFEFDF と計算します。
これで心置きなくマシン語でプログラミングできそうです!

夜中の帰国となり、大阪泊、オーストラリアから来ていたプログラマーの人に会いました。
LPC1114の開発に興味津々、C言語/マシン語でのベアメタル開発、楽しさを紹介!

世界に広がるPCN、音楽と同じようにプログラミングも世界共通語になりそうです!

大阪、道頓堀近く、HOLTEL HYAKU にて!

- 連載、IchigoJamではじめる、ARMマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
8. アセンブラを使って楽しよう
9. マシン語で高速SPI
10. マシン語を制するもの時間を制す
11. 画面をイチゴで埋め尽くす12の方法

100円マイコンを使い倒そう!たった28byteから始めるマシン語アプリ開発

2017/10/14 23:55:00
#IchigoJam #lpc1114 #maker 

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として呼び出すことを示すために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だけで行うマイコン開発に挑戦です!

大人のプログラミング入門、プログラミングをもっと身近に!iOS11とフルスクリーンに対応 IchigoJam web

2017/09/20 23:55:00
#js #IchigoJam 

子供のプログラミングはじめはゲームがテッパン。
一方、興味関心が多様化しているため、難しかった大人向け入門。

コンピューターとネットワークの低価格化によって一気に身近になった今こそオススメしたいのがこちら。
マイコンを使ったプログラミング入門!

マイコンとは、マイクロコンピューターの略で、大人には懐かしい炊飯器「マイコンジャー」などでおなじみの小さなコンピューター。 マイコンを使えば、身の回りのちょっとしたことを自動化できるので実用的!(例、ねこIoTイノシシIoT


こちら指先に見えるたくさん足が生えた四角いチップが、IchigoJamの心臓部のマイコン「NXP LPC1114」。
値段は約100円。たった100円のくせに秒間約5000万回の処理速度を誇ります。
* 値段はロットと為替次第@digikey / 190円で1コから購入可能 / はんだづけが用意な大きなパッケージは400円
* スマホ用CPUとして圧倒的シェアを持つ、ソフトバンクグループになったARM社の設計、NXP社製造のコンピューター

電気で動くコンピューター。その正体はとってもシンプル!
コンピューターは電源を入ると予め決められた通りに、その足につながった先の何かを自在にコントロールしたり、つながったセンターからON/OFFを受け取ったりするだけのものです。 どのように動かすかを決めているのが「プログラム」。「プログラム」を作ることを「プログラミング」といいます。

コンピューターの足にLEDをつないで光らせてみましょう。

LED1

100円の心臓部をもつIchigoJamなら、キーボードで打てば即、コントロールできます。

1秒光らせる

LED1:WAIT60:LED0

1分たって点滅してから消す

LED1:WAIT60*60:LED0:WAIT10:LED1:WAIT10:LED0

運動会のプログラムと同様、予め記憶する時は番号をつけます

1 LED1:WAIT60*60 2 LED0:WAIT10:LED1:WAIT10 3 LED0 RUN

ずっと点滅させるプログラム

1 LED1:WAIT30 2 LED0:WAIT30 3 GOTO1 RUN

変数を使ってだんだん速くしたり、センターからの入力を使って速さを変えたり自由自在。
コマンドをひとつ使えるだけで、表現の幅がどんどん広がるのが、プログラミングの楽しいところです。

単純なON/OFFですが、LEDの代わりにブザーをつなげば音がなり、モーターをつなげばモノが動き、スイッチにつなげば家電が動き、ネットにつなげばスマホへの通知や、遠く離れたモノをもコントロールもできるわけです。(ネット接続するIoT、sakura.ioなら月額61円〜

ちょっとやってみたくなった方、今お使いのパソコン上でお試しできます。
ChromeかSafariで「IchigoJam web」を開いたら、「LED1」と打って、エンター!
LEDが光る感動には程遠いですが、縁が反転し、言うことを聞いた証「OK」メッセージが返ってきます。


IchigoJam web」 for Chrome/Safari/Android/iOS11
[fullscreen]ボタンを押すと画面いっぱいに広がるIchigoJam。
フルスクリーン時、動き続けるタイプのプログラムを止めるには、ESCの代わりに、CTRL-Cを使うと便利です。


IchigoJam web、iPhone/iPadでも新OS「iOS11」で動くようになりました!
Bluetoothキーボードを接続すれば、パソコンと同じように使えます。

プログラムの表現方法はたくさんあります。
iPhoneアプリをつくるためのSwift、AndroidならJava、WebならJavaScript、AIで活躍Pythonなど用途によって様々。 IchigoJamで使っているのはBASICという言語。53年前に作られた歴史ある、わかりやすさには定評ある言語です。 プログラミング学習用言語として作られているので、スマホアプリがつくりたくなったら、Swift/Java/JavaScriptへステップアップしましょう!


10月放送のTokyo MXのテレビ番組の収録、パックンにもマイコン、プログラミング体験してもらいました!
「エトス、パトス、ロゴス」伝え方3種がおもしろい、パックン著書にサインもらいました!

地方創生担当大臣来鯖!アナログあってのデジタル、オープンデータで地方創生も根っこは人

2017/07/19 23:55:00
#sabae #opendata #IchigoJam 

内閣府の地方創生担当、特命担当大臣、山本幸三さんの鯖江市視察。
めがね会館にてオープンデータに関するプレゼンと意見交換させてもらいました。


鯖江市長プレゼン、「データシティ鯖江」オープンデータとお試しサテライトオフィス事業の取り組み
山本幸三地方再生担当大臣鯖江市をご視察|『さばえ.jp』百さんのブログです


続いて、オープンデータで地方創生
オープンデータで世界に広げる新産業!鯖江市の教育政策、シニア活用とも連動。
今年3/2、内閣府副大臣の石原さんにもご紹介した、鯖江産パソコン「IchigoJam」にも驚いてもらえました。

時代は、人の数より手数、コンピューターやロボットの手を自在に動かす人次第。
「もし〜だったら、〜する」実行すると決めたアクションは、プログラミングして任せてデータ取りしましょう。


例えば、アナログ測距センサーの値を ANA() コマンドで取得しつつ、一定の数になったら LED を光らせる IchigoJam BASIC のプログラム

10 LED ANA()>800:GOTO 10 RUN

数年前より遥かに多く整理されたデータを見て、最後に判断(やる、やらないは、デジタル)するのは、人です!
オープンデータ化が進み、広まり、つながることで生み出される新しい知見を味方につけましょう。

コンピューターの謎、探求編
実際、試してみると、LEDの明かりがチラチラと結構ゆらぐのが気になります。


こちらオシロスコープで見た、IchigoJam U でアナログ距離センサーを動かしている時の電源線の様子。


IchigoJam U の電源投入時の変化。150u秒ほどで安定した3.3Vになることがわかります。
150u秒といえば、150秒の100万分の1という極一瞬のようですが、48MHzで動くIchigoJamのCPU、LPC1114は7200命令こなしてしまう時間に相当します。


IchigoJam T の電源投入時の変化。Tでは、コンデンサを0.1uFから10uFへと増やしたことで安定化しました。

コンピューターが電気で動いているということは、こうしてゆらぐアナログ電気信号を絶妙なバランスで切り取って使うこととした先人達の知恵の上に成り立っていることを実感できます。
なぜコンピューターは計算が速いのか? 電気回路で計算ができる謎を解く

IchigoJamご要望数ナンバーワン!プログラム領域拡大版、お試し公開

2017/06/22 23:55:00
#IchigoJam #lpc1114 

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評価ボード (未確認ですがきっと動くはず)

最強のIchigoJamを探せ!CPUの固有IDで戦う「イチゴバトラー」 IchigoDake発売! - IchigoBattler by UID of CPU, IchigoDake released!

2017/06/07 23:55:00
#IchigoJam #KidsIT #game 

IchigoJamで使っているCPU、LPC1114には固有の128bitのIDが振ってあります。マシン語を使って、そのIDを読み出して、懐かしのバーコードバトラー風に戦わせてみましょう!
Play on the IchigoBattler using UID of IchigoJam's CPU LPC1114.

固有IDの取得方法 - How to get UID of CPU

100 POKE#700,128,181,140,176,0,175,248,96,185,96,122,96,59,96,20,35,251,24,58,34,26,96,251,104,186,104,211,24,251,98,7,75,187,98,249,106,20,35,250,24,187,106,16,0,152,71,251,106 110 POKE#730,4,51,27,104,24,0,189,70,12,176,128,189,241,31,255,31 120 Y=USR(#700,#800) 130 FOR I=9 TO 2 STEP-1:?HEX$([I],4);:NEXT:? RUN F50000035485EA695334000012121246

イチゴバトラーにするための続き - Additional program of IchigoBattler

130 ?"YOU ID ";Y 140 INPUT"INPUT ENE ID?",E 150 H=Y/100:A=Y%10+5 160 P=E/100:B=E%10+5 170 IF A>B GOTO 200 180 ?"HP:";H;" ENE:";P:WAIT60 185 IF P<=0 ?"YOU WON!":END 190 D=RND(B):H=H-D:?"ENE ATTACK ";D:BEEP10:WAIT60 200 ?"HP:";H;" ENE:";P:WAIT60 205 IF H<=0 ?"YOU LOST...":END 210 D=RND(A):P=P-D:?"YOU ATTACK ";D:BEEP5:WAIT60 220 GOTO 180

プログラムをいろいろいじってみよう! Let's Hack!


最強のIchigoJamを探せ! - Find a strongest IchigoJam!


早速ゲットした新IchigoDake! - Latest IchigoDake! (IchigoJam version)


IchigoDake parts (IchigoLatte version)


IchigoDake Set (IchigoJam version)


IchigoDake IchigoLatte version works!

links
- IchigoDake
- IchigoJam (IchigoJam BASIC version)
- IchigoLatte (JavaScript version)

What's IchigoJam? Thanks for coming to PCN booth at Maker Faire Bay Area

2017/05/20 23:55:00
#makerfairebayarea #IchigoJam #KidsIT 

Programming Club Network (PCN) our mission is programming for every kids in the world.

What's this?
IchigoJam is $15 computer to learn programming for kids. It's inexpensive, very simple architecture, circuit as simple as kids can build on the breadboard.

Like Raspberry Pi?
Yes but simpler. You don't need to install OS. It boots a second and any time you can shutdown.

Like Arduino?
Yes but you don't need another PC. IchigoJam is self development PC. You have to prepare a TV, a keyboard(PS/2) and a micro USB.

Like Comodore 64 / Apple-I/II?
Yes! You and your kids can enjoy computing! And you can control Inputs and Outputs very easilly!

LED 1 OK LED 0 OK 10 LED1:WAIT30 20 LED0:WAIT30 30 GOTO10 RUN

Why BASIC?
BASIC is simple and powerful computer language. Young kids can read easilly with all short commands are written by upper cases. Line numbers helps understanding what program is and how program works in computers. BASIC has 50 years history and many fans and mini experts can teach to kids!

Why IchigoJam?
Ichigo means strawberry in Japanese. Also "Ichi" is "One", "Go" is "Five" in Japanese. So $15 computer like Raspberry Pi.

What's CPU?
Just $1 CPU, 32bit ARM Cortex-M0 "LPC1114" by NXP. But it can calculate 50,000,000 times a second! It has 4K RAM and 32K Flash ROM. The size of IchigoJam OS is less than 24KB. You can save 4 1KB programs in BASIC on it.

What do I prepare to start?
A PS/2 keyboard, a TV (as a monitor with composit terminal) and a microUSB.

Where can I buy?
At PCN online shop. "PRODUCTS | PCN Programming club network"


Thank you for visiting PCN booth!


This demo program in BASIC makes big fun to kids!













Welcome to PCN booth! (Zone #2 at #makerfairebayarea )

links
- PCN - Programming Club Network in English
- IchigoJam - official in English
- IchigoJam - BEST IN CLASS at Maker Faire Bay Area 2017 / メイカーフェアでベストインクラス受賞!

IchigoJam Zero the World's Lightest PC 0g 150yen for IchigoJam Things!

2017/04/01 00:00:00
#IchigoJam #IoT #maker #english 

重さ0g、150円の世界最軽量、最安値のパソコン「IchigoJam Zero」と「IchigoJam Things」をリリース!
I released the world's lightest 0g/150yen PC "IchigoJam Zero" and "IchigoJam Things"!

Finger Size! 指の上サイズ! (photo human ver.)


Weight: 0g (IchigoJam Zero) / 9g (Raspberry Pi Zero)


IchigoJam ZeroRaspberry Pi Zero
CPUNXP LPC1114 @ 48MHzARM1176JZF-S @ 1GHz
RAM4KB512MB
UART115,200bps (default)115,200bps (default)
I2Cx1x2
GPIOx11x22
Video outputNTSC composit
(needs 2 registers 470/100)
HDMI / NTSC composit
(needs 2 wires)
KeyboardPS/2 keyboard
(needs 2 wires)
USB keyboard
Storageinternal Flashneeds a SD card
OSIchigoJam BASIC
IchigoLatte JavaScript
(needs download & install)
Raspbian etc...
(needs download & install)
Price$1.5$5
Weight0g9g
Size11.8mm x 7.2mm67.6mm × 30mm
Power Consumption0.05W0.5W-0.7W


IchigoJam Things is a break out board for IchigoJam Zero!


Now available on Upverter! "IchigoJam Things / RPi by taisukef f9de7f39761699b0 - Upverter"
IchigoJam Zero を使うブレイクアウトボード「IchigoJam Things」のガーバーデータがダウンロード可能です!


IchigoJam Zero on IchigoDake & IchigoIgai by PCN


IchigoDake makes IchigoJam everywhere!


Enjoy making everythings! ものづくりをたのしもう!

links
- 「若年層に対するプログラミング教育の普及推進」事業にIchigoJam採用!
- 2017.4.1 IchigoDake / IchigoIgai | PCN プログラミング クラブ ネットワーク
- 2016.4.1 MSXになりたい「こどもパソコンIchigoJam」あの起動ロゴを搭載!(boot logo)
- 2015.4.1 創る人を創ろう! Pepper より安価な こどもロボットPaprika 発表!(Kids Robot paprika)
- 2014.4.1 目指すはMSX! Raspberry Pi より安価な IchigoJam 発表!(Kids PC IchigoJam)
- 2013.4.1 jig megane-0 かけられる大容量バッテリー(glasses)

電池ケースと組み込みIchigoJamでつくるイチゴトーン、こどもプロコン2016の冬!

2016/12/25 23:55:00
#IchigoJam #music #maker 

レッツ組み込み開発!
IchigoJamでつくった1ボタン楽器、イチゴトーンを、電池ケースに組み込んでおもちゃにしてみます。


材料は、単3x4本のスイッチ付き電池ケース、IchigoJamのCPU「LPC1114FN28」、ボタン(タクトスイッチ)、スピーカー、抵抗と線材少々。


BTN端子をVCCにつなぐ1MΩの抵抗(プルアップ抵抗)と、左右のVCCをつないでおきます。クリスタルは無くても平気。 プログラムを後で書き換えるなら、ピンソケットなどを付けておくと便利です。


電池ケースの半分のスペースを使います。ハンドドリルでボタンとスピーカー用の穴を開けて、中でCPUや電源を配線。


なかなかすっきりした見た目。おもちゃとしてはちょっと飾りっ気がないかも。


大きめボタンは子供にもわかりやすい!

CPUをLPC1114FDH28を使ったり、電源にボタン電池を使うともっと小さくできます。
逆に、大きなおもちゃなら、電源をコンセントから取ってIchigoJamをそのまま使って、ジャンパー線で配線すれば、はんだづけなしの簡単な工作でつくれるので、子供でも簡単にチャレンジできます!

こちら、こどもプロコン2016夏の受賞作品、じゃんけんゲームマシンIchigoJam Advent Calendar 2016より)

PCNこどもプロコン2016夏より)

欲しいおもちゃは作っちゃおう!
楽しいものができたら「PCNこどもプロコン2016冬」へ送ってくださいー

IchigoJam event in Silicon Valley! After 40 years from Apple-I

2016/10/30 23:55:00
#IchigoJam #KidsIT #english 

40 years ago, the world first personal computer Apple-I borned in Silicon Valley.
Apple-I starts computers for everyone including kids!
When I'm 8 years, I met dreamy machine, MSX a descendant of that.

I invented the $15 simplest personal computer "IchigoJam" for all kids.
Ichigo is a strawberry and 15(Ichi Go) in Japanese.

3 Nov, we are holding a BASIC programming workshop for kids using IchigoJam:
First BASIC Programming on IchigoJam for Kids - PCN Silicon Valley | Meetup


Let's start programming at a young age!
There are many computers in our lives.
If you can program, you get a great power!


These IchigoJam works are made by kids
(from PCN Kids Programming Contest 2016 Summer)


IchigoJam is the simplest computer such as Apple-I.
It has RAM4KB, ROM32KB, BASIC interpreter, Video output, Keyboard input.


IchigoJam can build your self about less than 1 hour by the first solder.
"Let's Start Programming! How to build an IchigoJam, your first computer"

After building, let's start programming in BASIC

IchigoJam BASIC ver 1.2.1 by jig.jp OK LED1 OK LED0 OK LED1:WAIT30:LED0 OK

"Let's make Game! My first programming by IchigoJam"

This is the first ever event in the Silicon Valley being held by the PCN<Programming Club Network> 3 members from Fukui, Japan. Also, one of the organizers is a UC Berkeley Computer Science graduate working in Palo Alto.

Apple I - IchigoJam

Apple IIchigoJam
CPUMOS 6502 @ 1MHzNXP LPC1114 @ 48MHz
RAM4KB4KB
Programming LanguageBASICBASIC
Graphics40x24 Text32x24 Text
Video outputNTSC compositNTSC composit
Keyboardexternal keyboardPS/2 keyboard
Storageexternal casette tapeFlash x 4 / external EEPROM
Price$666.66$15 (¥1,500)
Birth1976.4.112014.4.1
Apple I - Wikipedia


("Framed Apple I Computer Aluminium schematic" of Apple-I" signed by Woz and me)

Event Details
Date/Time: 3 Nov (Thursday) 7pm-9pm
Location: 2900 Lakeside Drive, Suite 270, Santa Clara, CA
Participants: any kids between 6-15 are welcome! Parents can watch or wait in the lobby.

What to bring? Nothing needed!
Please gather in the lobby by 7pm.

First BASIC Programming on IchigoJam for Kids - PCN Silicon Valley | Meetup

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