電子工作

2009年9月 2日 (水)

最近の技術雑誌

8月中旬から娘が熱を出していた時,時間があるので読んだのが,最近積ん読状態だった”トランジスタ技術”と”Interface”誌のここ数ヶ月分。

感想としては,”Design Wave Magazine”がリニューアルした影響かもしれないけど,全体的に中身のレベルが高くなっている気がした。

トラ技に関してはイメージセンサやタッチパネルなど,もはやトラ技とは言えないような題材。もっとも,それなりに基礎技術の解説に誌面を割いているので,「ふ~ん」と理解したつもりにはなれるけど自分でジャンクを漁って作って試したりとかの世界ではない。

Interfaceに関しては,FPGAやグラフィックコントローラ,組み込みLinuxと,読者へ要求されるレベルが上がってきた感じ。少なくとも雑誌記事だけで中身を理解するのは厳しいし,検証するのはもっと厳しい。ただ,数理的アプローチと言う論理解析の記事は,そういう世界があると言うと言うことを知らない人も多いと思うので為になると思う。正直,今になって思えば数学をもっとマジメに勉強しておくんだったと後悔したので…

夏休みの自由研究に,FPGAによる○○の制作なんてのが普通になる時代も,もうすぐなのかな…

|

2009年5月 6日 (水)

我が家最古のマイコン雑誌

Ram_197811 GWで家に居る時は結構ヒマなので,もう10年以上経つが引っ越し以来放っておかれている過去の歴史的遺物をチェックしていたら,出てきたのが画像(クリックで拡大)の『RAM』誌。

発行は1978年11月。かれこれ30年前のもの。自分が中学生になったばかりの頃に購入したもの。目的は記憶が正しければ”TK-80用4KバイトRAMボード”だったように思う。

当時,中学校の”電卓クラブ”なる今思えば怪しい名称の課内クラブに所属していて,担当の先生が TK-80E をお持ちで,当時のクラブの面々と遊び倒していた記憶がある。中学2年までだったけれども,マイコン以外にも先生つながりで夏休みに旭川高専で FORTRANに触れ,旭川商業高校で COBOL に触れた。高専では紙カード,商業では紙テープが入力装置。TSS端末が高価だった時代の話。

BASICでFDD上の順編成ファイルを使った「給与計算システム」という記事の中で「一般の読者に普及するには時間がかかりそうです」と書かれているが,確かにFDDがコンシュマーの世界に降りてきたのは高校3年生くらいだったような記憶がある。

記事のプログラムリスト掲載の方法が面白くて,明らかに放電破壊プリンタ(見たこと無い人も多いだろうなぁ…旭川だとスガイのボーリング場で長らくスコアの打ち出しに使われていたくらいしか記憶がない…)で打ち出されたと思われるもの,CRT画面を写真に撮って繋げたと思われるもの,様々だ。当時はドットインパクトプリンタですら高嶺の花だった事を思い出す。

30年前の雑誌なのに,あまり懐かしく感じないのは何でだろうと考えてみると,昨年くらいから購読し始めたCQ出版社の”Interface誌”や,”トランジスタ技術”で盛んにマイコンの動作原理やらを解説しているからなんだろう。

温故知新というけれど,30年前のこの本の中でも,単語だけ拾えば「ゲート(NAND,AND等」「ROM/RAM」「バスとバッファ」「DMA」「チャタリング」「メモリマップ」「相対/絶対アドレッシング」なんて言葉が並んでる。内容だけ比較すれば”Interface誌”の今年の3月号のマイコン初心者用特集より高度かも。

それでも30年の歳月を感じるのは,当時の目的だった4KBのRAMボードを作るのに160×95mmのユニバーサル基板を使っていた物が,今ではSDメモリカードで4GBくらいのが1000円以下で売られていると言うことか。当時なら,4MBくらいまでは想像できたけれど,GBクラスまで,しかもそれが子供の小遣い程度とは。

変わらない物もあれば,変わる物もあると言うこと…かな。

|

2009年4月19日 (日)

ディジタル・デザイン・テクノロジ

リンク: ディジタル・デザイン・テクノロジ.

かなり前に届いていたけれども,まとまった時間が取れなくて積んであった本。"Design Wave Magazine" がリニューアルしたとの位置づけだけど,ちょっと読んだだけでも,対象読者のレベルが上がったというか,より現場寄りに作られている事が分かる。プログラムするためにはケーブルが必要で,自作できる人はともかく,買ったらそれなりの出費になってしまう。

それにしても,FPGA基板が付いてきて,それを使ってデジタルFMチューナーを実際に作ってしまうのだから,隔世の感がある。もっとも,それにトライするにはサンデープログラマでは時間的にもキツいかも。

高校の時は,”物理部”と言う名の実態は当時黎明期を迎えていた8ビットパソコンを使い倒していた所に所属していた。当時にこんなキットがあったら,何を作っていた物やら…。想像するだけでもワクワクする。今の若い人はいいな。

マイコンと違ってFPGAは回路設計や論理設計の世界。難しいけど,若い人には即戦力となるべく,頑張って使いこなして欲しいなと思う。

この路線で編集されていくのなら,自分的には工作の範囲を超えてしまうから必要ないかなと思ったりもした。でも,現場で使われている技術の応用的な側面を解説している雑誌は希有に近いので,高いけど買ってしまうんだろうなと思う今日この頃かも。

|

2008年11月29日 (土)

ColdFireマイコンのコンテスト

ColdFireマイコン基板を使ったプログラムコンテストが開催されていたので,応募総数の足しにでもなればと,以前からここにも書いているLEDチカチカ温度計を出品したところ,「残念ながら二次審査には進みませんでした」と言う丁寧なお手紙を頂戴し恐縮。

コメントで教えて頂いたFlash領域の読み書きを使って,データロガーとして作る部分も,それほど難しくもないので脳内では完成しているんだけどもコーディングする時間が無い。一人で3時間くらい集中できる時間があればなぁと思うのだが。年末年始…かな。気の長い話だ。

余談だけど,今月の Interface誌では FRマイコンのコンテスト事例が紹介されていて興味深かった。FRマイコンの OSD機能を使ってLAN経由の掲示板にと言うのは,ColdFireマイコン基板にも UARTがあるから試してみようかと思っていたのでタイムリーだった。

FRマイコンのOSD活用簡易掲示板については,トラ技の付録基板にあったようなUSBシリアルのBIOSを用意して,コンソールから漢字のドットパターンを送って画面に表示するのが汎用性が高くて便利だと思うので,誰か作って…というか自分で作れよって感じだな。

20年後にもこうい基板が出て,コンテストとか開催されたら,若い者には負けないぞと,そんなジジイになりたいなと思う今日この頃だ。

|

2008年11月 5日 (水)

ColdFireマイコン基板 SilentC バージョンアップ

体調が悪いので寝ながらでもできること…などと考えていたら,パソコンのデスクトップに放置してあった SilentC のバージョンアップファイルがあったのでやってみた。

簡単…に終わるはずが,再起動すると認識しない。何事?と思い,とりあえずリカバリを試み,こちらは成功。素の状態から再びバージョンアップを試みるが,やっぱり認識しない。

で,ColdFire基板特設ページを見に行ったら「macアドレスも初期化されます」とあった。これだ…。スイッチングハブのテーブルから消えるまで ping も通らないってことだな。

現状,ColdFire基板は無線LANルータ BUFFALO WZR2-G300(ブリッジとして使用)に直接つないでいる。これが結構ニブいらしい。

とわかれば,後は時間が解決するはず。バージョンアップしてから5分くらいで見えるようになって一件落着。さらに mac を元に戻したが,今度は速攻で通った。どういう挙動なのやら。バージョンアップはパソコンとクロスケーブルで繋ぐのが一番確実かも。今度はそうしよう。

バージョンアップ直後,不思議な現象に遭遇。ブラウザで温度計のプログラム一式を転送してブラウザから見たら温度の部分に「cr is not found」とか出ている。温度計の SilentC プログラムは lm73 と言うモジュールで,関数 thget() が本体。確かにコンソールから lm73::thget とやっても同じメッセージが帰る。

何でかな?と不思議に思いながらも,LEDピカピカの方を転送して run したら,こちらは普通に動く。オヤと思って lm73::thget したら,ちゃんと温度が表示された。ブラウザからも同じ。推測だけど,グローバル変数を使う場合,SilentC で一度は Mainから実行しないと,CGI 側からは操作できないのかも。

何はともあれ,Windows程ではないけど,一悶着あったのでメモメモ・

|

2008年11月 3日 (月)

ColdFireマイコン温度計にLED(2)

Coldtemp2一日チカチカしていた温度計と化した ColdFireマイコン。これからの季節,旭川は外気が真冬日になるのも近い。もう一個センサを追加して,外にでも置いて,LED を追加してマイナスのフラグにしてみようかと思い,PTA0 に LED を接続してみたらコントロールできない。

はて…と思って悩んだけど,回路図を見たらGPT0/PTA0~GPT2/PTA2って,基板上の3軸加速度センサに接続されてるじゃん。それでブラウザからコントロール可にしてたのは PTA3 だけだったんだと納得。前回は”たまたま”動いただけだったんだ~ちゃんと回路図は隅々まで見なきゃと反省。

で,PTAを使うのは諦めて代替案を検討。同じようにブラウザからコントロール可能なのにポートTC があるのだけども,PTC0はスタートアップ時のSilentC/GDBスタブ切り替えジャンパで使われているから PTC1~PTC3 が使える。PTC1~PTC3,PTA3 これで4個のLED がコントロールできるはず。

早速,回路を組み直した。今回の工作で初めて使ったけどブレッドボードは便利なもんだ。若い頃からあればなぁと,今の人が羨ましい。ついでに温度センサも ColdFire基板の熱の影響を受けづらいように少し遠くに移動した。

直した後のピカピカ温度計のプログラム。

-------------------------------------------------------
char *cr,*sr,*dr;

put(char c){
*dr=c;
while(!(*sr&2));
*sr=0;
if(*sr&1){*cr&=0xdf;return 1;}
return 0;
}
get(){
char a;
a=*dr;
while(!(*sr&2));
*sr=0;
return a;
}

thget(){
char a, b;
char fugo;
long temp;

int i,i1,i2,i3;

cr=0x40000308;

sr=cr+4;
dr=cr+8;
*cr=0;
*0x4010006b=5;
*0x40000300=0;
*0x40000304=0x38;

*cr=0xb0;

put(0x4c*2);
put(0x04);
put(0x60);
*cr=0x90;

*cr=0xb0;

put(0x4c*2);
put(0x00);
*cr=0x90;

*cr = 0xb0;

*cr |= 4;
put(0x4c*2+1);
*cr &= 0xef;
get();
*cr |= 8;
a = get();
b = get();
*cr = 0x90;

fugo =' ';

if (a < 0) {fugo = '-'; a = -a};
temp = a*2;
if (b & 0x80) temp += 1;
temp *= 10000;
if (b & 0x40) temp += 5000;
if (b & 0x20) temp += 2500;
if (b & 0x10) temp += 1250;
if (b & 0x08) temp +=  625;
if (b & 0x04) temp +=  313;
temp -= 500;     //本体温度での誤差補償

i1 = temp/100000;
i2 = (temp/10000)%10;
i3 = (temp/1000)%10;
for (i=0;i<i1;i++){ DoCgi("PORTTC1=0"); Sleep(10);
                     DoCgi("PORTTC1=1"); Sleep(10);}
for (i=0;i<i2;i++){ DoCgi("PORTTC2=0"); Sleep(10);
                     DoCgi("PORTTC2=1"); Sleep(10);}
for (i=0;i<i3;i++){ DoCgi("PORTTC3=0"); Sleep(10);
                     DoCgi("PORTTC3=1"); Sleep(10);}
}

main(){
for(;;){
  thget();  Sleep(1000);}
}

-------------------------------------------------------------

貼り付けたら改行とか変だ…,というのは置いといて,今後は符号を TA3 で表現する予定。でもって,今頃気づいたのだがこれを動かしていると,ColdFire基板のHTTPサーバで,加速度センサと温度センサのページに行かなくなってしまう。原因調べなきゃ。

先日コメントをいただいた,のりたん氏のページがとても勉強になるので,全面的に書き換える事になりそうだけど,時間がないなぁ…,さて,これから仕事だ。

|

2008年10月25日 (土)

ColdFireマイコン温度計にLED

CfondokeiInterface誌9月号付録のColdFireマイコンに LM73 を接続して,温度計を作ってみたけど,いちいちブラウザを開いたり telnet するのも面倒なので,ポートにLEDを接続してそれをチカチカさせる事で温度を表示するようなモノを作ってみた。

基板の56ピンから始まる GPT0/PTA0~GPT3/PTA3 のうち,場所的にPTA1~PTA3が丁度良かったので赤を挟んで緑を配置。これらのポートはColdFire基板の HTTPサーバから直接操作できるので,サンプルファイルを直して確かに操作できることを確認。ところが,良く考えてみたら CGI で操作できても SilentC からは直接操作できない。

はてと悩んだけど,サイレントシステム社のサイトにある SilentC のマニュアルに,HTTPサーバの CGI を引数にできる関数 DoCgi() がある事が分かった。このマニュアルは同社の製品である OS-1 の SilentC であり,この付録基板とは仕様が異なる。マニュアルにも”オマケ”との記述があり,こっちには実装されていないかと思ったら,ちゃんと動いた。

と言うわけで,温度の十の位が左側,一の位が中央,小数点以下一位が右側とLEDを割り振り,10秒間隔で,それぞれの位を0.5秒間隔でチカチカさせるプログラムが動作している。(画像はLEDを試験的にブラウザから全点灯させたもの)

娘に,温度計ができたよ,と言って見せたら「えー,これが温度計ですってー!」とタマげていた。点灯間隔が早いので,娘の反応速度を見るのに使うと面白かった。telnet 端末側にも温度を表示するので,答え合わせも簡単。

現在は22.4度らしい。明日の朝は何度かな。

|

2008年10月13日 (月)

ColdFireマイコンで温度計(つづき)

前のエントリに上げたリストが現在の形。夜中にふと思いついて,ちょっとだけ直したらコントロールレジスタも普通にアクセスできるようになったみたいで,とりあえず一安心。

もっとも,ColdFireマイコンのレジスタ制御の意味とかは,Interface誌のサンプルプログラムをそのまま使っているから詳細は不明。ColdFireマイコンの解説でも見ながら解析するかな…っても英文だし。娘も今月から英会話教室に通うから,少しは頭を英語に慣らすにはいいかも。

真夜中で気づいたのだけれど,LM73 自体の発熱で誤差が生じている。通電してから数分で0.8度ほど上昇した。設定で Timeout Disableビットはリセットしているのだけれど,米粒大のチップだし,いくら低消費電力と言っても熱容量が小さいから仕方がないのかな。CPUなんかの上がり具合に比べたら誤差の範囲だろうから。

今はブレッドボードで簡易実験しているけど,色々とセンサを追加して,それなりに実績ができたらユニバーサル基板にでも移し替えて,DDNSで外部からアクセスできるようにしたら面白いかも。

今回,久しぶりに信号線のタイミングチャートをじっくり見たけど,パソコン通信時代にフロー制御で悩んで文献を漁った時以来だから15年ぶりくらいか…真夜中に起きてこんなことしてるのも久しぶり。

これをデータロガーにするには,外部記憶が無いのがネック。Interface誌の後追い記事でSDカードのFATアクセスが出ていたけど,HTTPサーバ等と同居させようとするとデバッグがキツそうだし,SilentCのような遊び感覚でと言う訳にも行かなさそう。

定期的にメールか,syslogサーバでも上げて飛ばすか。また悩みが増えた。

※16:20追記 四捨五入の重み付けを挿入する場所を間違え…恥ずいかも。10進変換方法も見直し。一時変数など使わずに済んだ。久しぶりだと冴えないなぁ(ため息

|

2008年10月12日 (日)

ColdFireマイコンで温度計

ColdFireマイコン基板で何をしようかなと,TCP/IPモノは試してみたので,やっぱり工作かなと先日ブレッドボードを取り寄せた。次は温度センサでもと Interface誌で使われていたDS1621と言う温度センサICをと思ったが取り扱っている所が見つからず。メーカーのサイトから注文できるけど送料などがやたらと高い。

そこで目をつけたのが,同じCQ出版社から出ているエレキジャックNo8付録基板についている LM73と言う温度センサ。 Interface誌と同じく I2Cで通信する。これも市内で入手困難だったのでネットで取り寄せ,暇が出来たので昨晩ハンダ付けやらブレッドボードにサシサシして組み上げた。通電して問題ない事を確認して昨日はおしまい。

Cfond LM73 はDIP変換基板だけなので,パスコンとピンヘッダをハンダ付け。I2Cの信号はオープンドレインなので 1kΩの抵抗でプルアップが必要。手持ちのジャンク基板から部品取りをして,パスコンは適当な容量のを,抵抗は足が短かったのでジャンパワイヤを付け足してと,ハンダ付け以外で時間を食ってしまった。

今日はいよいよプログラミング。Interface誌のI2C温度計のサンプルプログラムを元に,SilentCのプログラムをメモ帳で作っては転送&デバッグ。しかしうまく行かない…。ターゲットのセンサが違うし出力フォーマットも違うから当たり前なのだけれど,エレキジャック誌のLM73解説を見ると,コマンド送出時NOACKが帰るらしく,ACK待ちを止めたらデータを読み出せた。後は数値変換だけれども,符号付き小数以下2位まで返すと言うことにしてかなりいい加減にコーディング。その結果がとりあえず以下のリスト。

//------------------ここから---------------------

char *cr,*sr,*dr;

put(char c){
*dr=c;
while(!(*sr&2));
*sr|=2;
if(*sr&1){*cr&=0xdf;return 1;}
return 0;
}
get(){
char a;
a=*dr;
while(!(*sr&2));
*sr|=2;
return a;
}
main(){
char a, b;
char fugo;
long temp;
cr=0x40000308;
sr=cr+4;
dr=cr+8;
*cr=0;
*0x4010006b=5;
*0x40000300=0;
*0x40000304=0x38;

*cr=0xb0;
if(put(0x4c*2))  return;
put(0x04);
put(0x60);
*cr=0x90;

*cr=0xb0;
if(put(0x4c*2))  return;
put(0x0);
*cr=0x90;

*cr = 0xb0;
*cr |= 4;
if(put(0x4c*2+1)) return;
*cr &= 0xef;
get();
*cr |= 8;
a = get();
b = get();
*cr = 0x90;

fugo =' ';
if (a < 0) {fugo = '-'; a = -a};
temp = a * 2;
if (b & 0x80) temp += 1;
temp *= 10000;
if (b & 0x40) temp += 5000;
if (b & 0x20) temp += 2500;
if (b & 0x10) temp += 1250;
if (b & 0x08) temp +=  625;
if (b & 0x04) temp +=  313;
temp += 500;

PrChar(fugo);
PrNum(temp/10000);
PrChar('.');
temp /= 1000;
PrNum(temp%10);
PrStr("\r\n")
 }
//------------------ここまで---------------------

Interface誌のリストは紙面の都合か改行をかなり省略されていたので,まずは改行を適当に入れてたら,変な所で区切っちゃったり。こちらも本質的でないところで時間を食ってしまった。多分バグとか余計な所とかあると思うけども,今の所動いている。

太陽光発電を導入する事が決まっているので,家のデータロガーとして使ってみようと思っているのだけど,後は照度センサがあればOK。こちらはADCを使えば済みそうなので,適当にジャンクを漁ってみよう。

※同日15時追記:温度が最低限の分解能 0.25度単位でしか取れないようで,原因を調査中。と言っても資料があまりないからキツいなぁ。

※さらに17時追記:文献ではコントロールレジスタが本当は 0x04 の筈なのだけども 0x08 で普通に動く。分解能についてもコントロールコマンドを送る都度 I2Cスタートをする事で普通に動くようになった…。訳分からんなぁ。結果オーライでいいか。という訳で,十進変換時に可能なビットをすべて積算して,使い勝手を考えて結果は小数点1位以下四捨五入する格好で出力するように直してみた。(面倒なので上のリストにマージ 10/13)

横着してるなぁ…

|

2008年9月21日 (日)

電子工作マガジン

リンク: 電子工作マガジンWEBSITE.

パソコンっていうカテゴリーに入れるのが適切か迷ったけど,パソコンの基礎ってことで。

先日発売された,『電子工作マガジン』。X68000時代の人には忘れられない電波新聞社からの発刊。内容は初歩から応用までの簡単な電子工作。原理も説明されている。

昔は,こういう本が月刊誌として出ていたりしたけど,パソコンが一般的になった頃に全滅しただけに,何とも懐かしい気がしてブレッドボードと一緒に注文した次第。市内の書店では,とんと見かけなかった。

内容は予想していたよりもレトロ!ラグ板を使うものまである。通販サイトでも引っかからないので,扱っている所などないのかなと思ったら,ちゃんと部品の入手先まで書いてあるので,扱っているところがあるとわかって,何か嬉しかった。

こういう本が出版されると言うことは,やはり最近の雑誌付録基板ブームで「売れる」と判断したのだろう。実際,自分らのような40代のパソコンマニアだと,TK-80 のようなキットから入った人も多い。今も家にある MZ-80K2E でさえ,メモリ増設の際はジャンパワイヤーを半田付けする必要があった。

弟が,実家改装の際に家に置きっぱなしになっていたジャンクの部品箱を取っておいてくれて,今は家にあるのだけど,この中で作れそうなのが,「世界一簡単なラジオ受信機」なのが何とも。作れそう,と言うより,一度作って,実際に使っていた。

中学生くらいの頃は,オールナイトニッポンとかラジオの深夜放送全盛で,”簡単”どころか,電池が異常に持つこのラジオは重宝した。災害時のために一個作っておこうかな。

Cfandbread とりあえずは,本と一緒に届いたブレッドボードにColdFire基板を乗せて遊んでみよう。秋月で一番大きいのを注文したら,画像の通りで本当にデカくてビックリ。

最大四枚乗せても回路実装部分が相当残るから,ルータもどきとか,複数のネットワークセグメントを扱うセンサネットワークの中枢とか,売り物を買うと相当しそうなのが比較的お安く作れるし小回りも相当利くだろうな。と言っても個人的には使うシーンが無いのが残念無念なんだけど。

”秋の夜長の電子工作”と昔は良く言ったような気がするが,ColdFire基板で多少試してみたい事もあるし,久々に回路図でも引いてみようかな。

|