IchigoJamは24KBのOS、ソフトウェアとしての提供。いろんな方がいろんなIchigoJamを作っています。(IchigoJam公式サイトでオープンデータ提供開始!

PCN三重から限定発売されたIchigoJam互換機、KeyIchigoを入手したので、さっそくはんだづけして、起動、LED1!

下記、組み立てレポートです。

KeyIchigo パーツセット!


はんだづけ開始!どうするとミスなくできるか?楽か?速いか?手探りでのスタートが楽しい。
指で押さえつつ、右上1ピンを軽くはんだづけ、そのあと右下をはんだづけして、右上を再度はんだづけ、1列終わったら反対側をまとめてはんだづけして、1列完成!


後半は慣れてサクサク進みます。ひとりタイムアタックするとより楽しい。焦ってミスするとタイムロス! 65コも!?と思うかもしれませんが、65面あるゲームと同じです。しかも、ルールは自分で自由に決められます。


ボタンを指の腹で押す時に痛い、尖ってしまったはんをハンダ吸い取り線で吸い取って、仕上げ。 何を持って完成とするかは自分次第。とことん完成度にこだわるもよし、ひとまず動けばよしとするもよし。


残りのパーツもはんだづけ!


低い部品からぎ基本、ひとまず抵抗のはんだづけ


小型液晶は低いピンソケットとピンヘッダーで接続!


起動しました!
SWITCHコマンドの切り替えなしに、小型液晶に表示される!
謎の答えはキーボード制御用に使っているコンピューターのプログラムにありました。
まあくの工作の部屋: Key-Ichigo


電源に縦一列単4電池ボックスを使用。1.9V〜5VのDCDCコンバーターが入っているとのことなので、単5電池x2本を表に置くとか、CR2032でちょっと動くようにするとか、ソーラーパネルをつけて青空(時のみ)プログラミングとかの改造も良さそうです。

長ピンソケットをつけて下にIchigoJamを合体させようかとも思うので、ピンソケットやビデオ端子は未実装。 自分の使いたいようにいじれるのが、キットのいいところですね!

ハードもソフトも、自分で作ってみるのがおすすめです!

ハード初心者にオススメ、IchigoJam!
IchigoJam はんだづけ、はじめのいっぽ - まちをよくするプログランミング in 品川区 Day2!

先日収録した「ラジオ日本「bravesoft presents 目指せ!ハッカーRADIO」放映日時:2020年5月19日(火)25:00〜」の前半が公開!

COVID-19 JAPAN 新型コロナウイルス対策ダッシュボード」の話。患者数0県が増加中。緊急事態宣言終了後の活動後の動向に注目です。

links
- まあくの工作の部屋: Key-Ichigo
- まあくの工作の部屋: Key Ichigo 2

以前紹介した、5コ950円で買える、安価でIchigoJam BASICだけでも使える超音波センサー「HC-SR04」。 他デバイスとの関係で、どうしてもBTNを使いたいとご要望あり。


できました!IchigoSodaにつないでIoT化していますが、IchigoJam、IchigoDakeでもOKです!

BTNはIchigoJam付属のボタンとSLEEPからの復帰のため外部でプルアップ抵抗をつなげていて、ANA(0)としてアナログ入力としても使えます。 つまり、CPU内部の設定としてはアナログになっているので前回紹介したマシン語で読み出そうとしてもうまくいきません。


BTNを割り当てているPIO1_4、LPC1114のデータシートの IOCON_PIO1_4 (アドレス#40044094) を見ると設定方法が書いてあります。 一度、マシン語を使ってどういう設定になっているか読み出してみましょう。

R0=[@IOCON_PIO1_4]L R0=[R0]L RET @IOCON_PIO1_4 DATA L #40044094

asm15でアセンブルして、読みだした値を8桁の2進法で表示

POKE#700,1,72,0,104,112,71,0,0,148,64,4,64 OK ?BIN$(USR(#700,0),8) 01000001

2:0 つまり最下位の0bit目から2bit目の3bitを使ったFUNCは1、次の2bitのMODEは0(プルアップなどなし)、次の1bitのHYSは0(無効)、6bit目はReservedとして予約されていて1を設定することになっていて、7bit目ADMODEが0でアナログ入力モードとなっています。

これをADMODE:デジタル入力+FUNC:PIO1_4と、`11000000 に一時的に変更する作戦でいきます。前回のカウントプログラムの前後にこの設定を足します。

PIO1のベースアドレスは #50010000、BTNは、PIO1_4の場所なので
?"#5001";HEX$(1<<(4+2),4) → #50010040 を@INに設定します。

'BTN(PIO1_4) <- digital R1=`11000000 R3=[@IOCON_PIO1_4]L [R3]L=R1 'count check R0=0 R1=[@IN]L @LOOP R2=[R1]L R0=R0+1 R2-0 IF !0 GOTO @LOOP R0=R0>>9 'BTN(PIO1_4) <- analog R1=`01000001 [R3]L=R1 RET @IOCON_PIO1_4 DATA L #40044094 @IN DATA L #50010040 'BTN=PIO1_4

アセンブルして、BASICのプログラムと組み合わせて、できあがり!

10 POKE#700,192,33,6,75,25,96,0,32,5,73,10,104,64,28,0,42,251,209,64,10,65,33,25,96,112,71,0,0,148,64,4,64,64,0,1,80 20 OUT1,1:OUT1,0:?USR(#700,0) 30 WAIT 5:GOTO 20

マシン語でカウントした値、R0をBASICに返す前に9ビット右シフト、つまり512分の1にしています。マシン語のカウントだと速すぎて大きな値になってしまうからですが、ここをいじると精度アップが見込めます。 ただ、IchigoJamでは1秒間に1.5万回くらい画面表示用の割り込みが発生するので、高い精度で計測するには割り込みを一時的に止める必要があります。

CPSID R0=0 R1=[@IN]L @LOOP R2=[R1]L R0=R0+1 R2-0 IF !0 GOTO @LOOP R0=R0>>5 CPSIE RET @IN DATA L #50001000 'IN1=PIO0_10

割り込みの一時停止は CPSID、最下位は CPSIE です。戻し忘れると何も操作できなくなってしまいます。下記、CPSIDした後リターンする危険なプログラム、SAVEした後、お試しください。

LET[0],#B672,#4770:?USR(#800,0)

完成した、超音波センサー、TrigをIN1に接続し、精度16倍バージョンがこちら!

10 POKE#700,114,182,0,32,3,73,10,104,64,28,0,42,251,209,64,9,98,182,112,71,0,16,0,80 20 OUT1,1:OUT1,0:A=USR(#700,0):?A 25 LED A<300 30 WAIT 5:GOTO 20

一定距離から近づくとLEDがついてお知らせ、リレー経由でスゴイ照明と組み合わせると防犯ライトにもなりますね!

5 B=0 26 IF B=0 AND A<300 B=1:N=N+1:IOT.OUT N:?"IOT!";N:WAIT30 27 IF B=1 AND A>=300 B=0

IchigoSodaを使って通ったらIOT.OUTでカウントを送るように改造も簡単です!
福井県で始まった「混雑状況オープンデータ」との連携も便利そう。


Let's IoT with IchigoJam x various sensors!

links
- 200円 超音波距離センサー HC-SR04 を IchigoJam で使う方法 - Armマシン語で時間を測ろう
- 今週末は越前がにロボコン! IchigoJamで超音波センサーをIN1とは違うポートで使う方法 BASIC編 マシン語編

はんだごても握りたい。ちょっと電子工作、ILI9341編。

IchigoJam基板に収まる2.2インチILI9341コントローラー付き液晶を載せてみました。


IchigoJamにつなぐピンヘッダーと液晶用ピンソケットをはんだづけ。
ピンヘッダーは使うピンを中心にまばらにしておくと、抜き差ししやすく、ピンヘッダーも節約できる。


回路図書いて発注すればきれいですが、この程度ならその場でジャンパー線で!
簡単に試行錯誤できるのが利点です。CSとGNDは隣なので、はんだづけでOK!7本配線して完成。 (対応ファームとつなぎかた


選べる4サイズ、3.2/2.8/2.4/2.2inch(この3.2インチは設定とピン配置変更必要です。


厚みをとるか?拡張性をとるか?
今回は拡張性を重視しピンソケットで実装。ちょくせつはんだづけしてしまえば、もっと薄くもできますね。


タッチパネル用のピンがあっても使わないので大丈夫。


2.2インチを載せ、キーボードをつないだ図。プログラム終われば、キーボードは抜いて動かせばOK!


目指せ!ハッカーRADIO|bravesoft ブレイブソフト
ブレイブソフト菅澤さんの番組、電子工作へと導いてくれた、ユカイ工学青木さんからの紹介での出演となりました。
konashiで、こどもパソコンIchigoJamをネットにつなぐ」(この時の技、活きてます)

エンジニアのためのラジオ番組にオンライン出演。初心者エンジニアへのアドバイスとは!?
配信、放送をお楽しみに!(→ 2020-05-26 前半公開

Web標準、W3C BROWSERS AND ROBOTICS コミュニティグループで議論され、仕様策定中のWebGPIOを使って、PCに接続したIchigoJamをコントロールしてみました。 まずは、JavaScriptで、エルチカ!(USBシリアル付き、IchigoKamuy with IchigoJam BASIC)

実装は、こちら (src on GitHub)

import navigator from './WebGPIO.mjs' const sleep = async msec => new Promise(resolve => setTimeout(resolve, msec)) const main = async () => { const gpio = await navigator.requestGPIOAccess() const port = gpio.ports.get('LED') await port.export('out') // export (activate) the port. for (;;) { port.write(1) await sleep(500) port.write(0) await sleep(500) } } main()

GitHubからソースをcloneするか、ダウンロードして

npm i

で、シリアル通信に必要なパッケージをセットアップ。USBシリアルポートを設定する '.env' ファイルを作成。

SERIAL_DRIVER=/dev/tty.SLAB_USBtoUART

あとは動かすだけ!

node led4.mjs

エルチカ部分、sleepメソッドやasync/awaitを使わず、このようにも記述可能です。

let v = 1 setInterval(function () { port.write(v) v = 1 - v }, 500)

まだ出力のみです。入力と、onchangeを使った入力監視を実装すれば、現時点でのWebGPIOとしては完了。

WebGPIOとして拡張したい3点
- アナログ出力(PWM) - サーボの制御、LEDの明るさ制御、簡易的なサウンド出力に使える
- アナログ入力(ANA) - アナログセンサーで距離や明るさ、温度などを計測できる
- プルアップ・プルダウンの設定 - 3値出力として使うなど

ちなみに、JavaScriptが使えるIchigoJam用OS、IchigoLatteでのエルチカはこちら

while (1) { led(1); sleep(500); led(0); sleep(500); }

何の宣言も必要なく、シリアルで転送したり、直接キーボードをつないで打ち込めばOK!
100円CPUには、Promiseの実装はちょっとヘビーだし過剰なので、WebGPIO light というのもあり?

links
- CHIRIMEN Open Hardware
- JavaScript Robotics Advent Calendar 2016 13日目 WebGPIOのPolyfillを実装してみて
- ハート基板 x IchigoKamuy で感染病床残数IoT by シリアルで制御するIchigoJam、IchigoSerial for Node.js

COVID-19 Japan 新型コロナウイルス対策ダッシュボードの物理版。パソコン上のPythonを使って、USBシリアル経由でつないだIchigoJamを制御。 (モノクロにすると、色の強さが分かる)

データは、COVID-19 Japan 新型コロナウイルス対策ダッシュボードTXT版を使用。CSV / JSON もオープンデータ、ご活用ください。


すがやみつる氏による「こんにちはマイコン」のPython版「ゲームセンターあらしと学ぶ プログラミング入門 まんが版こんにちはPython」の出版記念にひさびさPythonプログラミング!

Pythonは、変数に型はないけど、型変換は自動ではないのでメソッドを使う。変数はBASICと同様、宣言が不要なので、長い変数名を使った時の誤字に注意。一行コメントは #、長いコメントは """ で囲む。

IchigoJamを単なる表示器として使ったプログラムが完成。(src on GitHub)

def locate(x, y): ser.write(b'\x15') ser.write(chr(32 + x).encode()) ser.write(chr(32 + y).encode()) ser.write(b'\x13\x0c') locate(2, 2) ser.write(b'COVID19 ')

こちらその一部、IchigoJam特殊キーコードを使った、カーソル位置指定(LOCATE/LC)に相当するメソッドを、定義(def)して、使用。chrはBASICのCHR$と一緒!シリアル通信にわたす際、encodeで文字列をバイナリ化。


COVID-19 Japan 新型コロナウイルス対策ダッシュボード
5/8まで公開されていたデータがなくなり、報道発表で数値が訂正される。以後、都道府県の公開データを集計する形となった。 このため、死亡者数が一部不明「-」表示に変わっている。ぜひ各自治体からのオープンデータ化、ぜひお願いします!

重症患者数、現在患者数を含むデータ定義書を作成。オープンデータ化する際に参考にどうぞ。
covid19/opendata_spec_covid19_20200510.xlsx at master · code4sabae/covid19


VIDEO3/5を使った拡大表示にも対応!
ILI9341対応βファームウェア:IchigoJam 1.4β20 for ILI9341


★3.2インチ★TFT液晶モジュール★240x320★ - aitendo
かなり文字が大きく見える、3.2インチのILI9341液晶は、こちら!IM0、IM1、IM2のはんだによるジャンパー設定を、0、1、1に切り替えて、4線SPI制御にして、使用するピンにピンヘッダーかピンソケットをはんだづけ。


CLKがD_WRS、DCがD_WRと表記されているので注意。

液晶モジュール - IchigoJam
D_LEDA - VCC(抵抗を介して接続で明るさ調整可)
D_WRS(SCK) - IN1 (SPI用のクロック)
D_SDI(MOSI) - VIDEO2 (SPI信号)
D_WR(DC) - IN2 (Data or Command)
D_RESET - IN4
D_CS - GND (Chip Select - 常に選択)
GND - GND
VCC_IN - VCC (3.3V)


コンパクトでかわいい、2.2インチ!

4線SPI対応ILI9341液晶でぜひお試しください!
(8bit/16bitパラレル通信のみのものには非対応です)

速度面と入手性と価格に難ありだった320x240の液晶版「IchigoJam mobile β」。同サイズのILI9341版液晶が割と良さそうとのことで、対応チャレンジ!(by 中村さん on IchigoJam-FAN)


動きました!

ただ、48MHzで動作するIchigoJamには、320x240の液晶駆動はちょっと重い。 ILI9341のデータシートを確認、reduce color mode の文字に期待したが、残念ながら結局1画素最小16bit、モノクロモードとか、8bitモードとかあるといいのに。

1/60秒で全画面描画が間に合わないので、ちょっとずつ分割しての表示に対応し、音出力にも対応。速度は通常のIchigoJamに近い感じに合わせる形に調整。約10fpsの表示としました。ぎりぎり使える?

ILI9341対応βファムウェーア:IchigoJam 1.4β19 for ILI9341
接続方法は、ST7567とほぼ一緒。

液晶モジュール - IchigoJam
SDO(MISO) - NC (接続なし)
LED - VCC(抵抗を介して接続で明るさ調整可)
SCK - IN1 (SPI用のクロック)
SDI(MOSI) - VIDEO2 (SPI信号)
DC - IN2 (Data or Command)
RESET - IN4
CS - GND (Chip Select - 常に選択)
GND - GND
VCC - VCC (3.3V)

ST7567版と違って、SWITCHによるビデオ信号との切り替えはありません。反転はできますが、拡大表示には非対応。

links
- ILI9341 on Amazon

対策ダッシュボードで活躍中のカラム地図。小山さん呼びかけの、都道府県の市区町村カラム地図をぜんぶ作成するプロジェクト、多くの方の貢献により遂に全県制覇!まずは、シンプルなアプリづくり。

日本カラム地図
CSVオープンデータとしてまとめ、都道府県のカラム地図を辿れる、白カラム地図アプリを作成! JavaScriptを使ったシンプルでオープンソースなウェブアプリ、ご活用ください!


北海道カラム地図
北海道、すごい!ご自分の住んでいる町、位置関係など違和感ありませんか?


日本カラム地図 - Googleスプレッドシート」でも、コメント受け付けしています。


時間割ガチャ - 教材オープンデータから自動生成する時間割
有言実行!予告した以上の1日10動画ペースで更新が続く、福井県教育委員会による動画教材発信!「ふくいわくわく授業 | 福井県ホームページ
選んだコンテンツのみ、対象のみで「ガチャ」できるように改良しました!

RAM4KBで動くIchigoJam。変数、配列、PCG領域を使っても、ROM化検討しても、どうしてもメモリが足りない時、どうするといいでしょう?

ひとまず、EEPROMを使ったIchigoROMや、ROMカセットを使うのがオススメです。ただ、EEPROMのデータシートを見ると、消去/書き込みサイクル100万回と寿命があります。 ゲームなどで、拘束かつ頻繁な読み書きに使うにはちょっと心もとないかもしれません。

そんな時はSRAMを使いましょう、EPSON製の256kbit(32KB)の「SRAM 256K SRM2B256SLMX55」が、5コ200円、1コ50円で売っています。使い方は簡単、データシートを見ながら配線し、CS(chip select)をGNDにして、15bitでアドレス(A0-A14)と8biteでデータ(I/O1-8)を設定し、WE(write enable)をGNDで書き込みできます。読み込む時は、OE(output enable)をGNDでデータ(I/O1-8)に出力されます。


アドレス線はひとまず全部GNDにつないで、アドレス0。WEとOEをOUT1,2で制御。IN1にI/O1をつないで、1bitの書き込み、読み込みを実験しました。 ただ、32KB全部接続するには、IchigoJamではピン数が足りません。そんな時はI/Oエキスパンダ!I2Cを使ってI/O数を拡張できます。


MCP23017を使えば、16bitの入出力ができるようになります。VDD/VSSの電源は3.3VでOK。I2Cアドレス(A0-A2)を全部GNDにしたときのI2Cスレーブアドレスは32、SCL(SCKとデータシートに表記)とSDAをプルアップしてIchigoJamのSCL(EX1)とIN3に接続。次のプログラムでひとまず8bit出力実験。

10 IF POKE#700,1,0:?I2CW(32,#700,1,#701,1) STOP 20 FOR I=0 TO 255 30 POKE#700,#13,1:IF I2CW(32,#700,1,#701,1) STOP 40 WAIT 10 50 NEXT

10行でGPIAの8bitを出力に設定、30行で実際に出力!このI/Oエキスパンダを2つ使って、SRAMと配線すればできあがるはず!とわかったところで、回路図をUpverterで書きます。


EPSON SRAM 256K SRM2B256SLMX55 | Upverter
足りない部品はパーツ作成。(MCP23017はありました!)


回路をつないでいきます。・・・が、結構、配線が多くてなかなか大変。たかが16bitでこの調子です。Upverterに追加されたBUS機能を使って、なんとかコンパクトに収めてみたい。

配線作業が大変だなーと思ったら、手軽になった基板発注にチャレンジ!
10枚1600円送料込、モバイル対応IchigoJam用液晶シールドプリント基板、設計から発注まで1時間!

PCNこどもプロコン2020、3/29、最終表彰式、詳細発表!
PCNこどもプロコン2020 | PCN プログラミング クラブ ネットワーク
ゲスト審査員に、レジェンド、高橋名人と大橋編集長も!

一体型が便利な、アイ・オー・データ機器製、集約型周辺機器IchigoDyhook、IchigoDakeもいいですが、IchigoJamIchigoCake、月額60円のお手軽IoT、IchigoSodaもつなぎたい! そう、なければ作ればいいんです。それが、メイカー。


ピンソケット付きのIchigoDakeの上に載せるアダプターを作って、接続!


用意するのは、IchigoJam用ユニバーサル基板microUSBコネクタモジュールコンポジット(RCA)端子モジュールピンヘッダ or 細ピンヘッダと線材を少々。


ピンヘッダー、全部使ってもいいですが、必要な箇所だけに絞ると抜き差ししやすくなる効果。IchigoJamに実装済みのピンソケットを利用するとまっすぐはんだづけできます。


microUSBコネクタモジュールと、コンポジット端子モジュールを置いてみて考える。


コンポジット端子の信号線(HOT)をVIDEO2へ、microUSBモジュール2番のD-をKBD2へ、3番のD+をKBD1へ、それぞれのGNDをGNDへ。IchigoDakeを停止させるために、RESETとGNDを接続。3.3Vを取るために、VCC/GNDにピンソケットを実装。


ビデオケーブルをつなぎ、microUSBケーブル(充電専用ではないもの)をキーボード端子へ、VCCの3.3VをCN5の3.3Vへつないで、IchigoDyhookのスイッチオンで起動!快適!


IchigoSodaは外部からmicroUSBで電源をとってあげましょう!


このアダプター外せば普通に、IchigoDake+IchigoDyhookとして使えます。


コンポジット端子とステレオミニ端子を直接はんだづけして作ったいい加減なモノクロ音声の変換アダプター!


実はこちら、ファミコン互換機の音声出力用でした。IchigoDyhookでも動いた「忍者ハットリくん」。IchigoDyhookの省電力機能で、キーボード一定時間無操作で画面が消えてしまう点に注意。 キーボード信号を使って、コントローラーにするのもいいかも知れませんね!

NTSCモニターとPS/2 or USBキーボードのセットなのでラズパイや昔のパソコンなど、いろいろつなげて楽しめるのもIchigoDyhookの魅力です。

links
- IchigoJamカムロボのデバッグからラズパイ製品の現場調整まで、立ち乗りでこなすIchigoDyhook! – about yrm

IchigoJamの組み立てた方には見覚えある電子部品、クリスタル。 かなり正確に12MHzで電気的に発振するこの部品をCPU内部で4倍にして、48MHzとして動作させています。

実はIchigoJamは、クリスタルをつけなくても動きます。 CPU内蔵された12MHzの発振回路を使って、同じようにも動くようにできているのですが、発振の精度が悪いため画面が少し揺れたりします。 あえて最初ははんだづけせずに試してみるのもおもしろいかも?


クリスタル(水晶発振子) 3.579545MHz: パーツ一般 秋月電子通商-電子部品・ネット通販
いろんな周波数で販売されていますクリスタルですが、3.579545MHzという、なんとも中途半端風なこの周波数は何でしょう? 実はこちら、黄色い線でコンポジット端子へ接続する、NTSCの仕様にぴったりな部品です。

このクリスタルに対応した、IchigoJamのファームウェアを作ってみました。 3.579545MHz を 14倍して、50.113630MHz で動作させているので、ちょっとだけオーバークロック(定格50MHz)、通常版よりちょっと速く動作します。 水平同期周波数をぴったりにしたので、相性はよりよくなるはずです。うまく映らないテレビなどでお試しください。

IchigoJam 1.4β17
- 外付けクリスタル 3.579545MHz 用実験ファームウェア
(通常IchigoJamでは動きません!)


テレビにつなぐパソコン、MSXの動作周波数も、3.579545MHz。どこかで見た覚えがある数値だと思いました!

50MHzを余すこと無く使い切りたい人は、マシン語入門もどうぞ!
15分で分かる、高専生のための逆アセンブルして学ぶマシン語入門

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