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

STM32F0版IchigoJam、シリアル通信バージョンβ

2018/01/02 23:55:00
#IchigoJam #stm32 #asm #maker 

お気に入りCPU、Arm Cortex-M0NXP社製LPC1114シリーズと同じクラス、STMicroelectronics社製STM32F0シリーズでIchigoJamが動きました!


シリアル通信でIchigoJamを便利に使える、IJUtilitiesを使うとスクリーンを使ったゲームも動かせます!


今回は、秋月電子で手に入るSTM32F042K6T6へ書き込んだら、そのままシリアル通信で使えます。 (Nucleoにbinファイル書き込みでも動くかもしれません)

I/Oは、まだLED(PB3とPA7)のみ使えます。他、配置と機能、検討中です。

同じArmなので、USRコマンドを使ったマシン語はそのままで動きます!
ハンドアセンブルで超速計算! - IchigoJamではじめるArmマシン語その2
I/Oを使うマシン語は、LPC1114とSTM32F0、I/Oのメモリマップが違う点に注意です。

ターゲットにしている、STM32F030K6T6TRは、LPC1114と同じ48MHz/Flash32KB/RAM4KBで、1コ175円、12,000コ買えば1つあたりなんと74円

STM32で始めるC言語」で紹介した上級者向けミニマム開発環境サンプルも拡充
(GPIO/Clock変更/UART/割り込み/TIM/SPI/Flash書き込み)

ちっちゃいコンピューターをプログラミングで味方に付け、身の回りをどんどん便利にしちゃいましょう!

LPC810で光るカセットテープ! 富山高専射水キャンパスにてメンタリングとプログラミングの本質体験のススメ

2017/12/18 23:55:00
#IchigoJam #maker #lpc810 #asm #toyama #kosen 

起業家甲子園出場権を手にしたアントレプレナー研究会のある、富山高専射水キャンパスにてメンタリング。
富山高専本郷キャンパスでjigインターンのOB、すがっちとなぽりたんもジョイン!
高専生ならではの感性と創造力で北陸から一石、投じよう!

北陸、福井、鯖江の銘菓、めがね堅パンのハートエディション!

昨日のLPC810 x WS2812Bにバグが見つかり、無事光るカセットテープのLPC810エディションが点灯!

12MHz版だとちょっと信号はいい加減ですが、ちゃんと光りました!
(原因:asm15の DATA B 0,0,0 が、2byteアラインされてしまうため)

マシン語で作る、簡易キラキラプログラムがこちら!
末尾、16byteを変更すると、アニメーションするLEDの色が変わり、その前4byteでウェイトを調整できます。

10 POKE#700,0,4,0,16,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,251,255,239,33,72,223,33,1,96,33,72 20 POKE#728,1,104,3,34,210,67,17,64,1,96,31,72,31,73,1,96,31,72,12,33,1,96,31,76,4,34,15,32,32,161,30,75,14,120,30,112,1,49,1,51 30 POKE#750,1,56,249,209,15,32,26,73,128,37,11,120,34,96,43,66,8,208,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,96,7,224,0,0,34,96 40 POKE#778,0,0,0,0,0,0,0,0,0,0,0,0,109,8,233,209,1,49,1,56,228,209,13,79,1,63,253,209,10,73,14,120,14,32,79,120,15,112,1,49 50 POKE#7A0,1,56,250,209,14,112,213,231,128,128,4,64,16,0,4,64,192,193,0,64,191,255,255,255,0,32,0,160,0,35,0,160,0,0,0,16,128,26,6,0 60 POKE#7C8,20,0,0,20,20,0,20,0,20,20,20,0,0,20,0,0 70 A=#700:L=216:LRUN1 'FILE1 100 'LPC810 Writer 256byte from ADR:A 110 UART3,2:OUT2,0:OUT1,0:WAIT9:OUT1,1 120 CLS:?"?";:GSB@R 130 ?"Synchronized":GSB@R 140 ?12000:?:GSB@R:GSB@R 150 ?"A 0":GSB@R:GSB@R 160 ?"U 23130":GSB@R 170 ?"W 268436096 ";256:GSB@R:UART1,2:LC0,-1:FORI=0TO255:?CHR$(PEEK(A+I));:NEXT:UART3,2:LC0,6 180 ?"P 0 0":GSB@R 190 ?"E 0 0":GSB@R 200 ?"P 0 0":GSB@R 210 ?"C 0 268436096 256":GSB@R 215 '?"G 268436128 T":GSB@R:END 220 OUT2,1:OUT1,0:OUT1,1:END 500 @R:K=INKEY():IF K=13 K=INKEY():WAIT9:RTN ELSE CONT

マシン語のプログラムはこちら。
データを一旦RAM(#10000000)へ転送し、1ループごとにローテートさせています。

DATA L #10000400 ' stack DATA L #21 ' entry point DATA L 0, 0, 0, 0, 0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=#DF 'SWT, GPIO, I2C:off, FLASH, FLASHREG, RAM, ROM, SYS [R0]L=R1 R0=[@FLASHCFG]L R1=[R0]L R2=3 ' flash no wait: set 0b00 R2=~R2 R1&=R2 [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 R4=[@GPIO_NOT0]L R2=`100 ' PIO0_2 @COPYTORAM R0=15 R1=@DATA_LED R3=[@RAM]L @COPYTORAM_LOOP R6=[R1] [R3]=R6 R1+=1 R3+=1 R0-=1 IF !0 GOTO @COPYTORAM_LOOP ' WS2812B driver ' R0 - data count ' R1 - data address (G1,R1,B1,G2,R2,B2 ....) ' R2 - OUT value ' R3 - data value ' R4 - GPIO address ' R5 - bit count ' R7 - wait count @WS2812B R0=15 ' R1=@DATA_LED R1=[@RAM]L @LOOP_DATA R5=#80 R3=[R1] @LOOP_BIT [R4]L=R2 R3&R5 IF 0 GOTO @ZERO NOP NOP NOP NOP NOP NOP NOP [R4]L=R2 GOTO @JOIN @ZERO NOP [R4]L=R2 NOP NOP NOP NOP NOP NOP @JOIN R5=R5>>1 IF !0 GOTO @LOOP_BIT R1+=1 '+6clock R0-=1 IF !0 GOTO @LOOP_DATA @WAIT R7=[@WAIT_N]L R7-=1 'wait R7*3+1 clock IF !0 GOTO -1 R1=[@RAM]L R6=[R1] R0=14 @SLIDE R7=[R1+1] [R1]=R7 R1+=1 R0-=1 IF !0 GOTO @SLIDE [R1]=R6 GOTO @WS2812B ' init @SYSAHBCLKCTRL DATA L #40048080 @FLASHCFG DATA L #40040010 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_NOT0 DATA L #A0002300 ' WS2812B @RAM DATA L #10000000 @WAIT_N DATA L 400000 @DATA_LED DATA B 20, 0, 0, 20, 20, 0, 20, 0, 20, 20, 20, 0, 0, 20, 0

asm15 assembler」でアセンブルできます!
WS2812Bの信号は、800kHz(秒間80万回、1.2マイクロ秒に1回)の波の形で、0と1とを区別するので、とても人の手では制御できませんが、マシン語ならたった30円のコンピューターにさせれば余裕です。

切っても切れない、社会とコンピューター。誰にでもオススメしたいプログラミング体験。
IchigoJam BASIC で、プログラミングの基本を、マシン語を使ってコンピューターの真の実力を、それぞれかんたんに体験できます!

WS2812Bを観察しよう!IchigoJamで開発するLPC810でフルカラーLED点灯実験

2017/12/17 23:55:00
#IchigoJam #maker #lpc810 #asm 

光るカセットテープで活躍するWS2812Bを、LPC810を使って自在に点灯できたら簡単、気軽にカセットテープ内にボタン電池も含めて収められてうれしいかも? (IchigoJamを書き込んだLPC1114を使って光るカセットテープを作った例 by JO3GBDさん)


LPC810から制御したWS2812B。
拡大してみると、信号が来るDI側から順に、緑、赤、青と小さく光っている様子が分かります。
データを送信する順も緑、赤、青!

プログラムはこの通り、マシン語部分が長くなってきたら、100行以降を別プログラムとして保存しましょう。

10 POKE#700,0,4,0,16,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,251,255,239,24,72,223,33,1,96,24,72 20 POKE#728,1,104,3,34,210,67,17,64,1,96,22,72,22,73,1,96,22,72,12,33,1,96,22,76,4,34,3,32,22,161,128,37,11,120,34,96,43,66,8,208 30 POKE#750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,34,96,7,224,0,0,34,96,0,0,0,0,0,0,0,0,0,0,0,0,109,8,233,209,1,49 40 POKE#778,1,56,228,209,7,79,1,63,253,209,222,231,128,128,4,64,16,0,4,64,192,193,0,64,191,255,255,255,0,32,0,160,0,35,0,160,64,66,15,0 50 POKE#7A0,2,2,2,0 60 A=#700:L=164:LRUN1 'FILE1 100 'LPC810 Writer 256byte from ADR:A 110 UART3,2:OUT2,0:OUT1,0:WAIT9:OUT1,1 120 CLS:?"?";:GSB@R 130 ?"Synchronized":GSB@R 140 ?12000:?:GSB@R:GSB@R 150 ?"A 0":GSB@R:GSB@R 160 ?"U 23130":GSB@R 170 ?"W 268436096 ";256:GSB@R:UART1,2:LC0,-1:FORI=0TO255:?CHR$(PEEK(A+I));:NEXT:UART3,2:LC0,6 180 ?"P 0 0":GSB@R 190 ?"E 0 0":GSB@R 200 ?"P 0 0":GSB@R 210 ?"C 0 268436096 256":GSB@R 215 '?"G 268436128 T":GSB@R:END 220 OUT2,1:OUT1,0:OUT1,1:END 500 @R:K=INKEY():IF K=13 K=INKEY():WAIT9:RTN ELSE CONT

ちょうど50行、#7A0からの3byteがG(緑)、R(赤)、B(青)の数を指定しています。
書き換えて、実験してみましょう。


LPC810と光ったWS2812B!

マシン語プログラムの解説

asm15でWS2812Bの制御用マシン語プログラムは、LPC1114用を元に、LPC810用に修正します。
Cortex-M0+のLPC810では、OUTポートの扱いがNOTを使えるので短く、1クロックで読み書きできるので高速!
ただ、標準動作の12MHz用に、ウェイトはループではなく、NOPコマンドで調整しました。
厳密にはデータの区切りで速度が追いついていないので、たくさん光らせようとするとおかしくなってしまうため、周波数を上げるかSPIでの制御にしないといけなさそうです。(追記、勘違いでした12MHzでもいけました!

DATA L #10000400 ' stack DATA L #21 ' entry point DATA L 0, 0, 0, 0, 0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=#DF 'SWT, GPIO, I2C:off, FLASH, FLASHREG, RAM, ROM, SYS [R0]L=R1 R0=[@FLASHCFG]L R1=[R0]L R2=3 ' flash no wait: set 0b00 R2=~R2 R1&=R2 [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 R4=[@GPIO_NOT0]L R2=`100 ' PIO0_2 ' WS2812B driver ' R0 - data count ' R1 - data address (G1,R1,B1,G2,R2,B2 ....) ' R2 - OUT value ' R3 - data value ' R4 - GPIO address ' R5 - bit count ' R7 - wait count @WS2812B R0=3 R1=@DATA_LED @LOOP_DATA R5=#80 R3=[R1] @LOOP_BIT [R4]L=R2 R3&R5 IF 0 GOTO @ZERO NOP NOP NOP NOP NOP NOP NOP [R4]L=R2 GOTO @JOIN @ZERO NOP [R4]L=R2 NOP NOP NOP NOP NOP NOP @JOIN R5=R5>>1 IF !0 GOTO @LOOP_BIT R1+=1 '+6clock R0-=1 IF !0 GOTO @LOOP_DATA @WAIT R7=[@WAIT_N]L R7-=1 'wait R7*3+1 clock IF !0 GOTO -1 GOTO @WS2812B ' init @SYSAHBCLKCTRL DATA L #40048080 @FLASHCFG DATA L #40040010 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_NOT0 DATA L #A0002300 ' WS2812B @WAIT_N DATA L 1000000 @DATA_LED DATA B 2, 2, 2

開始アドレスを0に変えて、hexファイルに変換したものがこちら。
こちらをLPC810に直接書き込んでも動きます!

:1000000000040010210000000000000000000000BB :10001000000000000000000000000000DFFBFFEF18 :100020001848DF210160184801680322D2431140BB :10003000016016481649016016480C210160164CF3 :100040000422032016A180250B7822602B4208D0C1 :10005000000000000000000000000000000022601E :1000600007E0000022600000000000000000000027 :1000700000006D08E9D101310138E4D1074F013F9B :10008000FDD1DEE78080044010000440C0C1004084 :10009000BFFFFFFF002000A0002300A040420F0090 :0400A0000202020056 :00000001FF

links
- IchigoJamでLPC810マイコン開発!(デプロイ・完結編)
- IchigoJamでも光る大五郎! 300コのフルカラーLEDを簡単コントロール! IchigoJam x WS2812B/SK6812/NeoPixel
- はじめてのマシン語 - IchigoJamではじめるArmマシン語その1

IchigoJamでLPC810マイコン開発!(デプロイ・完結編)

2017/12/15 23:55:00
#IchigoJam #KidsIT #maker #lpc810 

鯖江の小学生に人気かわいいマイコンLPC810をIchigoJamで開発しましたが、書き込みがまだでした。
Flash ROMへと書き込んで、デプロイしましょう(独立動作させること)!

LPC810用のプログラムは、マシン語でつくり、IchigoJamからシリアル信号を使って書き込みます。


まとめ買いで30円(!)のコンピューター、LPC810に電池とLEDをつなぐだけ、好きなように光らせることができちゃいます!


鯖江市長にて、三菱UFJリサーチ&コンサルティングの杉原さんと、こどもむけオンライン教室を展開するLEARNieの南部さん、ルワンダ案内してくれた笠井さんと未来会議。 Hana道場を運営するNPO法人エル・コミュニティ竹部さん含め、地方・東京・世界、いろんなレイヤーでのつながりが熱い!


ますます外との連携を強化する鯖江市!


小学校だけでなく、中学校では部活動の一環で取り組むIchigoJamプログラミング!
教科書を一人ひとりが読みながら、トライ&エラー、ときに友達同士教えあって、オリジナル作品作りにトライというベストな学習環境でした。 このような環境が、オンラインで家に居ながらにして、周りに教室などがない小学生でも継続できる仕組みができるとステキです!


IchigoJamだけを使って、かわいいコンピューターLPC810の点滅プログラムを書き換えるデモ
ゆっくり点滅をIchigoJamと6本のジャンパー線でつながった、LPC810用ブレッドボードに移し、プログラムのひとつのデータを書き換えて、点滅速度を3倍に変更して、元に戻しています。

プログラム、全文はこちら!

1 'LPC810 Blink LED 10 POKE#700,0,4,0,16,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,223,251,255,239,11,72,223,33,1,96,11,72 20 POKE#728,1,104,3,34,210,67,17,64,1,96,9,72,9,73,1,96,9,72,12,33,1,96,9,72,4,33,9,74,1,112,19,70,1,59,253,209,250,231,0,0 30 POKE#750,128,128,4,64,16,0,4,64,192,193,0,64,191,255,255,255,0,32,0,160,0,35,0,160,128,132,30,0 90 A=#700:L=108 100 'LPC810 WRITER A:ADR L:LEN 110 UART3,2:OUT2,0:OUT1,0:WAIT9:OUT1,1 120 CLS:?"?":GSB@R 130 ?"Synchronized":GSB@R 140 ?12000:?:GSB@R 150 ?"A 0":GSB@R 160 ?"U 23130":GSB@R 170 ?"W 268436096 ";L:GSB@R:UART1,2:LC0,-1:FORI=0TOL-1:?CHR$(PEEK(A+I));:NEXT:UART3,2:LC0,6:? 180 ?"P 0 0":GSB@R:WAIT9 190 ?"E 0 0":GSB@R:WAIT9 200 ?"P 0 0":GSB@R:WAIT9 210 ?"C 0 268436096 128":GSB@R 220 OUT2,1:OUT1,0:OUT1,1:END 500 @R:K=INKEY():IF K=13 K=INKEY():RTN ELSE CONT

10-30行は、こちらでつくった点滅プログラムを、asm15で、IchigoJam BASIC用のデータにしたものです。
30行の末尾「128,132,30,0」が、点滅の周期なので、ここを「128,132,10,0」と変更すると3倍速くなります。いろんな速度に変更して楽しみましょう。

マシン語を変更すれば、光るカセットテープの制御もできそうですね!
音楽を鳴らしたり、たくさんのLEDを制御したり、リモコンの送受信に使ったり、複数のコンピューターを操れるようになるとまた創れるものが広がります!

ちょっと難しいので、IchigoJam BASICをある程度マスターしたら、どうぞ挑戦してみてください!
はじめてのマシン語 - IchigoJamではじめるArmマシン語その1

links
- マシン語で作る!75円のかわいいArmマイコン、LPC810用エルチカプログラム
- IchigoJam「で」LPC810マイコン開発!(まずは実行編)

目が輝く、さくらインターネット田中さんだるま! WS2812B x IchigoJam x さくらだるまと紙工作

2017/12/13 23:55:00
#IchigoJam #maker 

さくらのクラウドsakura.ioKidsVenture高専などでいろいろお世話になっているさくらインターネットさん。
社長の田中さん(福井高専のお隣高専、舞鶴高専卒の1つ上の先輩)より、お歳暮が届いたので早速工作開始!


中には筆ペンとお菓子!お菓子のデザインも田中さん!
人類、そして、その子孫の健康と繁栄を祈りながらいただき、目入れ!


さくら由来の筆ペン!「あかしや新毛筆 古都 桜


目をキラキラさせるLEDは、最近のお気に入りWS2812B、2つ切って、つなぎます。


目のキラキラ部分をカット。切り口が雑な感じでスミマセン!紙工作、難しい!


意外と大変だった目の位置を合わせつつ固定する方法。
細かい位置調整はあきらめ、プラスチックの玉をかぶせて乱反射させ、左右が混ざらないように仕切りを貼り付け。
工作力も鍛えておかないとですねっ。


IchigoJam BASICのプログラムを書いて、できあがり!(WS2812Bでいろあそび - IchigoJamプリント

10 POKE#700,102,32,240,181,114,182,8,36,36,2,9,25,11,76,128,37,11,120,255,34,34,96,3,39,10,38,43,66,1,208,10,39,3,38,1,63,253,209,0,34 20 POKE#728,34,96,1,62,253,209,109,8,239,209,2,49,1,56,234,209,98,182,240,189,4,0,1,80 30 FOR I=0 TO 5:[I]=RND(40):NEXT:U=USR(#700,0):WAIT 60:CONT

動画でもどうぞ!

楽しいお歳暮、ありがとうございます!
20周年、おめでとうございます!

links
- 20周年記念サイト | さくらインターネット

IchigoJam「で」LPC810マイコン開発!(まずは実行編)

2017/12/11 23:55:00
#IchigoJam #maker #lpc810 

マシン語でLPC810のエルチカができたので、次のステップ、IchigoJamからの書き込みです。
IchigoJamだけで、LPC810の開発に成功しました!


エルチカのプログラムのメイン部分をBASICのPOKE文にasm15で変換して、メモリに書き込んでおきます。

10 POKE#700,11,72,223,33,1,96,11,72,1,104,3,34,210,67,17,64,1,96,9,72,9,73,1,96,9,72,12,33,1,96,9,72,4,33,9,74,1,112,19,70 20 POKE#728,1,59,253,209,250,231,0,0,128,128,4,64,16,0,4,64,192,193,0,64,191,255,255,255,0,32,0,160,0,35,0,160,128,132,30,0 30 A=#700:L=76

LPC810へはシリアル信号でつなぎます。RESETをOUT1、ISPをOUT2へ、TXD/RXDをクロスしてIchigoJamに接続。VCC/GNDもIchigoJamから取りましょう。

プログラムをメモリに書き込み、即実行するIchigoJam BASICプログラムがこちら

100 'LPC810 WRITER A:ADR L:LEN 110 UART3,2:OUT1,0:WAIT9:OUT1,1 120 CLS:?"?":GSB@R 130 ?"Synchronized":GSB@R 140 ?12000:?:GSB@R 150 ?"U 23130":GSB@R 160 ?"W 268435456 ";L:GSB@R:UART1,2:LC0,-1:FORI=0TOL-1:?CHR$(PEEK(A+I));:NEXT:UART3,2:LC0,6:? 170 ?"G 268435456 T":GSB@R:END 180 @R:K=INKEY():IF K=13 K=INKEY():RTN ELSE CONT

110行、LPC810を一度リセット
120行、?を送ることでシリアル信号のbpsを合わせてくれます
130行、bpsが合っていることを確認
140行、周波数12MHzを表します
150行、書き込みや実行権限をゲット
160行、アドレスAから、長さLを書き込み!
170行、書き込んだ場所を即実行!
※1 268435456は、16進数で#10000000、LPC810のRAMの先頭位置を表します。(linecalcで0x10000000)
※2 LPC1114と違って、バイナリで直接書き込めるのでプログラムが短く、速い!


マシン語を書き換えて、点滅速度を高速変えて書き込むデモ動画

マシン語を直接書くも良し、アセンブラやコンパイラを作るも良し。
安くてかわいいコンピューターを使いこなしちゃいましょう!
追記、デプロイ・完結編はこちら!


links
- マシン語で作る!75円のかわいいArmマイコン、LPC810用エルチカプログラム
- はじめてのマシン語 - IchigoJamではじめるArmマシン語その1
- LPCマイコン情報:LPC800 Cortex-M0+搭載-スイッチ・マトリックス
- LPC810 - marutsu
- LPC810 - 秋月電子通商
- IchigoJamでLPC810マイコン開発!(デプロイ・完結編)

IoTで地方創生 in 青森、大人も楽しくプログラミングを始めよう!WebAudio で IchigoJam web サウンド対応

2017/12/08 23:55:00
#aomori #opendata #maker #IchigoJam 

青森県、新時代ITビジネス研究会in青森共催の「IoT実践事例から考える、地方でのIoT利活用推進と地方創生」~既存事業にどのようにIoTを応用していくのか、ICT関連事業者はそれをどう支えていくべきか~

こちら基調講演の資料です

フリックケアのIoT事例紹介、お年寄りの見守りから製造現場の見守りへの横展開がおもしろい!

講演でのインプットの後は、アイデアソン!IoTでどう解決するか!?

アイデア発表とミニディスカッション。膨らんだアイデア、じゃんじゃん創っていきたいですねっ

IoTの実現、こどもIoTハッカソンや、PCNこどもプロコンの作品のように、子供でも実現できちゃいます。
まずは大人もブラウザで気軽に体験「IchigoJam web」へ音機能追加、BEEP/PLAY対応!
IchigoJam web で、BEEP、と入力し、エンターを押してみてください。

BEEP

ピっとなりました

BEEP 5

高い音!

PLAY"CDE"

これでドレミと鳴ります(WebAudio対応のブラウザで実行

先日のカセットテープの読み書き方式「カンサスシティスタンダード風」も鳴らせます!
カセット記録音を鳴らすプログラム、RUN on IchigoJam web、ブラウザで動かす
WebAudio/WebMIDI API Advent Calendar 2017 Advent Calendar 2017 - Qiita

会場、ねぶたの家 ワ・ラッセ、先月のIODATAのプログラミングイベントの開催地!

迫力のねぶた!「撮影OK」の館内、360度写真も撮ってみました。

「タッチねぶた」というステキな展示。ねぶたにじっくり好きなだけ触れて確かめられちゃいます。
電気の入り切りスイッチがあってもおもしろいかも!?

初の女性、ねぶた師、北村麻子さんとその作品!
あおもり人模様:初の女性ねぶた師・北村麻子さん(35) 父を師に、伝統に新風を /青森 - 毎日新聞

おみやげ用、かわいいミニねぶた!
こどもロボットpaprikaなどロボットと組み合わせて、こどもねぶたロボコンとかおもしろそう!NebutaJam?

青森といえば、りんご!青森オリジナルこどもパソコンをつくるとしたら、RingoJam? AppleJam?

お昼は、青森名物、のっけ丼を案内してもらいました。

のっけ丼はチケットを買って、市場内を歩きながら券を1枚や2枚など単位で好きな食材をのっけていくスタイル!

夜は津軽三味線のライブもある「りんご箱

ごはんによくあう「ねぶた漬け」! NebutaDuke?

福井のご当地ロボコン「越前がにロボコン」のような地元の子供を応援するイベント、青森でもぜひ!

links
- BASIC Programming with Aomori Nebuta Kids with IODATA RaspberryPi! / 津軽の文化は太くデカい!こどもに伝えるIchigoJamプログラミング on アイオーデータ ラズパイ in ねぶたの地 青森! – about yrm
- 戦う姿まぶしい小学生、動画でふりかえる「越前がにロボコン」

光るカセットテープに記録したい、カンサスシティスタンダード風IchigoJamプログラムの音声化

2017/12/06 23:55:00
#IchigoJam #maker 

PCN秋葉原Assemblageにて、光るカセットテープのミニ講習。

初めてのカセットテープの分解。テープをびろびろーっと出しても誰にも怒られませんよっ


カセットテープに、テープ状のWS2812Bを5つ貼るだけ簡単工作は、お昼休み中にできちゃいます。


ロボット芸人、髙橋ちゃんもマシン語打ち込み&カセットテープキラキラ成功!

せっかくのカセットテープ、録音させたくなりますね。
かつてカンサスシティスタンダードというカセットテープへの保存方法の標準が使われていた様子。
低い音1200Hzで0を、高い音2400Hzで1を表し、1秒間に300コの音でデータを表現するらしい。
とりあえず、IchigoJamのBEEP音で近い音、13と7を使って、プログラム領域(#C00)を鳴らしてみよう!

10 BEEP7,60:WAIT60 20 FORI=0TO1023:C=PEEK(#C00+I) 30 FORJ=0TO7:IF C&(1<<J) BEEP13,2 ELSE BEEP7,2 40 WAIT2:NEXT:NEXT:?

最初にピーっと高い音を1秒ならして、1byteずつ取得して、それを下位bitから順に音にします。
WAITでタイミングをとっているので、これで1秒間に30コ。1/10のスピードです。
RUN on IchigoJam web、ブラウザで動かす


PLAY文を使って300コへスピードアップする方法(ただし、画面広さの関係で数十byteのみ)

10 CLS:?"O5T30N7T18000"; 20 FOR I=0 TO 32:C=PEEK(#C00+I) 30 FOR J=0 TO 7:IF C&(1<<J) ?"D"; ELSE ?"N7"; 40 NEXT:NEXT:? 50 PLAY#900

BASICで実験してみて、うまくいけばマシン語化してパソコンやスマホに読み取らせるのもおもしろそう!
子供がつくったプログラムを、大人のスマホを通じて投稿とか簡単にできちゃうかも!?


秋葉原のAssemblage(アセンブラージュ)には、キラキラ動くかわいいものがたくさん!
ぜひのぞいてみてくださいっ

マシン語で作る!75円のかわいいArmマイコン、LPC810用エルチカプログラム

2017/11/28 23:55:00
#lpc810 #maker #asm 

小さくても立派な32bit Arm Cortex-M0+のCPU、NXP社製、LPC810、75円 @marutsu
最大動作周波数30MHz、秒間3000万回計算してくれます!

本ブログでも、暗闇で自転車を探すフラッシュライトにしてみたり、おもちゃに音を組み込んだりクリスマス手作りプレゼントや、PCGサウンドライブラリSoundCortexをつかってIchigoJamから三和音鳴らしたりと、活躍。

このかわいいマイコンLPC810をIchigoJamでクロスプロットフォーム開発できる環境を目指し、BASIC風表記なアセンブリ言語 asm15 で、まずは基本にして、コンピューター制御の本質、LEDをチカチカさせる「エルチカ」プログラムをつくってみます。

エルチカは、2ステップあります。まずは、LEDを光らせること。そして、思い通りの時間待たせること。

LPC810のピンをこのように並びで使います。

RESETLPC810RXD
TXDGND
PIO0_33.3V
PIO0_2ISP

LPC1114と同様、電源を入れた時や、RESETがGNDから復帰した際、ISPがGNDになっていると書き込みモードになり、RXD/TXDをつかって、USBシリアルとソフト(FlashMagicやlpc21ispなど)で書き込みます。


ちょっと横着して、PIO0_2にLEDの長い方、PIO0_3に短い方を差し込んでテストします。

DATA L #10000400 ' stack top DATA L #21 ' entry point DATA L 0,0,0,0,0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=#DF 'SWT, GPIO, I2C:off, FLASH, FLASHREG, RAM, ROM, SYS [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 R0=[@GPIO_B0]L R1=1 [R0+2]=R1 GOTO 0 @SYSAHBCLKCTRL DATA L #40048080 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_B0 DATA L #A0000000

LPC1114はCortex-M0、LPC810はCortex-M0+とマシン語はほぼ一緒ですが、IOの扱い方が違います。
1. LPC810のRAMは#10000000からの1KBなので、スタック初期値を#10000400に設定
2. 書き込みチェック用コードの次、#21にプログラム本体をおく
3. SYSAHBCLKCTRLで、GPIO、SWT(スイッチマトリクス、IOを切り替えるモノ)を設定
4. PINENABLE0で、PIO0_2/PIO0_3をGPIOとして使うよう設定
5. GPIO_DIR0で、PIO0_2/PIO0_3を出力に切り替え
6. GPIO_B0で、PIO0_2に1を書き込むと光る!
7. そのまま実行を続けてしまわなないように GOTO 0 で停止させておく

asm15で、Start Addressを0に設定、「hex file」出力を選択し、USBシリアルで書き込みます。
*3はスキップしても大丈夫でしたが、念のため。(参考、LPC1114の場合

次に、IchigoJam BASICでいう、WAITコマンドを実現して、0.5秒ごとについたり消えたりさせます。

DATA L #10000400 ' stack DATA L #21 ' entry point DATA L 0,0,0,0,0 DATA L #EFFFFBDF ' VALID_CODE = 0x100000000-0x10000400-0x21 @ENTRY R0=[@SYSAHBCLKCTRL]L R1=#DF 'SWT, GPIO, I2C:off, FLASH, FLASHREG, RAM, ROM, SYS [R0]L=R1 R0=[@FLASHCFG]L R1=[R0]L R2=3 ' set 0b00 == no wait R2=~R2 R1&=R2 [R0]L=R1 R0=[@PINENABLE0]L R1=[@PINENABLE0_DATA]L [R0]L=R1 R0=[@GPIO_DIR0]L R1=`1100 ' PIO0_2 and PIO0_3 [R0]L=R1 R0=[@GPIO_NOT0]L R1=`100 ' PIO0_2 R2=[@WAIT_N]L @LOOP [R0]=R1 ' 1cycle single cycle I/O R3=R2 ' 1cycle R3-=1 ' 1cycle IF !0 GOTO -1 'wait R3*3+2 cycles GOTO @LOOP ' 2cycles @SYSAHBCLKCTRL DATA L #40048080 @FLASHCFG DATA L #40040010 @PINENABLE0 DATA L #4000C1C0 @PINENABLE0_DATA DATA L #FFFFFFBF @GPIO_DIR0 DATA L #A0002000 @GPIO_NOT0 DATA L #A0002300 @WAIT_N DATA L 2000000

Cortex-M0+は、Cortex-M0と比較しGPIOアクセスや、GOTOのサイクルが短くなっています。(2→1、3→2、詳細はマニュアル参照

起動時の動作クロックは、内蔵オシレーターの12MHz。ウェイト用の1ループにかかる時間は3cycles。よって、12M/3で400万回ループで1秒。0.5秒のウェイトのために、WAIT_Nに200万を設定すればOK!

GPIO_NOT0という指定したビットに対応するIOを反転させるという便利な機能をつかって、エルチカループ(LOOP)をつくります。

注意点は、FLASHCFGの設定でウェイトを外しておくこと。 初期状態ではFlash ROMへのアクセスにウェイトがついているため、思ったより遅い点滅に悩みました。


2.54mmピッチではんだづけ工作にも優しい、8ピンDIPパッケージ(Dual inline package)のLPC810は、マシン語でさくっと遊べちゃうところもかわいい!

Armマシン語に興味もった方、「はじめてのマシン語 - IchigoJamではじめるArmマシン語」をどうぞ!

links
- [PDF]UM10601 LPC81x User manual - NXP Semiconductors
- LPCマイコン情報:LPC800 Cortex-M0+搭載-スイッチ・マトリックス,LPC824,LPC822,LPC810,LPC811,LPC812,LPC810M021FN8,LPC824M201,LPC822M101,LPC811M001,LPC812M101

材料費300円、自分で作るフルカラー5x5マトリクスLEDディスプレイ

2017/11/23 23:55:00
#IchigoJam #maker 

1コあたり11円で買えちゃうお手軽フルカラーLED(WS2812B
5x5のマトリクス状に並べたディスプレイを作ってみましょう!
材料費は約300円(IchigoJamは含まず)


「KANIROBOCON」と表示させた様子!

作り方

1. テープ状のWS2812Bを5つずつ切って、紙箱に貼り付ける


2. GND/DI/DO/5Vの隣にドリルで穴を開ける


3. 線材をつかって、はんだづけ(ワイヤーストリッパーが便利!)
- 一番上の行のGND/DI/5Vにピンソケットをつなぐ
- 全部の行にGNDと5Vをつなぐ
- 上から順にDOから次の行のDIへとつなぐ


4. IchigoJamでつないで、プログラムする
IchigoJamから、GNDをGND、VCCを5V、OUT1をDIへと接続し、プログラムを入力

10 POKE#700,102,32,240,181,114,182,8,36,36,2,9,25,11,76,128,37,11,120,255,34,34,96,3,39,10,38,43,66,1,208,10,39,3,38,1,63,253,209,0,34 20 POKE#728,34,96,1,62,253,209,109,8,239,209,2,49,1,56,234,209,98,182,240,189,4,0,1,80 90 CLV 100 [80]="00001010010010010111011001100110011000110110010010000" 110 [81]="00001100101011010010010101010101010101000101011010000" 120 [82]="00001000101011010010010101010111010101000101011010000" 130 [83]="00001100111010110010011001010101010101000101010110000" 140 [84]="00001010101010010111010100110111001100110011010010000" 200 P=0:L=LEN([80])-4:Z=ASC("0"):V=30 210 FORI=0TO4:N=[80+I]+P:FORJ=0TO4 220 [I*15+J*3+1]=V*(PEEK(N+J)=O) 230 NEXT:NEXT 240 U=USR(#700,0) 250 P=(P+1)%L:GOTO210

100行から140行で表示パターンを0と1で自由にデザインできますよ!上はKANIROBOCON
Vは明るさ、1から255まで設定できます(電源不足に注意)

表示色を青色に変更するには・・・

220 [I*15+J*3+2]=V*(PEEK(N+J)=O)

ボタンを押すたびにいろんな色に変えるには・・・

205 R=V:G=V:B=V 220 IF PEEK(N+J)=Z LET[I*15+J*3],0,0,0 ELSE LET[I*15+J*3],G,R,B 245 IF BTN() R=RND(V):G=RND(V):B=RND(V)

OUT1ではなくSNDピンを使うには・・・

25 POKE#73C,16,0,0,80,2,73,8,104,4,34,16,67,8,96,112,71,0,128,0,80:U=USR(#740,0)


5. 光る!

好きなボタンを付けてみるのも楽しそうですね!

小学生向けロボットコンテスト、越前がにロボコン、2017.11.26(日)開催!(9時開場、10時開会式)

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