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

IchigoJamを低電力で定期実行させる方法 - LPC810で1分定期WAKEUPするIoT!

2015/11/28
#maker #IoT #lpc1114 #lpc810 

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から直接書き込めちゃうと楽しいかも!?

ハンドアセンブルで超速計算! - IchigoJamではじめるArmマシン語その2

2015/10/23
#IchigoJam #KidsIT #lpc1114 #Arm 

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

プログラムをひとつひとつマシン語対応表を見て、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,`01000001,`00011000 POKE #704,`00000001,`00111000,`11111100,`11010001 POKE #708,`00001000,`01000110,`01110000,`01000111 ?USR(#700,10) 55 ?USR(#700,100) 5050

動きました!

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

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

※GOTOに指定する値は、飛ばしたい差分から更に-2した数を指定する
負の数は補数表現(-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. レジスタ不足に上位レジスタとスタック操作

IchigoConsole - Chromeでシリアル通信をチェックするツール in JavaScript

2015/08/23
#IchigoJam #js #lpc1114 

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

家庭用テレビと、よくあるスマホ用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」からお試しください!

マイコンLPC1114の外部クリスタルの自動判別方法

2015/07/26
#lpc1114 #IchigoJam #maker 

外部クリスタルが標準搭載となった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、クリスタルを挿しても挿さなくても動いて便利!)

4KBの重み。保存件数33%、プログラム領域20%増で望む IchigoJam ver1.0.0

2015/04/16
#IchigoJam #lpc1114 

開発環境として使っている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サービス

IchigoJamをI2Cで拡張する!IC40コ付きで4千円の技術書が楽しい!

2015/04/07
#maker #IchigoJam #lpc1114 

こどもパソコンIchigoJam、PEEK/POKE/マシン語に続く、上級者向けの拡張です。3芯シリアルでの拡張を検討していましたが、広く普及していてチップも安い、I2C(アイ・スクエア・シー、アイツーシーとも)に対応しました。1980年に誕生したI2C、特許は切れているので誰でも自由に使えます(I2C - Wikipedia)!


温度センサーチップで計測して表示するIchigoJam BASICプログラム


使ったICは、本のオマケで付いてきた温度センサーNXP社製PCT2075D秋月で同じようなものが入手可能です。


マイコンにプラス! シリアル拡張ICサンプルブック(トライアルシリーズ) 2015年 04 月号 [雑誌]: トランジスタ技術 増刊」には、なんと40コのICが付属!シリアル、汎用入出力、多灯LEDコントロール、延長、分岐、アナログ変換、温度、モーター、時計など、サンプルプログラムも付いてこの値段。いいおもちゃすぎます。ただし、変換基板へのハンダづけは表面実装用部品を要求されるので、難易度高め。こういうおもちゃに食いつく子供が増えるときっと世の中もっと楽しい。

LEGOマインドストーム(EV3/NXT)もI2C接続なので、よりコンパクトなロボット作りにも使えるかも!?(Connecting the Arduino and LEGO MINDSTORMS NXTI2C Interfacing Part 4: Controlling Extra Motors (Lego Mindstorms NXT)

IchigoJamにおけるI2C実装は、省メモリ仕様なので対応できない機器もあるかもしれません。IchigoJam-FANにて最新ファームウェアテスト中です!

- こどもパソコンIchigoJam

創る人を創ろう! Pepper より安価な こどもロボットPaprika 発表!

2015/04/01
#IchigoJam #KidsIT #lpc1114 #Apr1 

MSXを目指し発表した、こどもパソコンIchigoJam。MSXの意志を拡張して引き継ぎ、ソフトウェアのみならず、ハードウェアの学習にも繋げていくべく、福井県のプログラミング好きからなるPCN(プログラミング クラブ ネットワーク)は「こどもロボット paprika」プロジェクトをスタートした。


(単に子供に買い与えゲームやBASICで遊ばせる「入門機」としての側面のみではなく、その後必要に応じて、システムを拡張し、本格的なコンピューター(ソフトウェア)の学習にも繋げて行くことが可能な、総合的なホームコンピューターとして設計されている - MSX - Wikipedia)

こちらが こどもロボットpaprika プロジェクトだ!


(image by PCN)

5チップすべて、NXP社の32bitArmプロセッサ、LPC1114FN28で動きます。
IchigoJam BASICから簡単制御でき、自由に拡張できるロボットです。 - IchigoJamを頭脳に
- ChocoChipがあなたの声を聞き
- PanCakeで表情豊かなにおしゃべりし
- MapleSyrupで自在に動きまわる
- MixJuiceでネットにもつなげちゃうロボット!

こちら 開発中の paprika プロトタイプ0 by @taisukef

デザインは開発中のもので正式のものとは異なります。

コンピューターといえば、プログラミングすることが前提だった時代。ファミコンも一番最初のサードパーティー製ソフトは、ハドソンによるファミコン用キーボード、ファミリーベーシックでした。世の中からキーボードとともに、プログラミングというステキな技術が失われないよう、PCNは今年度も楽しく活動していきます!


PCNは、12年ぶりに復活した、ベーマガ(ベーシックマガジン)を応援しています!


本日、IchigoJamは1才を迎えました!多くの人に祝福いただき大変うれしく、励みになります!
2014年度のIchigoJam出荷台数は、3,261台でした!

- プログラミング クラブ ネットワーク
- こどもパソコンIchigoJam
- ベーマガ復活
- IchigoJam 一周年記念 - MASAHARUの魂のプログラム

links
- 2014年 目指すはMSX! Raspberry Pi より安価な IchigoJam 発表!
- 2015年 創る人を創ろう! Pepper より安価な こどもロボットPaprika 発表!(Kids Robot paprika)
- 2016年 MSXになりたい「こどもパソコンIchigoJam」あの起動ロゴを搭載!(boot logo)
- 2017年 IchigoJam Zero the World's Lightest PC 0g 150yen for IchigoJam Things!
- 2018年 盲聾のこどもたちにもプログラミングを! 体で感じる体表点字、IchigoBrailleでブラインドプログラミング、IchigoJam 4th Birthday!

IchigoJamのマルチメディアボードをユニバーサル基板でつくる

2015/01/31
#IchigoJam #lpc1114 #PanCake 

IchigoJamと同じLPC1114を使ったグラボ、PanCakeに、圧電サウンダーを加えたマルチメディアボードを作ってみました。16色カラーとPSGサウンドというマルチメディア、懐かしい響きです。


(左、IchigoJam 右、PanCake + 圧電サウンダー搭載マルチメディアボード for IchigoJam)

抵抗値がおかしいのか、テレビによってはうまく色が出ないので、改良の余地はありそうですが、L字ピンを使ったスロットはいい感じなので、EEPROMスロットも付けた拡張ボードをプリント基板にしてみるのも良さそうです。

16色でドット絵がかけるので、8x8のスタンプ命令を使って、カラフルなビットマンを歩かせてみました。


IchigoJam BASICのソースコードはこちら。



100行 アニメーション1 (カラーコード参考、PanCakeページ
200行 アニメーション2
300行 Nの値を1桁の16進数表示
400行 Mの値を2桁の16進数表示し、空白を空ける

参考リンク
- BASICプログラミング専用1,500円パソコン IchigoJam
- LPC1114を使ったグラボ PanCake

IchigoJamカラー!サードパーティー製グラボ、PanCake登場!

2015/01/29
#IchigoJam #lpc1114 #PanCake 

すべての子供にプログラミングを!のプログラミング・クラブ・ネットワークの仲間、黒ひげ危機一発やせんせいなどのアプリを手がける株式会社ナチュラルスタイルから、かわいいグラフィックスボード「PanCake」が登場!早速、IchigoJamをかけて試食!

とりあえず、IchigoJam開発のきっかけとなったMSXでのBASICプログラミングでもやったお約束ランダムLINE文!16色カラーです!!解像度は80x45とコンパクト!


シリアル出力で、"line 00 00 10 10 03" などと送信するだけで手軽に使えます!konashiや、他のマイコンからも気軽に使えて楽しめそうです。


「PanCake / PCN プログラミング クラブ ネットワーク」
PanCakeで描いたロゴ、Ichigoのってます!


つくりかた。IchigoJam2台用意し、1台にPanCakeを書き込んで、ビデオ信号用に14.31818MHzのクリスタルを挿し、ブレッドボード、200Ωの抵抗x15、ビデオ端子を使ってPanCake用の電子回路を作ります。残っているもう1台のIchigoJamのGNDとTXDをGNDとRXDにそれぞれ接続します。(400Ω、800Ω、1600Ωを用意しても、もちろんOKですよ!)


IchigoJamのプログラムはこんな感じ。100行-110行が16進数一桁を表示するサブルーチン。200行が16進数二桁を表示するサブルーチン。これを使って、PanCakeへのlineコマンドを送信しています。

16色カラーで好きなグラフィックがかけるstampコマンドもあって、楽しそうです!

1チップパソコンIchigoJamはどのくらい速いのか?ベンチマーク結果

2015/01/26
#IchigoJam #lpc1114 

秋葉原勝山鯖江と未来のエンジニアを育成するワークショップが続きました。

IchigoJamの核になるのは、NXPという会社のLPC1114(正確にはLPC1114FN28/102)という32bit CPU(セントラル・プロセシング・ユニット=中央処理装置)です。最大動作周波数50MHzのところ、12MHz x 4の8MHzで動かしています。

コンピューターは手拍子に合わせるように、プログラムで指定された処理をひとつひとつこなしていきます。周波数とは時間あたりの数のことで、48MHz、1秒間に4800万回の手拍子に合わせて計算してくれる様子を想像してみましょう。

IchigoJamの組み立てが終わったら、早速プログラミングです。コンピューターがいかに速いかを実験してみます。

即座に答がでました!ってこれくらい誰でもできますよね。

速いですね。数を大きくしていくと様子がおかしくなりますが、桁あふれ(オーバーフロー)という現象です。詳しくはまた次の機会にご紹介します。待てない方は検索してみてください。

1から100まで100回計算させてみるとちょっと間があって答がでます。

繰り返す回数を1000回に変えて、時間を測ってみます。TICK()は1/60秒に1進む数を返すコマンドで、CLTでリセットできます。16秒、きっとみなさんが計算するより速いですが、1秒間に4800万回処理できるコンピューターなら1000回の計算は1秒間に4.8万回できる計算なので、一瞬のはずでは?

その秘密はBASICという言語にあります。IchigoJamは、画面を表示したり音を出したり、キーボードからの信号を文字にしながら、BASIC言語でかかれたプログラムをCPUが直接分かる言葉にひとつひとつ照らし合わせながら動かしているから遅いわけです。もしマシン語でプログラムを書けば、一瞬ですよ!


IchigoJamでベンチマークした結果、1万回の計算に164秒かかりました。32年前に発売されたパソコン、MZ-2000で同様のベンチマーク結果は26秒と負けています。ただし、値段は22万円 vs 1,500円と圧勝です!(2015.10.10追記 ver1.1beta6 93秒、2017.11.26追記 ver1.2.3 43秒)

※マシン語について補足:CPUが直接わかる言葉は、足したり引いたりいろいろな処理をする命令を数値で表したものです。この数値のカタマリをマシン語といいます。数値をひとつひとつ調べて書くのは大変なので、アセンブリ言語というマシン語に対応する人間用の言語を使います。アセンブリ言語は国によって言葉が違うように、CPUの種類によって言葉が違い、独特のお作法があって大変です。そこで人間に理解しやすく、各CPUに合わせたアセンブリ言語に自動的に翻訳するC言語などが登場しました。ちなみに、IchigoJam自体はC言語で作っています。

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