エントリー

2016年04月の記事は以下のとおりです。

AVRtiny13Aでつくるシリーズ番外編2 LCD8812K4-01でTCXO時計を

  • 2016/04/08 07:18

20160407134350.jpg
 さてさて,LCD8812K4-01というaitendoの特価LCDを,とりあえずセグメントだけ動かしてみたわけですが,そもそもこれは,同じaitendoで買ったI2CセグメントLCDの交代要員として使いたいという話からスタートしたものでした。

 動かしてはみたものの,LCDまわりのハードもソフトも新規になって,新しい時計をもう1つ作るのと同じくらいの手間ですから,交代要員もクソもないんですが,せっかくですからやるだけやってみましょう。

(1)ハードウェア

 これまで,クロックジェネレータであるSi5351AとLCDが同じI2Cであることを最大限生かし,ピン数を大幅に削減できたことで,tiny13Aでの実装が可能になっていました。2端子で複数のデバイスをぶら下げる事が出来るI2Cは,こうした少ピンのマイコンにはぴったりです。

 ですが今回は,Si5351AにI2C,LCDにSPI(SPIではありませんが,書き込み専用とすればSPIといえなくもないので,以下SPIと書きます)と,それぞれのデバイスにそれぞれのインターフェースを用意しなくてはいけなくなりました。電気的にもソフト的にも,tiny13Aには厳しいです。

 まずはピンの問題から。I2Cに2本,SPIに3本,32.678kHz入力に1本ですでに6本です。この段階で,RESET端子を潰してGPIOにすることは避けられません。なんというか,滅多に使わないだろうなと思っていたヒューズリセッタが大活躍ですよ。

 しかしそれでも,時刻設定用の悪阻ボタンスイッチが置けません。そこで,Si5351Aの初期設定時にだけ必要なI2Cを,設定後に入力端子に再割り当てし,ここにボタンを2つをぶら下げることにしました。I2Cはプルアップされているので,ボタンを置くにも困りません。

 確かに,押しボタンスイッチをI2Cのプロトコルに従って操作すればSi5351Aが誤動作してしまうわけで,こういうのはプロの設計では御法度です。アマチュアの特権ですね。楽しい楽しい。

 これでなんとか必要なピンは揃いました。


(2)ソフトウェア

 I2C用LCDサブルーチンを,先日のLCD8812K4-01用サブルーチンに置き換えるだけです。本来ならこれで動くはず,でした。

 しかし予想通り,大幅なメモリオーバーが発生して,書き込めません。2割ほど減らさないといけないなんて厳しいです・・・

 そこで,まずSi5351Aの設定のうち,後半のゼロばかり書き込む部分のライトを省略しました。本当はこういうことはやってはいけないのですが,初期値がゼロならわざわざ書き込む必要もないので,すっとばします。アマチュアの特権です。

 次に,意外にメモリを食う_delayを,I2C関連の関数から可能な限り外して行きます。これもSi5351Aさえ動けばいいので,ばっさり取っていきます。アマチュアの特権です。

 そして,ボタンのチャタリング対策も取ります。これも使う人がイライラするだけの話ですので,極論すれば私が我慢すればいいだけです。アマチュアの特権です。

 と,ここまで頑張って,I2Cのリード関数が残っていることが判明。使っていないので削除すると,綺麗にメモリ内に収まりました。めでたしめでたし。


 完成して動かしている写真が,冒頭のものです。コロンが使える桁だけを使ったため,画面の一部しか使っていない不細工なものとなってしまいました。

 当初,左側の2桁を時に使い,右側の4桁で分と秒を表示することも試みたのですが,見にくくなってしまったのでやめました。(これはコロンが表示出来ないという問題がきっかけだったのですが,見にくさにあらがえず,コードサイズの増大と戦いながらコロンを表示させることが出来たので,取りやめたという経緯があります。)

 メモリに余裕があれば,左側の4桁にカレンダーでも表示しようかと思ったのですが,これだけカツカツ(きっちり1024バイト使い切りました)だともう全然無理でした。

 ということで,この時計の話はこれでおしまい。

 そのうち,このLCDを本気で使い切るために,他の表示エリアも使ってみようと思います。そうすると自動的にピン数がtiny13Aでは足りませんので,tiny2313を使う事になるでしょう。

 メモリも増えるのであれこれ出来そうですが,とりあえすTCXOを内蔵したリアルタイムクロックICが売っているそうですので,これを試す時に使ってみましょうか。時刻は今の表示位置でいいとして,下のキャラクタ部に年月日と曜日を出してみましょう。

 そうすると,それぞれの設定が複雑になりますね。そうだ,設定用のディスプレイに左側の4桁を使いましょう。モードボタンを1つ追加して3ボタンとし,変更可能な値が表示された左側4桁の数字を,残りの2つのボタンで増減します。終わったらボードボタンを押して,次の設定項目に切り替えます。

 増減ボタン2つを押せば秒がリセットされる仕様はこれまで通り。

 まあいろいろ考えているうちが楽しいものです。

AVRtiny13Aでつくるシリーズ番外編 LCD8812K4-01を動かしてみる

  • 2016/04/07 13:42
  • カテゴリー:make:

20160407134351.jpg

 ATtiny13Aを使った工作,今回は番外編です。

 先日,aitendoで99円で購入した,I2CのセグメントLCDを使ったTCXO時計が壊れてしまったことを書きました。

 TCXOの時計だけに時刻はほとんど狂うことなく,それだけにLCDの破損は非常に残念でした。原因は未だ不明ですし,完動品のLCDが手元にないため交換して治ることも確認出来ず,本当にLCDが悪いのかどうかも実は断言出来ません。

 しかし,tiny13AからはちゃんとI2Cで信号が出ていますし,Si5351Aの設定も出来ていることから,やはりLCDに問題がある可能性が濃厚でしょう。

 同じLCDが手に入らないものかなあと探してみましたが,既に売り切れており同じ物は手に配送にありません。全く同じ物でなくてもいいと「I2Cでセグメント」という条件で探してみても,なかなか見つかりません。

 そういえば,先日GPSモジュールをaitendoで買った時に,199円の特価LCDを2つ買ってあったことを思い出しました。これに交換しようと考えたのですが,それはそう簡単にできません。

 このLCDは,「LCD8812K4-01」という品名で売られているものですが,少なくとも昨年の12月頃には売られていたようです。値段は199円と安いのですが,実はデータシートがなく,サンプルコードもありません。要するに動かすにはそれなりに努力が必要なものだということです。それでこの値段はちょっと高いかなあ。

 壊してしまったI2CセグメントLCDの場合,ピン配置もサンプルコードも出ていました。発売されてからの時間も経っていたので,いろいろな人が実際に動かしていたので,そこも問題はありませんでした。

 ですが,今回のLCD8812K4-01については情報が不足している上に,動作例がありません。分かっていることは,LCDコントローラが2つ載っていることと,それぞれ独立したインターフェースであること,セグメント側はSPI(でもHT1621の仕様書にはSPIとは一切書かれていないし,実際のところSPIとは違います),キャラクタ側は8ビットパラレルであること,電源は5V単電源であること,そしてピン配置です。

 問題なのは,仮にセグメントだけを使う場合でも,SPIなのでI2CのLCDの代わりにはならないということです。SPIで繋げばいいだけじゃないかというなかれ。I2CのLCDだからこそSi5351Aとバスを共用でき,そのおかげで8ピンしかないtiny13Aでも時計が作れるのです。

 ですがSPIのLCDを使うとなると,バスをSi5351Aと共用できませんから,I2Cとは別にSPIも用意しないといけません。SPIが3本,I2Cが2本,32,768kHz入力に1本,これですでに6本ですから,ボタンが置けません。うーん,2313を使うしかないのか。

 もう一度考えます。

 I2CはLCDを制御する役割がなくなり,Si5351Aの初期設定だけに使う物になったので,設定後は入力に切り替え,ボタンを置いても良さそうです。そうするとどうにかピンは足りますね。

 どっちにしても,LCDを動かしてみないことには先に進めません。そこで,この前人未踏のLCD8812K4-01を,とりあえずセグメント側だけ動かしてみることにしました。


(1)ハードウェア

 このLCDの端子は16個あります。電源とGNDは共通ですが,セグメントとキャラクタで別々の信号が出ています。今回はセグメントだけを使いますが,セグメントはSPIという情報から,前半の5ピンが関係しそうです。

 aitendoのサイトでは,1ピンからCS,WR,A0,VDD,GNDと並んでいるということですが,SPIにA0なんて端子はありませんし,搭載されていると書かれているHT1621というLCDコントローラの仕様書を見ても,そういう端子はありません。

 そこで,A0というのはDATAであると仮定しました。そして本来HT1621に備わっている読み出し用の端子RDは,このLCDでは外には出ていないものとしました。書き込み専用ということですね。

 仕様書をさらに見ていると,読み出しの際にはRDをクロックにしてデータが出てくるようですけども,これは明らかにSPIじゃありません。ですのでこのLCDはSPIではないということになるのですが,書き込み専用とすれば,SPIと見なして動かす事が出来ます。


(2)SPIをソフトで書く

 SPIは単純ですので,HT1621の仕様書に従ってソフトで実装することにします。マイコンはもちろんtiny13Aです。

 仕様書を見ているとリードについても書かれていますが,RD端子が外に出ていないので今回は無視です。書き込みのみを実装します。

 で,ちょこちょこと書いてみると,なにやら動いているようです。結構あっさり動いてしまったので拍子抜けです。

 コマンドとデータの書き込みを行う関数をさっと書いて,一応簡単なライブラリのような物を作っておきます。

 不安があるのは,ウェイトをどこにどれくらい置くべきかがさっぱりわからないことです。インターフェースのタイミングはわかりますが,例えば電源投入後最初のコマンドを投げるまどれくらい待てばいいかとか,内部発振器の発振安定時間はいくつかとか,コマンドを投げてそれが有効になるまでの時間がどれくらいか等,全然かかれていません。

 とりあえず動いた,と言うやり方で進めるしかなさそうです。こういうのはトラブルの原因になるんだけどなあ。まぁしゃあないですね。


(3)初期設定をどうする

 ここまでで一応LCDを叩けるようになったのですが,初期設定の手順やコマンドの役割などが不明なままです。HT1621の仕様書だけでは正確なところはわかりませんし,LCDごとに異なる設定が必要な箇所もあります。

 とりあえず必要っぽいのは,SYS ENというコマンドと,LCD ONというコマンドを発行することのようです。ところが,これだけだとどうも動作が不安定になってしまいます。具体的には,4ビット目のデータが電源投入のタイミングによって,ちゃんと反映されたりしなかったりするのです。ですから,すべてのセグメントを点灯させようとしてすべて1を書き込んでいるのに,時々一部のセグメントが点灯しません。8になったり9になったりするのです。

 きっとタイミングの問題だろう,特に最後に書き込むデータがおかしいのならデータ送信後に送るCSのタイミングじゃないかと,ここのウェイトを調整しましたが,発生頻度に変化こそあれ,完治しません。困った。

 そこでもう少し調べて見ると,RC256kというコマンドを発行すれば安定して動作することがわかりました。


(4)マッピングを調べる

 初期化までは出来ました。この時点でRAMにデータを書き込みさえすれば,何らかの表示が行われるようになりました。

 次は思い通りにセグメントを点灯させるために,RAMとセグメントの対応を調べます。

 HT1621は,32x4bitのRAMを持っており,これが各セグメントに繋がっています。よって全部で128のセグメントを個別に操作できるわけです。しかし,どこにどのセグメントが繋がっているのかが分かりません。これはもう,地道に実際に点灯させて調べていくしかないです。

 私の場合,まず32のすべてのアドレスに対し1を書き込み,点灯したセグメントに「1」とLCDの写真に書き込みました。次にデータを2にして同じ事をやり,次に4,その次は8と繰り返します。

 終わったら,アドレス1つに0x0fを書き込んで,点灯したセグメントに対してアドレスを書き込んでいきます。結局,128の組み合わせを総当たりで試したわけですね。

 そして,分かったマッピングから,フォントを作ります。あまり複雑な関数を作るとメモリが足りないとか言われそうなので,必要最小限の機能に絞った小さな関数で済むようにします。


 ということで,LCD8812K4-01を実際に動かしたソースです。これを実行すると写真のように左から0,1,2,3,4,5・・・と10桁分数字が並びます。

続きを読む

AVRtiny13Aでつくるシリーズ6 気圧センサとI2Cのリード

  • 2016/04/05 09:44
  • カテゴリー:make:


 そろそろ面倒くさくなってきたtiny13を使った工作ですが,今回で一応一区切りです。I2Cについては,よく考えるとライトはやっていますが,リードはやっていません。センサなどを繋いだ場合はリードがメインになるだけに,これをやっていないというのは少々物足りません。

 なにかないかなとジャンク箱を漁っていたら,随分昔に秋月で購入した気圧センサ,フリースケールのMPL115A2が出てきました。600円。今,同じ物が400円で売られているんですね。

 I2Cで繋がる気圧センサとしては数年前からよく知られたメジャーなものです。デジタルで情報が飛んできますが,残念ながら値を結構複雑な計算で求めねばなりませんし,チップごとに校正された補正値を読み込んで,その係数を使う必要があったりとなかなか面倒です。

 そのわりには,今ひとつ精度も良くないという事らしく,人気の方は今ひとつという感じです。

 ですが,ちょうどI2Cのリードを試すにはちょうどいいですし,600円もしたんですから使ってみたいと思いました。しかし,この気圧センサはLGAというピンのないパッケージに入っており,小型である事もあいまって,実装が大変です。

 変換基板などもありませんので細いワイヤーで信号を引っ張り出すことにしますが,電源とGNDとI2Cの信号線だけですから,4本だけです。それならなんとかなるでしょう。

 ということで,信号線を引っ張り作業を始めたのですが,これがなかなか難しい。すぐに熱が回ってしまうので,一度付けたハンダがポロッと外れてしまうこともしばしばです。

 そうこうしているうちに,なんと電源のランドがハンダゴテの熱で剥がれてしまいました。万事休す。もうダメだ。俺は寝る。

 しかし,虫眼鏡でよく見ると,剥がれたランドのそばに,電源のパターンが走っています。ここにワイヤーをハンダ付けすればなんとかなるかも知れません。

 慎重に他の信号も引っ張り出して,とにかく外部にピンを出す事に成功しました。

 でも,これで動く保証はありません。というか,ほぼ壊れていると考えていいでしょう。そこで,mbedで動作を確認します。サンプルコードを探すと,あったあったありました。

 さくっと実行すると,気圧と温度と高度がLCDに表示されます。それなりに意味のある数字が出ているようですので,とりあえずこの気圧センサは生きているようです。

 で,あとはtiny13Aです。

 I2Cのライブラリの中に,リードを行う関数が用意されてはいるのですが,これをコールすればそれでいいというような簡単な話ではありません。

 MPL115A2の仕様書を読んでいると,リードの際にはまずコマンドを発行して読みたいレジスタを指定するとあります。それが済んだらリードをするという事です。

 ここで注意すべきは,ホストがリードを行う場合には,アドレスに+1しないといけないということです。この+1は,R/Wビットといって,ホストがライトするときには0,リードするときには1を書きます。

 これを0ビット目とし,あとはアドレスを1から7ビット目まで置いた合計8ビットを,スタートコンディションの次に送ります。

 MPL115A2のI2Cアドレスは0x60なのですが,ライトの時には0xc0を,リードの時には0xc1を送る必要があるということですね。

 ところが,スタートコンディションに続いてアドレスを送り,コマンドを送った後,どうやってR/Wビットを1にしてリードモードにすればいいのでしょう。

 仕様書によると,ここはリピートスタートコンディションを送るとのこと。

 べた書きすると,こんな感じになります。

    I2C_Start();
    I2C_write(0xc0);    //    addr + R/W bit = 0
    I2C_write(0x04);    //    command 0x04(read add = 0x04)

    I2C_Start();    // Repeat start condition(W/O Stop condition)
    I2C_write(0xc1);    //    addr + R/W bit = 1

    a0m = I2C_Read();
    a0l = I2C_Read();
    b1m = I2C_Read();
    b1l = I2C_Read();
    b2m = I2C_Read();
    b2l = I2C_Read();
    c12m = I2C_Read();
    c12l = I2C_Read();
    I2C_Stop();

 これは8つの補正値を読み出すコードなのですが,I2Cではストップコンディションを発行する前にスタートコンディションを発行すると,それはリピートスタートコンディションと見なされて,バスが解放されないまま,アドレスを再送出来るのです。

 ところが,変換開始から変換後の値を読み出すところは,またちょっと違うんです。これも仕様書によると,以下のようになります。

    I2C_Start();
    I2C_write(0xc0);    // addr + R/Wbit = 0
    I2C_write(0x12);    // command = 0x12, 0x01(convert start)
    I2C_write(0x01);   
    I2C_Stop();

    _delay_ms(5);

    I2C_Start();
    I2C_write(0xc0);    // addr + R/Wbit = 0
    I2C_write(0x00);    // command 0x00(read add=0x00)

    I2C_Start();        // Repeat start condition
    I2C_write(0xc1);    // addr + R/Wbit = 1

    bm = I2C_Read();
    bl = I2C_Read();
    tm = I2C_Read();
    tl = I2C_Read();
    I2C_Stop();

 0x12というのは変換開始のコマンド,次の0x01はダミーです。ここで一度ストップコンディションを発行してバスを解放しています。そして数ms待った後で,改めてスタートコンディションを出しているんです。

 あとはどこを読みたいか書き込んで,リピートスタートコンディションを出してから読むという流れなのですが,変換開始のコマンドのあと,わざわざバスを解放しないといけない理由がよく分かりません。

 まあ,普通に考えたら5msも待つんですから,その間にバスを明け渡して他が使えるようにしないといけないわけですが,今回のようにバスを占有しても問題がない場合は,別にいいんじゃないかと思ったのです。

 しかし,試してみたらダメでした。

 やはり仕様書の通りに書かないとダメのようです。

 で,あとは気圧と温度の表示なのですが,これがとても面倒くさい。とても1kバイトのメモリに入りそうにないと悟った私は,とりあえず気温だけ表示することにしました。

    t = tm<<2 | tl>>6;
    t = 250-(t-498)*1000/535;
    lcd_cmd(0xc0);   
    lcd_data(t/100 + 0x30);
    lcd_data(t/10%10 + 0x30);
    lcd_data('.');
    lcd_data(t%10 + 0x30);
    lcd_data('C');

 tはint型で,tmとtlはchar型です。tmを2ビットずらし,tlを6ビットずらして,トータル10ビットの値として,int型に格納します。出来るだけ小数点を使わないようにするために,補正式をちょっと修正しました。本当は,25-(t-498)/5.35で計算するんだそうです。でもおかしいんですよ。472で25度になるという話なのに,この式だと25度にならないですよね・・・まあいいか。

 一応これで温度の表示は出来たのですが,値がとにかく数度単位でばらつくんです。それでももうやる気を失って,やめました。

 ということで,なんとなくだらけたところで,このシリーズはちょっと休憩。小さい小さいマイコンを気軽に使いたいという話から,なぜか限界ギリギリを責める話になってしまったわけですが,これはこれでパズルを解くような面白さがあって,とても楽しかったです。

 たまにはこういうこともやってみるものです。

AVRtiny13Aでつくるシリーズ5 温度と時刻を同時に表示

  • 2016/04/04 12:02
  • カテゴリー:make:

 さてさて,お次はTCXOの時計と,LMT01の温度計を組み合わせたものです。LCDにはAQM0802を使って,1ライン目には温度を,2ライン目には時計を表示します。写真が好きな割にはうまく撮れずに恥ずかしいです。

20160404221135.JPG

 右側にあるのがLCDのAQM0802,その左下に8ピンDIPのATtiny13A,その上にはLMT01を寝かせておいてあります。

 LMT01の左側にはTCXOの出力(0.8Vp-pのなんちゃって正弦波)をCMOSレベルに変換するトランジスタ(2SC1815)があり,トランジスタの足下には10MHzのTCXOであるTG-5021があります。

 さらにその左側には2.85VのLDOがあって,すべてに電源を供給しています。LCDの電源としてはかなり低めで動作が心配されましたが,コントラストが低くなってしまったのでそこを調整した以外に,今のところ不具合はありません。

 左下の白い四角いものは押しボタンスイッチです。左が時を,右が分を進めます。両方押すと秒がゼロにリセットされ,離すとカウントを始めます。

 なんでもない時計ですが,実力で時計は1ppm以内の精度,温度計は0.5度以内というもので,これを8ピンの50円マイコンで作ってみようというのですから,なかなか面白そうだと思いませんか。

 ソフトとしては,これまで紹介した時計と温度計を組み合わせるだけです。割り込みは2種類から発生しますので,ここがうまく動くか,ちょっと心配な所です。また,それなりに処理が重いので,割り込み処理が間に合うか,また割り込み以外の処理が次の割り込みに間に合うか,そのあたりも気がかりなところです。

 メモリサイズは,あまり心配していませんでした。というのも,それぞれLCD駆動部分をいれて80%程でしたので,ここを共通化すれば収まるだろうと思っていたのです。

 ですが,やっぱりそうは問屋が卸しません。問題が噴出です。

 まず処理の問題。割り込み処理が間に合わないらしく,LMT01のパルスを正しくカウントしていないようです。これは処理順番を変更して対策。

 次に,割り込みの外の処理が重すぎて,時々変な数字を表示します。これも順番を変更して対策。

 そしてやっぱりダメだったメモリ。出来たバイナリは,1.2kBになっていました。2割もオーバーしているというのは,もう絶望的です。ちょっとやそっとで入る大きさではないですよ。しかも,温度のマイナス表示は外してあります。

 この,メモリを削って行く作業というのは実に地道な作業なのですが,もともと1kバイトしかありませんし,豊富な機能があるわけではないので,削る機能もありません。

 手始めに,LCDとI2Cのウェイトを削って行きます。すると,みるみる減っていきます。AVRのdelayというのは,実は結構なステップ数になると聞いたことがあるのですが,あっという間に100バイトほど減りました。

 もともと必要で入れてあったウェイトですから,外していい物はないはずなのですが,そういうきれい事を言っているわけにはいきません。1つずつ外して,動くかどうかを見て,また外して・・・を繰り返し,とにかく実力依存で動くところまで,削り取りました。

 なにかあったら,速攻でコケるだろうなあ。

 それでもまだオーバーしています。次はLMT01です。以前,摂氏に変換するのにカウント数*10/16-500をする,と書いたことがあるのですが,ここを減らします。

 カウント数が1234だとしましょう。この計算式に従うと,271となります。つまり27.1度ですね。

 これを書き直します。カウント数を10倍するのはあきらめます。これを右に4ビットシフトします。これで1/16されて,値は771となります。

 さて,よくよく見てみると,オフセットである500を減算して影響があるのは,100の位だけです。あとの10の位と1の位はなにも変化しません。それなら,この771を表示する際に,100の位の7から5を引き算し,あとはそのまま表示することにします。

 こうすると,演算が8ビットで済むので,少し減ります。シフトとの合わせ技で数バイト減りました。もちろん,マイナス表示は割り切ります。氷点下になるような場所にいたら体に悪いです。

 キーのチャタリング対策のウェイトも全部外しました。LCDの初期化も,本当に最低限必要な物だけにしました。そして,表示部分も,キャラクターコードのオフセット分0x30を,表示関数の中で加算するようにして,毎回加算することをやめました。

 これで,なんと1018バイト。ギリギリ入りました。かろうじて動いている感じです。

 さて,ここまで来て安心した私は,クロックの設定をデバッグ用の内蔵9.6MHzから,外部10MHzに書き換えることにしました。クロックの設定を9600000から10000000にして,ビルドします。

 すると,あろうことか,1030バイトになりました。オーバーしたため書き込みが出来ないと怒られて気が付いたんですが,せっかくの苦労が水の泡です。クロックを変えるだけで,なんでこんなに増えるのかと泣きたくなりましたが,これはおそらく,コードサイズに影響が大きい,delayで回るループの回数が変わったからでしょう。クロックが速くなると,それだけループもたくさん回すことになります。

 ということで,わずか400KHzの差だというなら,もうそのままでいいじゃないかということで,クロックは9600000にしました。

 これで最終的に1018バイト。これで書き込み,動作を確認しました。メモリもほぼ使い切り,機能的にもこれが限界でしょう。精度はTCXOですので申し分なく,温度計もとりあえずおかしな値を表示してはいません。

 文字化けや表示の乱れもなく,安定して動いてくれているのはいいのですが,消費電流が結構大きいのです。TCXOの電源を安定化したいので2.85VのLDOを通してすべての電源を供給していますが,LDOの入力で5.3mA流れています。

 5.4mAですから,仮に2000mAの単三電池を2本使ったとすると,単純計算で370時間。およそ2週間で電池切れです。これはかなり厳しいです。

 深夜にLCDを消すというのはどうかと考えたのですが,それでも減るのは1mA弱。3日ほど伸びるだけです。電池を4本にすれば1ヶ月,6000mAクラスのリチウム電池を使えば1.5ヶ月です。

 中途半端ですよね。10mA以下ですからACアダプタを出してくるのはもったいないですが,かといって電池ではすぐに切れてしまいます。こうなってくると消費電力を下げる工夫を考えたいのですが,これがなかなか難しいです。

 まず考えつくのはtiny13Aのクロックを下げる事ですが,10MHzで時計を作っている以上は,1/8の分周器しか使えません。でも,1.25MHzでは処理が追いつかないのは明白ですから,これはあきらめます。

 1秒ごとに表示を更新するだけだから,それ以外はスリープに入れればいいとも思うのですが,残念ながら1秒間に625回入る割り込みと,温度センサのパルスのカウント,そしてI2Cの通信でほぼずっと全速力で回っているCPUを止められません。

 それと,実はTCXOが2mAほど消費しています。tiny13Aが2mA,LCDが1mAとして合計で5mAですから,TCXOだけを動かすことにしても,2mA以下にはならないのです。仮に2mAになったとして約40日です。これで電池が切れてしまうというのは,程度の問題とは言え,面倒な事には変わりがないでしょう。

 なので,もうあきらめます。電池で動かすことを最初に目標に置いて,そのために必要な対策を最初から盛り込んでいかないといけなかったと思います。例えばクロックは明らかに周波数が高すぎますから,最大でも32.768kHz,可能であればここはリアルタイムクロックで閉じてしまい,tiny13AはRTCからの割り込みで1秒ごとにデータをもらう仕事に徹します。

 そして夜中はLCDを消します。これでおそらく24時間平均で1.2mA,だいたい3.5ヶ月動く計算です。3ヶ月持てば充電式の電池を使うなら,なんとか許せるでしょうか。

 そう考えると,市販されている時計の,なんと低消費電力なことでしょうか。腕時計なんか,小さな電池1つで,何年も動きます。専用のLSIに専用のディスプレイ,専用の水晶発振子でトータルの精度を維持するという,強烈な技術の集大成です。

 どういうわけだか,私は時計を作るのが好きなのですが,ことこの分野においては,消費電力においても,あるいは精度においても,プロが作る製品に,アマチュアの工作は全く追いつかないことを思い知らされます。

 そうそう,ところで,Si5351Aを使ったTCXO時計を作ったとここに書きましたが,壊れてしまいました。

 どういう訳だかわからないのですが,どうもaitendoの特価LCDが壊れてしまったらしく,手にとって他の人に紹介した直後から表示が消えてしまったことを考えると,どうも静電気で破壊したんじゃないかと思います。LCDの消費電流がゼロのまま,まったく変化しません。

 I2Cで動くセグメントLCDってなかなか貴重で,交換しようにも手頃な物がないのです。残念ですがこの時計はあきらめるしかありません。10日ほど動かしましたが,目視で分かるようなズレが出なかったことを,ここに書いておきたいと思います。

東芝の家電に思うこと

 東芝と言えばなく子も黙る総合電機メーカーであり,かの田中久重にまで起源を遡る,名門中の名門です。その守備範囲は最先端の半導体から防衛・原子力まで広がっており,規模,技術ともに世界屈指の製造業です。

 こういう大きな会社というのは,知名度の高さに反して親近感というのは案外わかないものなのですが,東芝がえらいなと思うのは,一般家庭やアマチュアのホビーストの懐にもちゃんと飛び込んで,そのための多少の手間やコストには目を瞑るという大らかさがあったことでした。

 1つはサザエさんと東芝日曜劇場。サザエさんに至っては,登場する家電が常に最新の東芝製という念の入れようでした。

 1つは高性能な電子デバイスの,アマチュアへの供給に積極的だったことです。

 電子デバイスというのは,数がまとまらないと商売にならないので,1つや2つ欲しいと言うアマチュアをいちいち相手にしていたら,手間ばかりかかって儲かりません。それでアマチュア向けのお店をサポートする問屋さんや代理店を相手にするのですが,それでも金額は大した事はありません。

 しかし,東芝はそれこそ戦前から,アマチュアへの電子デバイスの広告と啓蒙を積極的に続けていたように思います。戦前から戦後にかけての,「初歩のラジオ」などの雑誌には東芝の真空管の広告が出ていますし,高度経済成長期においてはオーディオの雑誌にも,最新のトランジスタの広告が出ています。

 私が特に覚えているのが「初歩のラジオ」に長年連載が続いた,「東芝ラジオ教室」です。東芝は見開きの広告のページをずっと買い続け,ここでなかなか良く出来た電子工作の製作記事が見開きで掲載されていました。広告ページですから東芝のデバイスを使う物しか出ていませんが,広告費以上に儲かるわけはなく,電子工作少年に東芝を知ってもらうという「先行投資」だったと言えるでしょう。

 それに,実際に電子部品店に行ってみれば,東芝のトランジスタやダイオードは手に入りやすく,価格も安いのです。ゆえに雑誌の製作記事にも登場する機会が多くなり,ますますその部品がお店で買われることが増えるというサイクルが成り立つようになります。

 ですから,東芝の2SC1815が先代の2SC372やその前の2SB56などと同じように,我々アマチュアに最も馴染みのあるトランジスタとなるのは,当たり前のことでした。

 しかし,いかに広告に熱心で知名度もあり,安価で入手がたやすいとしても,性能が優れていて,使いやすい物でなくてはなりません。よく知られたように2SC1815はそのままHiFiオーディオ機器や無線装置に組み込めるほどの汎用性と高性能を誇る万能トランジスタでした。
 
 こうして,東芝のトランジスタを大事なお小遣いで1つ2つと買い求めた子供が,やがて大きくなって技術者になったときに,東芝に強い安心感をもってしまうのだと思います。私もそうです。

 余談ですが,かつての電子工作の雑誌に掲載されていた製作記事というのは,なかなか設計が難しいです。読者がいざ作ってみようと思い立った時に,手に入った部品の性能は保証されておらず,スキルも知識も経験も年齢もバラバラ,持っている測定器もまちまちで,その使い方も正しいとは限りません。調整だって出来る人と出来ない人がいて,そもそもほとんどの場合一発では動きません。

 どんな人が作っても完成し,無調整で性能が出て,間違った使い方をしても壊れない,手に入りやすい部品だけで構成されいて,しかも安い。

 そういう設計が理想とされている世界が,かつての電子工作雑誌の製作記事です。

 これはかなり難しいことで,そうならなかった製作記事も多くありました。記事を書かれた先生方にも多少の温度差があったり,使命感はお持ちでも技術が追いつかないケースもあったように思います。雑誌によっても考え方が違うようにも思いました。

 そういう意味では,自分の為だけに自分で設計する回路が,一番手抜き出来ると言えるでしょうね。
 
 こういう製作記事の,部品面を支えたのが東芝でした。東芝のトランジスタ,東芝のダイオード,東芝のデジタルIC,東芝のアナログIC・・・いくつもの部品名が頭の中に焼き付いています。

 その東芝が大きく揺れています。そして先日,家電部門が中国の家電メーカーに売却されることになりました。技術,ノウハウはもちろん,従業員も生産設備も継承されて,しかも東芝ブランドも今後40年間使用するというのですから,我々からみてこれまでと何が違うのよ?と思う訳ですが,東芝の根底に流れる「消費者の懐に飛び込む」ことは,今後はなくなるかも知れません。

 もう1つ,東芝が他の家電メーカーと違うなと思うポイントを,ちょっと視点を変えて書いてみようと思います。

 1990年代前半まで,家電製品は急激に進化し,その先頭を日本のメーカーが走っていました。

 最終製品の進化がデバイスの進化によって成される構図は今も昔も変わりません。しかし東芝がちょっと違っていたのは,デバイスの進化を東芝自身が強烈に推進していた事と,それを積極的に最終製品に搭載して性能向上を果たしていたことです。

 デバイスを作る事が出来ないメーカー,あるいは進化させることの出来ないメーカーは,デバイスの使いこなしで最終製品の性能を向上させることになります。シャープやカシオなんかがそうですね。自ずと安い製品か,「その手があったか」というような工夫に満ちた製品が多くなります。

 一方の東芝やNEC,日立などは世界最高峰のデバイスメーカーでもありましたから,これを自社の製品に搭載することで,他には全くない機能や圧倒的な高性能な製品を作る事が出来ました。当時も言われた一流メーカー製と二流メーカー製との間には,このあたりに大きな溝があったように思います。

 製品が部品で作られている以上,製品は部品の性能を絶対に越えられません。言い方を変えると,部品の性能が向上すれば,自動的に製品の性能は向上するのです。

 東芝は,それを愚直に進めたメーカーだったように思います。1970年代のオーディオ製品の性能向上は,ローノイズ低歪みのトランジスタとFETの登場で成されましたが,東芝のデバイスはその先頭を走っていました。

 ラジオや無線機器の高感度化,高性能化,多チャンネル化も半導体の力です。コンピュータもそうです。東芝はCPUやメモリ,周辺LSIの主要なメーカーでした。

 一例を挙げましょう。かつてアナログテープデッキが現役だった時代,アナログ録音では不可避なヒスノイズを削減するシステムとして,Dolbyノイズリダクションがありました。

 民生用のDolby-Bは,安価で安定した動作を狙ったために,性能面での妥協がありました。ここに勝機ありと踏んだ日本のオーディオメーカーは,こぞってDolby-Bを越えるノイズリダクションを開発しました。

 でも,Dolbyにだって,Dolby-Bが性能面で不十分である事は分かっていたはずです。Dolbyは研究開発を生業にする会社ですから,自社でデバイスを開発しません。民生品に採用されるには,性能と価格のバランスを取らなければならず,あえて性能を落としたのでしょう。

 やがて複数の会社からDolby-Bを上回るノイズリダクションが登場しましたが,結局残った物はありませんでした。

 そんな中で健闘したと思うのが,東芝のADRESです。ADRESはDolby-Bを上回る性能を誇り,しかも音質も良いと評判でしたが,それだけなら他のメーカーにもチャンスがありました。東芝が違っていたのは,ADRESをIC化したことです。

 IC化すれば,価格は劇的に下がり,性能も安定します。当初ディスクリートで作る事を想定したDolby-Bが性能面で妥協したのは当然の判断であり,IC化することが前提ならもっと性能を上げることだって出来たでしょう。

 ADRESは,自社のデバイス開発能力を背景に,性能と価格と安定性を高次元で両立したシステムだったのです。

 ADRESは複雑な処理が必要でしたが,ICは東芝しか開発しませんでした。また,東芝はADRES用のICを少なくとも3世代作り続けており,その都度大きく改良されていました。

 基礎開発,デバイス開発,そして最終製品の設計という3つが協調し,優れた製品が登場したという例だったと思います。

 このことは,別に東芝に限ったことではなく,当時の日本の家電メーカーの強さの源泉でもありました。

 ADRESの場合,それでも残れませんでした。DolbyがデバイスメーカーにワンチップICを作らせたことで,もともと簡単だったDolby-Bがもっと簡単に安く使えるようになったことが1つ,もう1つはワンチップ化を前提にした複雑なシステムであるDolby-Cを開発し,すでに普及していたDolby-Bとの互換性を武器に急速に広まったためです。

 今にして思えば,Dolbyは自らの役割と出来る事をきちんと認識し,その時々でやるべき事をきちんと理解していたんだなと感心します。

 人づてに聞いた話で恐縮ですが,デバイス部門と最終製品の部門が仲が悪くて,最終製品に自社の半導体を供給してもらえず,他から購入していたメーカーもあったそうですし,互い相手をバカにしあっていた会社もあると聞きます。

 またある会社では,デバイス部門が弱くなってから,少しずつ最終製品が弱くなっていきました。

 そして現在。共通化によって大量に生産された部品を安価に手に入れて最終製品にすることでしか,価格と性能をバランスできない時代になりました。デバイス専業メーカーが作るデバイスに太刀打ち出来ず,それを使った製品はどのメーカーでも大差がない,これはすなわち,世界中のメーカーがかつてのシャープやカシオと同じ土俵に上がったことを意味しています。

 つまり,ここでの勝者は,価格とちょっとした工夫で他社を出し抜いた会社です。

 東芝は,残念な事に,この競争では勝てませんでした。

 自分達の都合だけでデバイスを進化させ,自分達の製品に使って自分達の望む性能向上を果たす,結果として複数のメーカーが様々なアプローチで個性的な製品を作って世に問う,我々は新製品が出る度に,胸を躍らせて使ってみる,そういう話が普通でなくなり,世界第一位か二位までの僅かな会社の特権となってしまったには,こういう背景があったのだと私も改めて思いました。

 では,現在は最終製品の性能は,以前よりも上がりにくいのでしょうか?

 いえ,そうではありません。デジタル化とCPUの処理能力向上により,製品の性能はソフトウェアが握る時代です。ソフトウェアはデバイスと違って初期投資が軽いこともあって,自分達の都合で自分達が作る事がまだまだ可能です。

 そして,それが出来たメーカーは,技術を進歩させ,優れた製品を世に問い,大きな支持を受けて文化を創り上げていきます。

 私個人にとっては,シャープの買収よりも,東芝の家電部門の買収の方が大きいニュースでした。それは,最終製品を決定付ける要因が変化していたという気付きが,確信に変わるものであったからです。

 そういえば,シャープが液晶に傾倒した理由の1つに,かつてのテレビのキーデバイスであるブラウン管を自社で作っていなかったことをあげる人がいます。テレビメーカーにとって自社開発のブラウン管を持つことは,夢でした。

 液晶の時代をなかば強引に引き寄せたシャープは,念願のキーデバイスを手に入れます。しかし,残念な事に,時代は変わっていました。夢やロマンだけでは,商売は出来ません。

 そして東芝はもちろん,ブラウン管も,液晶も持っていました。でも買収されてしまったわけですが,これを「日本のメーカーの凋落」という単純な文脈で語ってしまうことには,私はどうしても納得出来ないのです。

ページ移動

  • ページ
  • 1
  • 2
  • 3
  • 4

ユーティリティ

2016年04月

- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

検索

エントリー検索フォーム
キーワード

ユーザー

新着画像

新着エントリー

過去ログ

Feed