TZNM 制作日誌 NOOBSで Raspibian インスコ
ラズパイに OS インスコするのは至極簡単でした。
ちなみに使ってるラズパイは Raspberry Pi 3 Model B です。

まずは NOOBS_v1.9.2.zip をどこからともなく落としてきます。
ちなみに NOOBS と NOOBS LITE の違いは、ラズパイにインスコする OS を
プリインストールの OS (Raspibian )を使うか
ネットワークから落としてくる
の違いなので、大人しく NOOBS を選択すると良いでしょう。

NOOBS はどういう仕組みかさっぱりわからないのですが、ふつーに Windows で
フォーマット(FAT32)した 32GB の SDカード( microSDHC )に
解凍した NOOBS をそのままコピーしたら出来上がりです。
コピーするときは、解凍した時にできるフォルダを SDカードのルートフォルダに
コピーするのではなくて、
解凍した時にできるフォルダの中身をSDカードのルートフォルダにコピー
する必要があります。

ラズパイは、ただ電源入れただけでは何も応答しません。
ただ赤いパイロットランプが点灯するのみです。
これは至極当然。ラズパイには BIOS が無いからですねw

先ほど NOOBS をコピーした SDカードをラズパイに差して
それぞれHDMIとUSBキーボード、マウスをいい感じにつないで電源を入れると
なんと Gnome っぽいGUI画面が立ち上がってきました!
あとはそのまま何も考えずに Raspibian をインスコすれば終了です。

【2016/09/02】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 Raspibian インスコ後の最低限の設定
インスコが終わった後は、さらに追加で LAN ケーブルを繋ぎ
電源を投入すると、見事 Raspibian の GUI 画面が立ち上がってきますた!

とりあえず、IPアドレスは DHCP で取れているみたいです。
で、まずはラズパイでブラウザを立ち上げて、
IPアドレスの変更手順を見ようかなと思うと...

日本語が文字化けてよめませんw

とゆーことで、以下の手順で日本語の設定を行います。

# 日本語のIMEをインスコ
$ sudo apt-get install uim uim-anthy


# 最低限の日本語フォントをインスコ
$ sudo apt-get install fonts-vlgothic


# 日本語表示用フレームバッファ
$ sudo apt-get install jfbterm


次に、GUI からの設定で、ロケール、タイムゾーン、キーボードの設定。

rasp_setting_menu.png








rasp_setting_locale.png










とりあえずここまで来たらリブート。
デスクトップも日本語で表示され、ブラウザの文字化けも無くなっているはずです。

次に Raspibian のアップデート。
3つコマンドがありますが、全部動きが違うみたいです。

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo rpi-update


最後の rpi-update はファームウェアのアップデートみたいでした。

次に、デフォルトの pi ユーザのパスワード変更。これは GUI から。

rasp_setting_passwd.png








root のパスワード変更はコマンドで行います。

$ sudo passwd root


あと忘れちゃいけない emacs のインスコ。これは絶対に入れないとダメです!

$ sudo apt-get install emacs



今日の作業:ラズパイのインスコと設定 6H
【2016/09/03】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 第3回おかいもの
前回から足りないと思ったものをまたアキバに行って買い足します。
今回はだいずが一緒。ガチャガチャ1回に釣られて付いてくるだいずかわゆすw
しかしお目当てのゴッドガンダムを一発で当てる引きの強さ...

・スペーサーと電源端子 730
→ 2mm のスペーサーはやっぱり品数が少ない...
→ 電源は今使えちゃってるんで、端子の取り付け作業は後回し。

・はんだごて 20W 961
→ 実はブレッドボードに取り付けるような基盤モジュールって
自分ではんだ付けしなきゃいけないケースが多くて。
→ ケーブル作成用の 40W では強すぎるので、20W を新たに購入。

・プラスチックのボックスケース 410
→ 電池ケース付きのプラスチックのケース。
→ 2mm の穴をあけてラズパイを固定できるようにする。予定。
→ 電池ケース付きにしたのは、電池のフタにケーブルが通せそうだったから。

・ACアダプタ 12V/1A 1690
→ 意外と高かった!
→ でもちゃんと使えましたw

・ブレッドボードジャンパー メス 40本 1320
→ これがないとどーにもはじまらんので。
→ ホントはもっと長いのが欲しかったんだけど。自分で作れないのかなあ。

・熱圧縮チューブ 8φ 200
→ なんだか知らないけど千石電子が一番安い気が...
→ これもまだ電源未加工なんで未使用。

・電源スイッチ 320
→ こんどはちゃんと加工できましたっ!

これでしばらくおかいものの予定はないのですが、
実際バリバリブレッドボードで回路組み始めたらそうも行かないんだろうなあと。

交通費:1580
このエントリの合計費用:8791


【2016/09/07】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 最低限のネットワーク設定
まずは必要最低限のネットワーク関係の設定をします。
まだこの時点では、Wifi は使っていません。

ラズパイでIPアドレスを固定にするには、ふつーの Linux と異なり
色々ネットスフィアを漁ってみた結果、以下のやり方が正しかったです。

/etc/dhcpcd.conf に下記を追加

interface eth0
static ip_address=192.168.0.xxx/24 # ラズパイに割り当てるIP
static routers=192.168.0.xxx # いわゆるデフォルトゲートウェイ
static domain_name_servers=192.168.0.xxx # DNS


設定が終わったらリブートして ifconfig を確認。
割り当てた IP になっていることを確認。
ついでに SSH で pi ユーザで接続できることも確認します。
# デフォルトの設定では、root ユーザでは直接ログインできませんw

次に ntpd の設定。
個人的には常駐するプロセスはなるべく減らしたい意向なんですが
ラズパイにはデフォルトで ntpdate が入ってないんでまあいいかなと。

設定はいつもの nict.jp 見に行くパターン。
/etc/ntp.conf を下記のように変更。

#server 0.debian.pool.ntp.org iburst
#server 1.debian.pool.ntp.org iburst
#server 2.debian.pool.ntp.org iburst
#server 3.debian.pool.ntp.org iburst
server ntp.nict.jp iburst


ntpq -p でちゃんと nict.jp と同期が取れてればOK。

$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp-a3.nict.go. .NICT. 1 u 462 512 377 4.714 -2.111 1.027

最後にほっとくと SSH が切れまくって超絶イラつくのでおまじない。
/etc/ssh/sshd_config に下記の一行を最後に付け足します。

ClientAliveInterval 60


ちなみにこのおまじないつけた後でもなんかプチプチ切れてたんですが...
翌日試してみたら切れなくなってました。よくわかりませんw

どーしても切られたくない!ってゆーなら、top でも走らせておくと良いでしょう。

今日の作業:ネットワーク設定の調べものと設定 1H
【2016/09/08】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 Xサーバ Xming のインスコ
ラズパイ関連のブログを書くときに、画面をカメラで撮影している人が多いのですが
ちょっと前のひでのふのエントリでは、スクショを使っているのが明らかです。

なんでそんなに楽勝にスクリーンショットを撮れるのかとゆーと
ラズパイの GUI 画面を自分のぱすこんに表示しているからに他成りません。
Linux が模倣している UNIX 系列のOSでは、30年近く昔から Xwindow とゆー
仕組みが実装されていて、別の Linux マシンの GUI 画面を表示するなんてことは
ごく当たり前のことだったりします。

もちろん、こんな便利な仕組みを使わない手はありません。
ラズパイに差すのは LAN と電源だけ。
その上ぱすこん用の大きめディスプレイで表示できれば最高とゆーわけです。

とゆーことで、Xサーバを手持ちのぱすこんにインスコします。
Xサーバとは、Xwindow のクライアントのような働きをしますw
一般的なイメージでは「Xサーバってラズパイ側なんじゃないの?」と
考えがちなのですが Xサーバをぱすこんにインスコするのが正しいのですw

使う Xサーバは Xming 。こんな素晴らしいモノが無料で手に入る時代とはね!

Xming を使用したラズパイとの接続は、ここに書いてある内容でパーフェクトです。
Raspberry Pi 2(略してパイ2)のGUI環境をWindows10から使う

Xサーバを接続するには、最低限下記の設定が必要とのこと。
/etc/lightdm/lightdm.conf に下記の変更を加えます。

[SeatDefaults]
#xserver-allow-tcp=false
xserver-allow-tcp=true

[XDMCPServer]
#enabled=false
enabled=true


また、Xming インスコのウィザード「Start Program」では
→ 「Connect to computer」には、当然ラズパイの IP を設定します。
→ パスワードを設定しておくと、ログイン時にパスワードを聞かれなくなります。
→ 「Using PuTTY」のラジオボタンを選択すると、別窓のファイル選択ダイアログで
plink.exe のありかを聞かれます。
バンドルの plink.exe は C:\Program Files (x86)\Xming\plink.exe ですので
これを選択してやると良いでしょう。選択を忘れるとつながりません

ちなみに XWindow 使っても実際のリソースはあまり食ってません。
#CPU で数%以下。メモリで10% 行ってない。
全くストレスなく使用できるので、これはお勧めです!

今日の作業:Xming の調べものと設定 3H
【2016/09/09】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 GPIO を試す
ラズパイ。と言えば小さな Linux 機として使えないこともないのですが
これだけで使うのはとっても勿体無いと言わざるを得ません。

ラズパイとゆーか、IoT の真骨頂とは、
GPIO に色々ガジェットをつないで動かしたりピカらせたりする
ことではないでしょうか。
#どっちにしろ波形出力が目的なんで、GPIO はイヤでも避けられません。

とゆーことで、GPIO の動作確認を試してみました。

使う回路はこれ。「IchigoJam電子工作パーツセット LEDもぐらたたき」です。
スイッチと LED 3個がセットになって入っている、とてもお手軽なセットです。
# 当たり前ですが、部品をバラで買った方が安いです。

なにより、小学生高学年でも理解できるようなマニュアルが付いているので
初心者でも安心して手を出せること請け合いですw

まずは回路を付属のブレッドボードに組んで行きます。
丁寧なマニュアルもあるので、10分もあれば作れるでしょう。

CIMG6515.jpg










ラズパイとの接続ですが、ひでのふは

Ichigo Jam Raspberry Pi
IN 1 <======> GPIO2
IN 2 <======> GPIO3
IN 3 <======> GPIO4
OUT 1 <======> GPIO19
OUT 2 <======> GPIO20
OUT 3 <======> GPIO21


と変更しています。

続きを読む
【2016/09/10】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 Eclipse をインスコする
ラズパイがすげえと思うことの一つに、この手の小さいコンピュータは
クロス開発とゆー手法を使うのが一般的なのですが、
クロス開発を行うには、まあ色々と設定がめんどくさい訳です。
#どのくらいめんどくさいかとゆーと、ブログのエントリが10本書けるぐらいw

しかし!ラズパイはそんな面倒とは関係なし!
前回のエントリで書いた Xサーバと組み合わせれば、
ラズパイ単体だけでも GUI で IDE でリッチな開発ができるって寸法です!

とゆーことで、ラズパイでは C/C++ で開発するつもりなので
まずは Linux で IDE と言えば定番の Eclipse をインスコすることにします。

インスコ自体はかんたんかんたん。次の3つのコマンドを入れるだけw

$ sudo apt-get install eclipse
$ sudo apt-get install pleiades
$ sudo apt-get install eclipse-cdt


インスコが正常にできたら
/etc/eclipse.ini をいじります。具体的には下記をコピペでおk。

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.dist.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.arm_1.1.200.dist
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Xms448m
-Xmx448m
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=/usr/share/eclipse/dropins
-javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
-Xverify:none


-javaagent:/usr/lib/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
は、pleiades の適用です。
-Xverify:none
は、C/C++ のプロジェクトを作れるようになるおまじないですw

-Xms と -Xmx はデフォルトより少しだけ増やしました。
でもあまり増やし過ぎるとデヴァッガでプロセスが起動できなくなるよ...

で、実際使ってみた感想ですが...
・重い。
JIT が終わってる感じの GUI はストレスなく動きますが
起動に7分ぐらいかかる(初回起動はもっとかかる)のはどーにかならんのかとw
あとメモリが1GBありゃあなあ...

ちなみに、コンパイルだけはアフォみたいに早いですw
これはおそらくコンパイラがネイティブアプリの gcc だからでしょう。

・思ったより安定している。
動作自体は非常にもっさりしているんですが、待ってるとちゃんと動きますw

とゆーわけで、生産性が思ったように上がらなかったので
Eclipse は諦めることにしました。

今日の作業:Eclipseのインスコと調整 6H
【2016/09/11】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 Code::Blocks をインスコする
Eclipse が使えないからと言って、せっかくここまで設定したのに
GUI で IDE を使った開発をあきらめるわけには行きません...
どっかにいーものがねえかなぁと探していたら...

ありました! Code::Blocks!
Code::Blocks

Code::Blocks もインスコはかんたんかんたん。
やっぱり下の2つのコマンドを入れるだけ。

$ sudo apt-get install codeblocks
$ sudo apt-get install codeblocks-contrib


インスコの途中でコンパイラの選択画面が出てくると思いますが
GCC が検出されていれば問題ないです。

codeblocks_complierdetect.png









めんどくさいので日本語化はしてませんw

インスコするとメニューからも起動できるようになります。
ただし、contrib をブチ込んでいる関係で、起動は少しお時間を頂きます。

codeblocks_menu.png









起動するとこの通り。わー!ペインが広ーい!

codeblocks_start.png









使い勝手や機能においてはやはり Eclipse に一歩劣るものの
ブレークポイントや変数の表示なんかの基本機能はちゃんと抑えられており
それよりもサクサク動くのが何よりです!

続きを読む
【2016/09/12】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 モグラタタキゲームを作る
開発環境が整ったところで、さっそく開発です。

目的は前に作ったモグラタタキ回路を、ちゃんとした
 モグラタタキゲーム
にすることです。

元々買った「IchigoJam電子工作パーツセット LEDもぐらたたき」には、
ゲームのソースコードが最初から含まれているのですが、
これが Ichigo Jam 用の BASIC のソースコードなので
C言語に移植してやる必要があるってわけです。

いやー BASIC から C への移植なんか楽勝っしょw
と思ってたんだけど...
非構造化言語から構造化言語への移植がこれほど大変だったとはね!
#いや C にも GOTO 文あるけどさ...行番号無いじゃん?
おかげでできたソースコードは全く別物と言っていいほどの変貌を遂げましたw

そもそもラズパイにはデフォルトでスピーカーが付いておらず
#サウンド機能とヘッドフォン用のプラグはあるけど...
BASIC の BEEP 命令が使えなかったりするので
ゲーム性を確保するためにそうなってしまうのはある程度仕方がないかなと思います。

とりあえず最初のお題のLチカとスイッチを首尾よくやってのけることができました!

続きを読む
【2016/09/13】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 SWAPとtmpの調整 その1
自分の作ったプログラムが動いたところで、一旦インフラ整備に戻ります。

エントリのお題は microSD への書き込みを少なくしてみる。です。

こうすることで、microSD の寿命を延ばすのと、あと2つ、別の効果も狙っています。

まずは以下のコマンドで swap を消します。

# /etc/init.d/dphys-swapfile stop
# insserv -r dphys-swapfile
# rm /var/swap


この後シャットダウンして、swap 領域が 0 になっていることを確認します。

pi@smallball:/var/tmp $ free
total used free shared buffers cached
Mem: 947740 255652 692088 7008 20956 130556
-/+ buffers/cache: 104140 843600
Swap: 0 0 0


上記のコマンドで swap を消しても、設定自体は残ったままです。
本気で消すつもりなら、dphys-swapfile 自体を apt-get --purge remove で
全部削除してしまっても良いと思います。

次に /tmp をメモリファイルの tmpfs 配下にマウントするようにします。
こちらは /etc/fstab を変更するのではなくて、
/etc/default/tmpfs を変更するのが常道のようです。

# emacs /etc/default/tmpfs

下記のように変更
# mount /tmp as a tmpfs. Defaults to no; set to yes to enable (/tmp
# will be part of the root filesystem if disabled). /tmp may also be
# configured to be a separate mount in /etc/fstab.
#RAMTMP=no
RAMTMP=yes


これも設定の後リブートしますが、
df -k の結果が目に見えて変わるわけでは無いようです。
実際に試してみましたが、/tmp 配下にファイルを置くと確かにその分
メモリは減るのですが、それは上記設定をしない状態でも挙動は変わりません。

ちなみに上記設定後でも /var/tmp 配下は microSD にファイルが出力されます。
良いかどうかは別として、これはまた別の方法で対処する必要がありそうです。

時間が無いので今回はここまで。

今日の作業:SWAP調整 1H
【2016/09/14】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 スイッチを押して割込む
開発の次のお題は「スイッチを押して割込み」です。

電子回路は前回使ったモグラタタキの回路をそのまま使います。
モグラタタキの回路は、スイッチもLEDも複数ついているので便利ですw

ラズパイ(に限らずコンピュータ一般はそーなんだけど)は
スイッチが押されたことをプログラムが検出するには、2通りの方法があります。

一つは、ポーリング
一つは、割込み


です。

何が違うかと言うと...
ポーリングは、プログラムからスイッチが押されることをずーっと監視しています。
割込みは、スイッチが押されたらあらかじめ登録してあるプログラムを動かします。
#この「あらかじめ登録してあるプログラム」を「割込みハンドラ」と呼びます。

前回のモグラタタキはポーリング方式で
17ミリ秒に1回スイッチが押されたかどうかを監視しています。なので、
17ミリ秒の間にスイッチが「押して離される」と、検出できなかったりしますw
もちろんこれを防ぐためには、押されたかどうかを監視する間隔を 17ミリ秒よりも
小さくすればいいのですが、その分 CPU が忙しくなってしまいます。

一方、割込みはと言うと、スイッチが「押された」り「離されたり」するたびに
割込みハンドラが動きます。今風に言うと「イベント」とよく似た考え方です。
#ひでのふはおっさんなので「イベント」を「ああ、割込みみたいなもんかw」で理解している。
なので、どんなに急いでスイッチを押したり離したりしても
基本的にスイッチが押されたかどうかの検出ができないとゆーことがありません。
かといって、その分 CPU が忙しくなるとかとゆーと、そーゆーこともありません。

じゃあスイッチの検出は割込みでやればいいじゃんw と思うでしょうが
大きく立ちはだかる二枚の壁があったりするのです!

一つは、python からは使えない
一つは、割込みハンドラの処理に時間がかかるとマズい


です。

ラズパイは python でらくらく IoT ってのがウリの一つだったりするのですが
こればっかりは C/C++ の独壇場なので、ひでのふ的には割りとどうでもいい話です。
ちなみに、Windows だとデバイスドライバを書く必要があるので、もっと大変ですw

割込みハンドラの処理に時間がかかるとマズいとゆーのは結構大事な話です。
ひでのふは今回のお題のソースコードの割込みハンドラ内で printf() を
呼んでいたりするのですが、本当はこれやったらダメです!
#wiringPi の便利なところは、そーゆーのをよしなにアレしてくれる。
#よしなにアレしてくれるのを詳しく知りたい人は「再入可能」でぐぐれ!

割込みハンドラ内でやって問題なさそうなのは、せーぜーチャタリングの処理と
セマフォの加算ぐらいなもんで、printf() みたいな関数を呼ぶのは本来禁止です。
特にループして中で sleep() とか malloc() とかお前タヒにたいのか!って感じです。

今日の作業:スイッチ割込みの開発 4H
続きを読む
【2016/09/15】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 タイマ割込みを試す
開発の次のお題は「タイマ割込みを試す」です。

大体において、ひでのふが普段仕事でつくるプログラムと言うのは、
リアルタイムと言ってもせーぜー 10ms オーダーであって
数Hz の低周波を出力するのでも、これではとても粒度が足りないわけです。
また、仕事では一つの処理が早く終わることは要求されますが
正確な間隔で処理を実行することを要求されることはありません。

で、そこで登場するのがこの「タイマ割込み」です。
正確な間隔で処理を実行するとゆー要件を満たすには、これしかありませんw
実際の「タイマ割込み」は、Linux のシグナルと呼ばれる機構を使います。

前回の wiringPiISR() を使った割込みは、
割込み特有のめんどいのをよしなにアレしてくれるんですが、
タイマ割込みは Linux の機構なので、そーは行きません。

そもそもコンピュータとゆーのは
別々のプロセッサから、同じメモリを同時に操作するとヤバい。
何も考えずに実行中のプロセスがいきなり中断されるとヤバい。
ってのがありまして、
割込みハンドラではこーゆーことが普通に起こり得ることを前提に
プログラムを組む必要があるって訳です。

で、実際どーゆープログラムを組んだのかは続きを見てもらうとして
ラズパイのタイマ割込みを試した結果がこちら。
vmstat の出力は、全てのパターンで 100秒動くように調整して取得した値です。

10μs× 1000 = 0.01s
Semaphore through 4061 1018.512311133 - 1018.512997956

procs --------memory------- --swap-- ---io-- ---system-- ------cpu-----
r b free buff cache si so bi bo in cs us sy id wa st
3 0 573616 25224 186220 0 0 0 0 44781 686 9 23 69 0 0
2 0 573648 25232 186212 0 0 0 5 46016 824 8 22 70 0 0
1 0 573616 25232 186224 0 0 0 0 43394 447 9 23 68 0 0
1 0 573656 25240 186216 0 0 0 5 2712 448 5 2 92 0 0
0 0 573624 25240 186224 0 0 0 0 673 435 5 1 94 0 0
0 0 573640 25248 186216 0 0 0 5 358 101 2 0 97 0 0
0 0 573640 25248 186224 0 0 0 0 735 250 3 0 96 0 0


100μs× 1000 = 0.1s
Semaphore through 1000 1088.254994992 - 1088.354888003

procs --------memory------- --swap-- ---io-- ---system-- ------cpu-----
r b free buff cache si so bi bo in cs us sy id wa st
2 0 574168 24924 186200 0 0 0 5 10557 20121 3 22 75 0 0
0 0 574168 24924 186208 0 0 0 3 10333 19870 3 22 75 0 0
0 0 574136 24932 186200 0 0 0 7 10381 19985 5 17 78 0 0
0 0 574192 24932 186208 0 0 0 0 4173 7658 4 7 89 0 0
0 0 574192 24940 186200 0 0 0 5 475 83 3 0 97 0 0
0 0 574020 24940 186208 0 0 0 1 394 185 3 1 96 0 0
0 0 574068 24948 186200 0 0 0 5 332 83 3 0 97 0 0


1ms × 1000 = 1s
Semaphore through 1000 1184.931598033 - 1185.931531995

procs --------memory------- --swap-- ---io-- ---system-- ------cpu-----
r b free buff cache si so bi bo in cs us sy id wa st
1 0 573160 25456 186232 0 0 0 12 1645 2264 5 1 94 0 0
2 0 573128 25456 186232 0 0 0 0 1580 2170 4 1 95 0 0
0 0 573160 25464 186224 0 0 0 9 1863 2222 5 1 94 0 0
0 0 573176 25464 186232 0 0 0 0 708 494 3 0 96 0 0
0 0 573176 25472 186224 0 0 0 7 341 107 3 0 97 0 0
0 0 573176 25472 186232 0 0 0 0 334 78 3 0 97 0 0
0 0 573144 25480 186232 0 0 0 5 520 86 3 0 97 0 0


※ 参考
10ms × 1000 = 10s
Semaphore through 1000 1336.274035399 - 1346.274105024

・タイマが呼び出される間隔を 1ms にすると、かなり安定して動作します。
・CPU 使用率も空転しているのと大差ありません。

・100μs でも安定していると見て良いでしょう。
実際、秒間1万回の割込みがしっかり掛かっていて(system の in カラム値)
割込みを処理するためのコンテキストスイッチ(system の cs カラムの値)
ちゃんと割込みよりも大きな数値が記録されています。

・しかし、10μs にすると状況は一変します。
まず、本来秒間10万回あるはずの割込みが4万回程度しかなく、
コンテキストスイッチは1000回以下の有様です。
・さらにタイマ呼び出しが1000回発生したら止めるつくりになっているのですが
実際は 4061回も呼び出されてしまっています。
ついでに、割込みがキューイングされているため、
メモリリークのような挙動もありました。

それでも、通常の Linux で安定して動作するタイマ呼び出し間隔は
せーぜー 10ms と言ったところなので、ラズパイはかなりリアルタイム寄り
チューニングされていることを伺わせる結果となりました。

今日の作業:タイマ割込みの開発 10H
続きを読む
【2016/09/16】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 ラインデコーダのカスケード接続
次のお題は「ラインデコーダのカスケード接続」です。

まず最初に、Raspberry Pi 3 model b+ のピン配置を見てみましょう。
これは Microsoft 謹製のイメージに、
プルアップの GPIO をピンクの丸で囲ったものです。
#一昔前ならこんなことしようものなら MS の法務部がすっ飛んでくるのを恐れたものだがw

raspberryPi3_modelB__PinAssign.png








GPIO は 2~13 と 16~27 の、24 本のピンがありますが、
では、25個以上の LED のうち、一つだけをLチカさせたい時は
どうすればよいでしょうか? まさかもう一つラズパイ買う?
このような要件に対する解法の一つとして「ラインデコーダ」とゆーものがあります。

今回使ったのはこの二つ。

SN74HC139N 2 to 4 ラインデコーダ
TC74HC138AP 3 to 8 ラインデコーダ

ラインデコーダとゆーのは、例えば
2 ビットの入力で 4本の出力を選択することができます。(2 to 4 と表現します)
つまり、2つのGPIO ポートで、4つのうち一つのLED だけを
つけたり消したりすることができるようになるわけです。

そして、なんでわざわざ二つ使ったのかと言いますと、
ラインデコーダにもちょっと弱点がありまして、具体的には
6 to 64 のような多数の出力を持つラインデコーダは売っていない
とゆーことがあげられます。
#4 to 16 までは一応あるみたいだけど、これですら入手は困難。

とゆーことで、ラインデコーダには、ラインデコーダをカスケード接続して
あたかも多数の出力を持つような回路を作ることができます。
今回は、前段 2 to 4 と 後段 3 to 8 を使い合計 32出力。
使う GPIO の数は 5+1 としています。

えっ?32出力なら5ビットで表現できね?と思う人もいるでしょーが
+1 はラインデコーダ全体からの出力を有効/無効にする制御に使用しています。
そうする理由は日本語を読むよりソース見た方がわかりやすいと思います。

ちなみにひでのふは
8本のうち1つだけを ON にして、それ以外は確実に OFF にしたい
とゆー要件を実現するために使っていたりします。
#なので、実はカスケード接続は必要なかったりするw

回路の結線はこんな感じ。今回は SN74HC139N 1つと TC74HC138AP 4つで
5 to 32 のラインデコーダを実現しています。

Raspberry Pi GPIO_16 <=====> SN74HC139N 2G
Raspberry Pi GPIO_20 <=====> SN74HC139N 2A
Raspberry Pi GPIO_21 <=====> SN74HC139N 2B

Raspberry Pi GPIO_13 <=====> Every TC74HC138AP A
Raspberry Pi GPIO_19 <=====> Every TC74HC138AP B
Raspberry Pi GPIO_26 <=====> Every TC74HC138AP C

SN74HC139N 2Y0 <=====> #1 TC74HC138AP G2A
SN74HC139N 2Y1 <=====> #2 TC74HC138AP G2A
SN74HC139N 2Y2 <=====> #3 TC74HC138AP G2A
SN74HC139N 2Y3 <=====> #4 TC74HC138AP G2A

GND <=====> Every TC74HC138AP G2B
Vcc <=====> Every TC74HC138AP G

#2 TC74HC138AP Y6 <=====> #1 LED
#3 TC74HC138AP Y7 <=====> #2 LED
#2 TC74HC138AP Y7 <=====> #3 LED
#4 TC74HC138AP Y7 <=====> #4 LED
#4 TC74HC138AP Y0 <=====> #5 LED
#1 TC74HC138AP Y0 <=====> #6 LED


CIMG6570.jpg CIMG6571.jpg







・LED は 100Ωの抵抗を直列で繋いでいます。

・各ラインデコーダの Vcc と GND は記載を省略しています。
あと、入力の空きピン(具体的には SN74HC139N の1G, 1A, 1B )は
Vcc と接続しておくことをお勧めします。

・パスコンは省略しました。本当は 0.1μF のセラミックコンデンサで
各ロジックICの GND と VCC をつないだ方が良いです。

・本当は、Raspberry Pi GPIO_16 は SN74HC139N 2G ではなくて
Every TC74HC138AP G に結線した方が良いと思います。
この時、SN74HC139N 2G は GND と結線します。
これをしないと、デフォルトで #1 TC74HC138AP Y0 が選択されます。

プルアップの GPIO は起動してから初期化するまでの間
2.0V 程度の電圧が出力されています!

この電圧は今回使用しているラインデコーダにとっては、
基本的には H レベルなのか L レベルなのか区別のつかない電圧となります!
#Vcc に 3.3V を供給する CMOS ロジック IC は、ほとんどがそーですw
なので、ラインデコーダをプルアップの GPIO に接続するのはお勧めしません。

・TC74HC138AP も SN74HC139N も選択時が L レベルになるので
実際は選択した LED は消灯します。(選択されていない LED は点灯)
なんでそーしているのかは説明がすんげえ面倒(ひでのふもちゃんと理解してない
嘗てのTTLにおけるソース電流とシンク電流の差によるもの。CMOSが天下取った今では歴史的経緯

なので省略しますが、カスケード接続する時はロジック変換が不要になります。

・選択した LED だけを点灯したいっ!てなら、インバーター使えば幸せになれますw
#「♪取り替えるーならインバーター」を思い出したあなたは、なかなかのおっさんです!

今日の作業:ラインデコーダの開発 8H
続きを読む
【2016/09/17】 TZNM | トラックバック(0) | コメント(0) | page top↑
今月の密林 2016/9
今月はアフタヌーンに加え、単行本が3冊とCDが2枚とゲームが1本です。

・ネプテューヌ始めてみます。今月廉価版の2が出るみたいなんだけど
先月廉価版の1が出たばっかりみたいなので、まずはそっちから。
・イカ娘 22 は完全に買い忘れてました...
・Chemical Brothers はあまぞん経由のホントに安いところで。
オランダから発送って書いてあるけれど、ホントに来るのかなぁ...


続きを読む
【2016/09/20】 アフィリエイト | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 A/D コンバータと D/A コンバータ
今回のお題は「A/D コンバータと D/A コンバータ」です。

まず、簡単に A/D コンバータと D/A コンバータが何かを説明しておくと

・A/D コンバータ:アナログ電圧をデジタル信号へ変換する。
・D/A コンバータ:デジタル信号をアナログ電圧へ変換する。

です。つまり D/A コンバータの出力を A/D コンバータの入力に接続すると
いい感じに双方をテストするための環境が作れるとゆーことです。

今回使用した A/D コンバータ(以下 ADC)と D/A コンバータ(以下 DAC)はこちら。

・ADC:Adafruit 製 ADS1015
→ 姉妹品の ADS 1115 とゆーのがありますが、こっちは 16bit 版。
今回はそんなに精度は必要ないので 12bit の ADS1015 を使用。
・DAC:秋月電子製 MCP4725 EEPROM 搭載 12ビット D/A コンバータモジュール
→ 秋月電子製の、パスコンと抵抗だけが乗った簡単なモジュール。

どっちもはんだ付けが必要なので、頑張ってはんだりましょう!
この時、ちっちゃいブレッドボードがあると便利です。
ここでもモグラタタキゲームが大活躍ですw
ちなみにちっちゃいブレッドボードの使い方は、ADS1015 のチラシ見ると載ってます。

回路の結線はこんな感じ。今回は DAC を2つ使用しています。

Raspberry Pi GPIO_2 <=====> #1 DAC SDA / #2 DAC SDA / ADC SDA
Raspberry Pi GPIO_3 <=====> #1 DAC SDA / #2 DAC SDA / ADC SDA

GND <=====> #1 DAC A0
Vcc <=====> #2 DAC A0
GND <=====> ADC ADDR

#1 DAC VOUT <=====> R 4.7k <=====> ADC A0
GND <=====> ADC A1
#2 DAC VOUT <=====> R 4.7k <=====> ADC A2
GND <=====> ADC A3


CIMG6597.jpg CIMG6598.jpg









・はんだはめんどいですが、配線は今回の方がラクチンですw

・みんなパスコンが付いているので、気にせずラズパイに繋げればといいと思います。

・それでも、ラズパイの I2C 接続は通信線なので、ケーブルは撚った方がいいです。

・ラズパイ側にプルアップが付いているので、DAC のプルアップは不要でしょう。
むしろ ADC のプルアップはオミットしたいところ。

・ADC の空いている入力には GND を繋げないと入力値があばれますw

続きを読む
【2016/09/22】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 A/D コンバータと D/A コンバータ のプログラミン
回路の確認ができたら早速プログラミンです。

※ソースの解説。

volt_ctrl.c

・プロセス起動時、パラメータの指定が2つ必要です。
第 1 パラメータ:#1 DAC の出力値(16進数で1~3桁)
第 2 パラメータ:#2 DAC の出力値(16進数で1~3桁)
どっちも厳密なパラメータチェックはやってないので注意。

・config の意味は以下の通りです。詳細はデータシートを参照。

MSB                                                          LSB
F E D C B A 9 8 7 6 5 4 3 2 1 0
OS| MUX | PGA | MD| DR | CM|POL|LAT| QUE |
1 1 X X 0 0 1 1 1 0 0 0 0 0 1 1


OS : 0=意味なし / 1=一発だけ A/D 変換を実行
MUX : 000~011=差分入力モード / 1xx=単純入力(xxはチャネル番号)
PGA : 入力範囲・000=±6.144V/ 001=±4.096V/ 010=±2.096V/ 011=±1.096V 以下略
MD : 0=連続変換モード / 1=一発変換モード(OSを1にする時に意味を持つ)
DR : 変換レート・特にこだわりが無ければ 100=秒間1600変換でおk
CM, POL, LAT QUE : 今回コンパレータは使わないので 00011 でおk

・wiringPiSetupSys() は呼ぶ必要はありません。呼んでも実害はありませんでした。

・wiringPiI2CSetup() の返値はファイルハンドルです。
とりあえず close() が効いているので間違いないかと。

・I2C に 2バイト書くときは WriteReg8 を、3バイト書くときは WriteReg16 を。
wiringPiI2CWrite() は、どうも想定通りの動作をしません...
# 4バイト以上書くときはどうするのかって? まあ、そん時考えようw

・I2C の「デバイスレジスタ」は単に IC2 に送信する 1バイト目に過ぎません。
なので 2バイトのデータを必要とする DAC に書き込む時には WriteReg8 を使って、
パラメータの reg に 1バイト目を、data に 2バイト目を設定しています。

・ADC の入力を読み取る時は
wiringPiI2CWriteReg16() で config を書き込む
 ↓
wiringPiI2CReadReg16() で ADC の入力を読み取る

と、やってやる必要があります。

ここで活躍するのが ntohs() です。
実際は 0xC383 → 0x83C3 みたいな変換をして渡しています。
#今回ここにたどり着くのに凄い時間かかった...
戻り値に ADC の入力値が返ってきますが、ここも ntohs() で変換が必要です。

・ReadReg16() やReadReg8() は、実際は reg を 1バイト目として I2C に書いて、
その応答を受け取るみたいな動作をしているようです。

・メインプログラムの後ろに続く大量の #define と readADC_SingleEnded() は
今回ひっじょーに参考になったサンプルプログラムなので
そのまま載せてあります。

うまい具合にコメントアウトを外すと、readADC_SingleEnded() を
利用したプログラムになります。ADC の config を確認したいときに便利かも。

【2016/09/23】 TZNM | トラックバック(0) | コメント(0) | page top↑
TZNM 制作日誌 第4回おかいもの
今回はアナログ周りをアキバに買いに行きます。
今回はだいずだけじゃなくてえびちゅも一緒。
今度はえびちゅがお目当ての羽ガンダムを一発で当ててましたw

・有機ELキャラクタディスプレイモジュール 20x2行 黄色 1680
→ LED をたくさん点けるよりこっちのほうがいいかなと思って。

・電圧コンバータ LTC1144CN8 ×2 600
・積層セラコン 10μF 50V ×5 250
→ 前回 MIVR3261 が上手く動かなったので、今度はこっちで挑戦。
→ データシートにはタンタル使えって書いてあったけど、
果たして積層セラコンで上手く行くのかどうか...

・オペアンプ LMC662CN ×4 480
→ 今回のキモとなるオペアンプ。これで減算回路と非反転増幅回路と作ります。
→ LMC662 の良いところは、これ1つでオペアンプが2つ入っているのと
フルスイングな点です。

・半固定抵抗 20kΩ 増幅アンプ調整 ×4 80
・半固定抵抗 50kΩ 減算アンプ調整 ×4 80
・抵抗 10KΩたくさん 減算アンプ用 130
・0.1uF のセラコンたくさん 1350
・抵抗 51KΩ たくさん 100
→ オペアンプの周りを飾る抵抗たち。
→ 10KΩはなぜか秋月では売り切れで...ちょっと高いけど千石で購入。
→ パスコン用に買った 0.1uF のセラコン結構高かったです...

・CD74HC4049E 6回路Hi/Lowレベルシフタ ×10 400
→ ラインデコーダからの出力を反転してリードリレーの制御に使うための石。

・長いブレッドボードとジャンパー線たくさん 520
・普通のブレッドボード 210
→ さすがに足りなくなってきたので追加で購入。

・RC-S730 felica リーダ 800
・RC-S730 FFC 変換コネクタ 540
→ SWITCH SCIENCE 製の felica のリーダ。
→ こいつで長い I2C 通信を試す...

・はんだ吸取線 190
→ こないだ MIVR3261 が上手く行かなかったのはコイツが無かったせいかも...

・ミニピンプラグ 460
・スピーカー 0.5W 程度のヤツ 100
→ とりあえず音も出さないとね...

交通費:1580

このエントリの合計費用:9550


・足りないもの。
→ リードリレー SS1A05D。秋月に店舗に在庫無いって...
→ 抵抗 15KΩ、18KΩ、20kΩたくさん。
→ 16bit シフトレジスタ xx74HC673。
→ SWITCH SCIENCE の 23k256 はまた今度買う
→ LTC3124 昇圧型DC-DCコンバータモジュール
→ DC-DCの入力に逆電圧がかからんようにSBD10本。
→ 電池ケース。リード線付き。4本直列を8個分。
→ 錫メッキ線
→ エネループ8本とエネループ用充電器
→ カラーの熱圧縮チューブ
→ テプラ用熱圧縮チューブ
→ ラズパイ+A 2台
→ I-O DATA USB-BT40LE ラズパイ+A の NIC 代わりに使えるか?
お試しなのでこれは一つだけ。
→ microSDカードは3枚
→ カラーのピンヘッダ
→ CRD 0.1mA 40本
→ 先っぽが金属じゃないドライバー
→ 多回転半固定ボリューム たて型5kΩ10個。
→ サンハヤトのブレッドボード2丁
→ こんどこそ小物入れ。抵抗しまわないと...

【2016/09/25】 TZNM | トラックバック(0) | コメント(0) | page top↑
我が家の家計 2016/9
今月の増加分:60101
今までの増加:-312542

車の減価償却引当て:2120000
内240000を引き出し、210400 を東京電力に投資(平均175.33)
レジャー費シーリング:220000/360000

今月は結局どこにもレジャーに行かず...
毎年恒例のサマーランドもえびちゅの気まぐれで行かず...
シルバーウィークも、ほぼコドモのイベントで潰れました。
#1日だけ、だいずを連れて東京の科学技術館に行ったぐらい。

えびちゅが柔道の試合に勝つと少し高めの外食に行くことにしているんですが
9月の2回の試合で1勝もできず...
まあ、家計的にはいい感じなんですが、なんか寂しいですね。

その割にプラス額がいまいち小さいのは
やっぱり塾費用がボディーブローのように効いています。

来月のカード払いは10万です。
TZNM 関連の支払いが3万強あるので少し多めです。

【2016/09/26】 家計 | トラックバック(0) | コメント(0) | page top↑
超次次元ゲイム ネプテューヌRe;Birth1 ファーストインプレッション
ネプテューヌはじめてみました。

元々少し古いゲームなので、それなりにインプレッションは存在するのでしょうが
これは自分の備忘録も兼ねているのでよしとしますw
まあ、ここんとこずっと IoT の話ばっかりなので息抜きとしてもねw

ちなみに現在3章で、中ボス倒せなくてレベル上げ中って感じです。

【やっぱこれギャルゲーなんすかね】

見た目からしてギャルゲーっぽいんですけど、登場人物も女の子ばっかりですw
一応男性も出てきますが、今のところモブでしかでてきてないですw

そもそもこのゲーム。ネットとかゲームとかそーゆー世界を擬人化している
ものが多く、ひでのふも知らなかったよーなネットスラングもふつーに出てきます。
わかるヤツには大うけなのかもしれないけど、相当どっぷり浸かってないと...

そして特徴的なのが敵キャラ。スライヌぐらいならまだ可愛い物で
契約天使とかゴーストボーイとか、ヤバい(主に版権的に)敵キャラもでてきてますw
さすがに自重しているのか、任天堂系のキャラは居ないようです...

一応ストーリーは4人の女神が守護女神戦争(と書いてハードせんそうと読む)
戦い抜くなかで起きた物語とゆーことになっているのですが
この4人の女神が一体なんのゲームハードを代表してるのか、判りません。

【通勤電車の中でも気にならない】

ギャルゲーなので CERO も甘くてレートBです。
乳揺れとパンティラぐらいっすかねw
基本は頭の悪くなりそうな紙芝居と電池の持ちが悪そうな3D戦闘で
エロい1枚絵とかはめったに出てこないので、
満員電車の中でも背後を気にせずにプレイできるのは素晴らしいですw(どこがだ)

【そんな軽いノリで楽勝かと思いきや】

基本的に結構キツいです。
仕様書だのコンボスキルだのリリーレベルだのゲームルールが結構複雑で。
最初のうちからある程度理解して進めて行かないと
レベル上げてゴリ押しとかも上手く行かないです。

新しい武器も新しい街に行けば手に入るとかそんな甘いもんじゃなくて
「仕様書入手」→「材料集め」→「お店で買えます!」
みたいなのを一つ一つこなして行かないとダメだったりします。
回復薬ですらこのローテーションをこなさなきゃならないとゆーねw

さらに戦闘も結構キツくて、そもそもセーブポイントが限られている上に
雑魚がウィルスに感染して突然超絶強くなって死亡ってのがよくあります。
てゆーか序盤から中ボス2連荘ですw
やっと中ボス倒したー!
と思ったら回復する間も無くもっと強い次の中ボスが来るとゆー鬼仕様。

はまじ。ってのはこーゆー時に使うんでしょうなw

【2016/09/29】 ゲーム | トラックバック(0) | コメント(0) | page top↑
| ホーム |