[管理者用]

イゼルローン日誌
宇宙・・・それは人類に残された最後の観光地である

         
戻る 
01月
02月
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
1998年
1999年
2000年
2001年
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年

2017年07月
7月31日 ・ついでなので、最後の機能追加・・・と思ったらうまく動かない。これは何かあるな。どうも、モータからの回転パルスがうまく拾えていない感じだ。
・なんか変だなと思ってもう一回仕様書を読み返して、実物と突き合わせ・・・・あぁ、やはりな。ありがちだけど、オープンドレイン出力じゃないか。追加で回路を入れるのも時間が無いな。とりあえず、回転させる時間で処理してしまおう。

7月30日 ・ロボットのプログラムその2というところで、センサのチェックとその回復動作を入れ込む。
・大まかにこうやればいいという方針は立てていたし、予備的な実験は済ませていたのであとは一気に書き上げるだけ。とはいっても分量は大したことはない。
・とりあえず完成して動かしてみる。あれ?なんだかおかしいなと思ってデバッグダンプを見ていたら、センサの値が規定値に達しないのでエラーリカバリ動作に入っている。なるほど、正しくリカバリしたんだ。
・リカバリばかりやっていても仕方ないので、正常値が入るように細工してリトライ。今度はちゃんと最後まで処理が進んだ。色々やってみたけど、問題なし。予定通りちゃんと動いたな。

7月29日 ・ロボットのプログラムを見なおしている。
・面倒なのはシングルタスクを前提とせざるを得ないような環境下で擬似マルチタスクを実現しないといけないこと。
・上位計算機(というか、そっちもマイコンだけど)との通信をやりながら、あっちのセンサをチェックしたり、こっちのモータの管理だのをやらなくてはならない。マルチタスクOS下なら良いんだけどな。
・擬似化するのにはそれぞれのスタックなども分離して、単にスケジューラに戻すタイミングをプログラム内で指定するだけの手もあれば、タスクそのものをちょっと処理してはreturnさせるという、完全にシングルタスクの分解手法がある。前者はスタックのすり替えなどが面倒なことになるし、後者だとタスクを細かくステート分けして、呼ばれた時にそのステートに入ってちょっと実行しては戻すという具合で、プログラムの行数も肥大しがちだし、動きが増えてくると、プログラムの流れが追いにくくなりやすい。
・もっと簡単な解決策はないかなとあれこれ思案しているうちに浮かんだ試案・・タスクそれぞれを専用のインタプリタ言語のようににする方法。
・擬似マルチタスク化するようなブロック単位に一回全部バラバラに分けておいて。これを呼び出す順番とか状態の遷移条件などを書いたスクリプトを用意。メインではそれぞれのタスクのスクリプトのポインタを保持しておけば、タスク切り替えはスクリプトポインタの切り替えをするだけだ。
・と、皮算用してみたけれど、どうかな。とりあえずやってみるしかないな。

7月28日 ・そんなところで、仕事関係で事件発生。やらなくてはならないことがどっさり増えそうな予感。まぁ、仕事があるのは良いことだけど、これはちょっとジタバタしないといけなさそうだ。


7月27日 ・電卓の電池入れ替えをしてみる。あれ?やっぱり真っ黒だと思ったらどうもコントラストがいけないらしい。
・調整方法は・・とマニュアルを検索したけど流石に古すぎて電子化はされていないようだ。
・多分ソフトウェア設定で出来るだろうとメニューを探して「OPTION」にしたらかすかに「1:CTRST」という文字が判読できたので、1キーを入力して+/−を押したら大当たり。
・DARK<- ->LIGHTとあるんで濃さが変わるという趣旨っぽいけど、こちらはあまり変わらなかった。

7月26日 ・というところで、いつもながらの勇気を持って基板屋さんに製造依頼をする。ミスの無いことを祈りつつというところ。
・机の引き出しをあけるといつから鎮座していたのか、シャープさんの関数電卓EL-5120が登場。電源を入れてみると液晶が真っ黒。これは電池がボチボチアウトかな。液晶3行表示だけど、フォントが今ひとつ気に入らなくてあまり使わなかった記憶がある。とりあえず電池入れ替えくらいしてみるか。

7月25日 ・ロボットは一応オーバーホールをお願いする。
・ロボットのコントローラアプリをNode-REDで作ってみたのだけど、現状の1歩ずつ動くテスト用に加えて連続前進・後退なども欲しい。
・こういうときに「連続動作コマンド」をファームウェアに追加して、それを呼ぶ方法もあるけど、アプリ側で前進後退などのコマンドを人間に代わって自動的に連続発行する手もある。
・とりあえず実機がなくても簡単に確認できる後者の方法を試してみる。ロボット側の応答はInjectNodeを使えばいい。
・ちょっとつまらないミスもあったけど、うまくいった。ちゃんと連続動作停止もできる。こういう改造が簡単にできてしまうのがNode-REDの良いところだな。
・というところで、基板の最終チェック。とはいってもPCB-CAD上でのDRCはほぼ信用できると思うので、ネットリストと回路図を付きあわせて、回路図の1本ずつを追って確認。電源ピンも再確認。大丈夫そうだ。

7月24日 ・以前からなんとなく紙の国語辞典が欲しいと思っていた。今月少し残金が出たので買うことにする。
・電子辞書もあるので、語彙数よりなんとなく読んだり、周りを眺めるというのがメイン。ということで、立ち読みして、最後まで明鏡と新名解とで悩んだ。誤用に厳しい明鏡さんと、半歩踏み外した新名解というところか。今回は明鏡さんを買ってみることにした。
・昨日のセンサ問題をちょっと確認。現象は整理できた。いくつか重なっていたので、疑問符がたくさんついたけど、整理してしまえば簡単なことだ。
・基板のアートワークも大詰めの微調整。明日くらいには出図できるかな。
・三次元CADのFreeCADのメニューを見ていて文字が使えることがわかった。Draftで文字を入力して配置。それをPullしてやると文字の形の立体になる。もちろん、文字はフォントファイルを引っ張ってくればいいし、やってみたら日本語も大丈夫。
・ためしにひらがなの3Dデータを作ってみたら確かに出来上がって、STLに出力。これをSlic3rでスライスしたら見事にひらがなのg-code。
・試しに縦横4cmで、1cm厚の「ん」を出力しみたけど、これって、なんとなく書見台とか卓上カレンダを置く足みたいな感じに使えそうだ。


7月23日 ・さて、ロボットの整備が終わって戻ってきた。とりあえず大きな変更をしたリカバリ動作のための事前確認は成功。ちゃんと予定どおり動いている。
・というところで、センサの値を読もうとしたらうまくいっていない感じ。なんでだろうと、デバッグ出力をつけてprintfデバッグで確認したらやはりおかしい。何でだろうな。
・とりあえず、これはこれで後で確認するとして、基板のチェック。実際にアートワークしたものを原寸で出してものをあてがったりしているとやはりこうしたい、あぁしたいという細かい調整が出てくるもので、それに応じてパターンも少し変更。こういう時でもPush and Shoveは便利だな。もう、この機能の無いCADは使えない体になりそうだ。

7月22日 ・プログラムの変更作業前に、まず全体の動きの整理。今まではエラー発生時の挙動は考えていなかったけど、これを織り込むとなると、意外と面倒くさい。でも、これをしっかり入れておかないとどうにもならなくなってしまう。まぁ、最後は諦め離脱してしまっててアンビリカルワイヤーで回収してもらえば良いのだけども。
・ラジオを聞いていたら、原子炉格納容器内に入れたロボットについて「無線じゃないんですか!?」なんて言っているコメンテータ(なのかな?)。そんなところで通信途絶したら・・とは思わないのだろうな。まぁ、それだけ日本の携帯電話だのの無線インフラの品質が良いということなのだろう。
・ところで、捨ててきてしまった他のロボットはいずれ回収するのだろうか。


7月21日 ・そんなところでロボットのファームウェア。いろいろ変更というのか仕様追加のお願いがきていて、対応するのがちょっと大変。まぁ、頑張ってやってみるしかない。
・以前作ったプログラムをC++な感じで整理し直そうともしているのだけど、これも意外と分量が多くなりそうだな。頭を整理しないとひどい目にあいそうだ。


7月20日 ・いろいろとやることが詰まってきた。3案件同時進行ということで、それなりに捌くスケジューラが必要なのだな。

7月19日 ・というところで、振り込みの準備をしておく。今月はあまり使わなかったので手元の財布の中はお金が少し多めに残っている。iPhoneでも欲しいような気もするけど、ここはこらえどころかな。

7月18日 ・なんか残業代ゼロを連合が認めるだのなんだのと騒いでいる。これと「仕事と家庭の両立」とかなんかイクメンとかいう気持ちの悪い言葉とかと、どう整合させるのだろうと考えると、残業ゼロではなくて、欠勤ゼロの運用をするしかないのではないかということになる。
・これを運用するなら、一体何をどれだけやることを前提にその報酬なのかということを明確に決めないといけない。
・それぞれの業務ごとに明確に単価設定を行う、もし単価設定になじまないなら、時間設定をして、その人の目安時間単価を掛けて金額設定をするっていうことになるだろう。
・たとえば月50万円の人が150万円の仕事を三ヶ月で受けているなら、この三ヶ月間、もうその人の「残り時間」はないわけで「その他一切の業務お断り」となるわけだ。もちろん、三ヶ月もかからず二ヶ月で終わったなら残りの一ヶ月は出社する必要すらないということだ。
・果たしてこれを容認できるのだろうかな。

7月17日 ・とりあえず、回路修正が出来たので仮アートワーク。以前のものと細かい部品は大きく変わらないのでそのまま流用して部品交換付きでネットリスト読み込み。
・ラッツネストを表示させてざっと表示させてみながら、配線が楽になりそうに回路図を修正してまた読み込んでの繰り返し。
・部品のレイアウトも大きく変更して、とりあえずこれでいいかということで配線。
・以前も実感したけど、KiCADもpush-and-shoveができるようになって格段に楽になった。とにかく通したいところに押し込んでいけば、勝手に避けてくれる。以前のようにあっちを動かし、こっちを動かししていたのは一体何だったのだろう。

7月16日 ・さて、基板の設計。元になる回路図やアートワークはあるけど、マイコンのパッケージ変更に伴ってパターンも大幅変更。

7月15日 ・DSの充電が終わったので使ってみる。電池がすぐ切れるかどうかのチェックだけど、大丈夫。リチウムイオン電池って結構大丈夫なものなのかな。

7月14日 ・すっかりDS文学全集専用機と化しているNintendoDSのヒンジ部分が折れて、だましだまし使っていたのだけど、ふとハードオフを覗いてみたらかなり擦り傷だらけなDSが1200円なりで売っていた。スタイラスペンも無くなっているけれど、今使っているものが使えるからそれでいい。バッテリもどうだかわからないけど、これも移し替えればいいだろう。一応10日間保証ということで、初期不良には対応してくれるようでもあるので、買ってみた。
・バッテリを入れ替えると初期化されるのかな?とりあえず動いたようだ。

7月13日 ・時代錯誤なバラマキLED電球交換が始まっているる。「環境」をキーワードにした、ポッと出てすぐ消えるような打ち上げ花火施策。交換はいわゆる「街の電気屋さん」しか対応していないということなども含め、全てにおいていかにも・・・な選挙腐敗臭がするし、築地豊洲問題と同様の穴だらけの杜撰さで、金をドブに捨てることが大好きな都知事らしさ一杯でもある。
・金はすでにドブに落としてしまったらしいし、何事も体験だ。ドブさらいして落としたお金のかけらくらいでも拾ってみるかと、家でデッドストック状態だった白熱灯を二個持っていくことにする。
・こんなことに付き合わされる電器店もたまらないだろうなと思いつつも、検索して見つけたところに持って行くと、住所氏名に加えてメールアドレス欄までついているけど、書かなかった。
・電球色と昼白色があって、昼白色を選択。アイリスオーヤマのLD7N-G-6T2。810lmというから、60W相当。
パッケージに「LEDムーブメント東京都 転売禁止」と書かれたシールが貼ってある。5年保証だというから領収書だけは保存しておくかな。とりあえず、Zライトに使っていたものを玄関の白熱灯に移して、Zライトに装着。

7月12日 ・さて、クラスでまとめ上げていくことを考える。
・最初はどうしても手続き志向になってしまうので頭の中をもう一回整理。
・だいたい、C++っていうとアプリケーションレベルのプログラミングになるので、たとえば派生クラスっていうと「共通的な機能を持ったクラスを元に拡張していく」っていうイメージになっていることが多いけど、組み込みなもので使っていくとこの逆の感覚もありだ。
・上位階層とのインターフェース部分や共通的に使われる関数を基底クラスにしておいて、ハードウェアにアクセスする、ドライバ的な部分を派生させたクラス側にお任せするわけだ。
・この時お役立ちなのが仮想関数(純粋仮想関数)で、関数名と引数は決めておくけど、実際のハードウェアの違いは派生したクラス側の実装によって吸収する。ハードウェアが違っていても同じ使い勝手になる。
・たとえば基底クラスでは「LEDをON/OFFする関数」を仮想関数としてエントリだけ用意しておく。そして、これを利用して1秒周期で点滅させて戻ってくる関数を作る。
・これを元にハードウェア別に派生クラスを作成して、実際にLEDのONやOFFをする関数をそれぞれの派生クラスで作る。
・これで、基底クラスから継承されたLED点滅関数を呼ぶと、それぞれのLED点滅関数が呼ばれるということになるという具合で、めでたくハードウェアの違いが見えなくなる。
・よし、この手でいこう。

7月11日 ・暑い、とにかく暑い。電気代の節約よりも命のほうが大事である。先日打ち合わせた時も熱中症の話になって、いろいろと考えさせられた。
・そんなこんなで、少し昔のファームウェアの見直しを考える。だいぶゴチャゴチャになってしまったのを一回全部整理しようという魂胆だ。
・PSoC5LPを使っているので、PSoC Creatorの下でarmのgccが走っている。gccならc++も受け付けられるだろうということで、ちょっと検索してみると、まずc++のソースコードを拡張子.cppで作っておいて、プロジェクトにインポート。ファイルの種別をCのソースファイルだっていうことにすると、コンパイル時の個別オプションをつけられるようになるので、+x c++を負荷してやればいいようだ。
・あとはC側から呼ばれるものや、関数プロトタイプの類をextern "C"{};の中に突っ込んでやればいい。
・ちょっと試しに適当なソースを書いてmain()から呼ぶようにしてみたけど、ちゃんとリンクできたようだ。
・これでclassが使える。だいぶ見通しが良くなりそうだな。

7月10日 ・九州の豪雨被害でレッドサラマンダーとかが活躍しているらしい。
・確かにあれくらい道が荒れてしまうと並の四輪駆動車なんて話にならないな。
・と、書いていて、そういえばジムニーシエラにクローラを付けていたのを見たな・・と思い出して検索したら出てきたハイパーデルタ
・別に本体はジムニーにこだわらないし、車検も通せるらしい。タイヤ交換並の手軽さだ。本格的なところはもちろん専用車両にかなうわけもないが、たとえばジムニーシエラならほぼ軽自動車サイズ(エンジンは大きいけど)で、林道のような狭くて路肩の弱いところでも入って行きやすいような気もする。
・大雪のときも役に立ちそうだし、市区町村なりの車両の備品にしておいて、災害が起きそうなときにはタイヤをクローラに交換しておくという程度の対応でも結構役に立つんじゃないだろうかな。

7月9日 ・熱波熱波。冬物の分厚い毛布とかをまとめてコインランドリーで洗ってみる。毎年のことながら「こんな色だったけ?」である。乾燥機を使うか悩んだけど、この天気なら大丈夫だと踏んで持ち帰って外干し。途中裏返してほぼ完全に乾いた。こういう大物を干していると日除けにもなって具合がいいな。
・さて、mbed対応のためC++にも対応させたライブラリをPIC/AVR/PSoC/RaspberryPiの各マイコン向けにビルドしなおして動作チェック。PSoC Designerが今までXP環境だったのだけど、流石にもうWindows10に移行させようかということで、インストールしたらSVG Viewerが無いよというメッセージ。そうですかそうですか。不親切な。改めてインストールして無事環境設定位終わり。
・全部ビルドしなおして、予定どおりノートラブルで一発動作。うん、うまくいったな。

7月8日 ・押入れから発掘したNuceleoのF401REがどうしても動かない。単なるDigitalOutでLEDは点滅するけど、I/Oピンには何も出ないというのは一体何だろうな。まぁ、メインターゲットであるF746の方は何事もなく動いているからいいのだけど。
・さて、そんなところでmbed環境でいろいろやってみる。emptyなプロジェクトを作ってからmain.cppを追加してやると#include "mbed.h"すら通らない。さて、どうしたものかと思ったけどmbed-osを使うという前提にして、githubで「clone or download」をクリックして出てきたURLをmbedのプロジェクトを右クリックして「プログラムのインポート」で利用。Import nameに.gitがつくので削ってやればいい。
・なんか、サンプルプロジェクトとはファイルのツリーが違うけど、これでも動くからいいのだ。
・とりあえず動いたものをExportして、手元のLubuntuのgcc下でmakeしてみたけど、別段問題なし。

7月7日 ・さて、次なるお仕事の都合で、CY8CKIT-041-41XX PSoC 4100S CapSense Pioneer Kitを手に入れる。
・開けてびっくりの、評価キット離れしたこの外装。なぜか左上にはストラップをつけられるような穴まで開いているという念の入れよう。
・ただ、欠点はといえば最初にちょっと開けにくいこと。裏返して薄いカバーを少し持ち上げて、ボリュームと反対側にスライドさせるようにしてやるとパカッと外れた。

中身だけ見てしまえば、ありきたりの評価ボードのようだけど、付いているコイン型の電池はリチウムイオン二次電池だし、技適を通したマークつきのBluetoothボードまで付いているというサービスの良さ。
・ケースの隙間に何かねじ込んでやればこのまま製品だな。



7月6日 ・ちょっと検索したらmbed用のソフトウェアI2Cのライブラリが公開されていたので、ダウンロードしてみる。APIは標準のハードウェアI2Cと同じなので、単にインスタンスを作るところを変えるだけ。
・とりあえずビルドしてやってみる。若干こちらの勘違いもあったので修正したら加速度センサやLEDはちゃんと動くようになったけど、LCDは何も表示されず、ロジック・アナライザで見るとNAKが返っている。
・さて、何が起きているのかな?とりあえずクロックを更に半分近くまで落としてみると動き出した。これはなにかある。
・じっと波形を見ていたら50kbpsなので1サイクルが20μs、半サイクルで10μsでなくてはならないのに、STOPコンディション生成の時に5μsになっている。恐らくこれだな。
・ソースコードを眺めてみると、確かに手が滑っているようだ。これは駄目でしょうということで、修正したら、予定通り50kbpsで動き出した。

7月5日 ・とりあえず、mbedにModulioな環境を構築してみる。が、速度を50kbpsに落とすところがうまく行かない。どうも100kbpsと400kbpsしか設定できないみたいだな。
・別にI2Cで100kbpsに対応できないデバイスなんてまず無いので、良さそうなものだけど秋月さんなどで売っているACM1602などは100kbpsでは早すぎて対応できないようなのだ。実際に波形を見るとNAK・・・というより無応答になってしまったりする。
・仕方ないな。ソフトウェアI2Cで対処することにするか。無駄だ、無駄だ、無駄だ!!と、どこかのレスリング屋さんみたいな連呼したくもなるけれど。

7月4日 ・勝手に送りつけられてくるメルマガの類で「PLM」なんていう言葉が出てきた。私の世代でこの三文字熟語を見るとどうしても「PL/M」なわけで、何のことかと思ったら「Product Lifecycle Management」のことらしい。そうですかそうですか。
・そういえば、PL/Mでコンパイルしたら、似たような処理をしている部分がごっそり一つにまとめられて、処理の違うところだけフラグで分岐するように最適化されたなんていうことがあったな・・・って、このネタは昔も何度か書いたような気がする。いかん、気をつけよう。だから、過去を振り返るのは嫌いなのだ。

7月3日 ・とりあえず、7月は源泉徴収のシーズンであるので、通帳入力。軽く財務諸表を出してみると寂しい数字が並んでいるけど、まぁ昨年度よりはマシということで良いとしよう。

7月2日 ・昨日の続きでライブラリの書き換えをやってみる。とりあえず、ビルドはできたけど、果たしてこれでいいのかな。

7月1日 ・そんなところで7月に入った。7月に入ったということは、10日くらいまでに源泉徴収を収めなくてはならないので、そのための計算をちょっと。一応計算したら1年前と金額は変わらないようだ。前回の納付書を見ながら書いておく。これでいいだろう。
・mbed-OSな環境下に、Cベースの共通I/Oライブラリを移植してみる。CからC++のライブラリを利用するには、結局C++側に踏み台となる(C側から関数として呼び出せる)C++ライブラリ関数を作っておいて、そこからC++のライブラリを呼ぶという、中継方式でうまく行くようなので、その方針で少し書き換え。
・ちょっと手間取ったけど、これで無事にコンパイルは通ってHEXファイルまで出来上がった。
・じゃあ、これをmbedのオンライン環境に持って行ったらどうだろうとやってみたらうまく行かない。多分、ライブラリなどどのディレクトリ構造のせいだろうなということで、オンラインでダミーのプロジェクトを作っておいて、そこにフォルダを移動してみる。
・これなら文句はあるまいとやってみたらうまくコンパイルは通った。ではこれをExportして手元に持ってきたら・・とやってみたら、なるほど、Makefileはmain()のあるファイルの位置とは関係なく、最上位改装にくるのか。なるほどね。
・とりあえず、export時にGCC使ったmakeだよということにしておいたら、本当にそのままmakeできてしまった。動くかどうかは今後試してみよう。


前月 次月
エース