2025年9月9日火曜日

2色 8×8 マトリクスLEDを使う(その7)

 これまで、買った15個のマトリクスLEDのうち5個を使って基板を作成しテストをしていたが、残り10個分の基板も発注し作成した。14個を連結して表示させてみたが特に問題なく動く。次の動画は10個連結した例である。

  

製作の過程で経験したのは、ハンダペースト+ヒートガンでSMD(表面実装部品)をハンダ付けする場合、ハンダ付け後急に冷やすと基板と部品の熱膨張率の違いによりハンダにクラックが生じて著しく信頼性が低下する事である。

せっかく効率的にハンダ付けが出来ても後で細かく補修する羽目になる。 これが老眼の目にはきつい。USB顕微鏡が欲しい所である。 あと、注射器タイプのペーストハンダを直接基板に付けたが斑になり均一な量を塗布できなかった(概ね多すぎた)。基板と同時にステンシル(ハンダマスク)も発注したほうが均一に塗布できハンダ付けは上手く行くだろう。但しその場合は基板作成の値段が跳ね上がる覚悟が必要だ。

最後に、定電流LEDドライバーのTB62706BFは意外と異常電圧に弱い。最近のIC、LSI類は設計が良いのか多少手荒く扱っても、一瞬逆電圧をかけても滅多に壊れないが、TB62706BFは簡単に壊れ数個をダメにした。具体的にはENA端子が絶縁破壊されGNDとの間の抵抗値が170Ω程度に下がった。注意が必要である。

 秋月のアウトレットで安く入手した8X8マトリクス2色LED15個を使い終わったので、このシリーズは終わりとする。

(終わり) 

 

2025年9月4日木曜日

出入り検知器をPCB化する(その26) インテグレーション3

 暫く作業をお休みしていたが、これまで作った基板を組み合わせて、人の通行を感知して挨拶する挨拶ロボットを作る。

そこで新たらしく必要になるのがロボットを制御する方法、即ちサーボモータによるロボットの動作とメロディ・音声を同期させる手法及びその記述法である。最初のステップとしてインテグレーション1で作ったサーボ制御ユニットのコマンドを次の様に整理した。

    <nn>A - Rotate Ch.1 to direction <nn>.(<nn>=-90..0..90)
    <nn>B - Rotate Ch.2 to direction <nn>.(<nn>=-90..0..90)
    <nn>C - Rotate Ch.3 to direction <nn>.(<nn>=-90..0..90)
    <nn>a - Rotate Ch.1 <nn>degrees.(<nn>=-90..0..90)
    <nn>b - Rotate Ch.2 <nn>degrees.(<nn>=-90..0..90)
    <nn>c - Rotate Ch.3 <nn>degrees.(<nn>=-90..0..90)
    <nn>x - Set Ch.1 speed to <nn>.(<nn>=1..253)
    <nn>y - Set Ch.2 speed to <nn>.(<nn>=1..253)
    <nn>z - Set Ch.3 speed to <nn>.(<nn>=1..253)
    <mm>s - Set all speed to <mm>.(<mm>=1..253)
     <m>S - Set all speed to level <m>. (<m>=0..9)
        Z - Rotate Ch.1,2,3 to origin(0,0,0).
        > - Wait Idle
        $ - Abort
        e - Echo OFF(default)
        E - Echo ON
        i - Idling OFF(default)
        I - Idling ON
        v - Show software version.
        V - Show configuration data.
 

これらのサーボの制御コマンドは制御モジュールに後置記法(逆ポーランド記法)で与える。つまり改行を待たずアルファベットや記号のコマンドを入力した時点で即動作する。いちいち改行を入れる必要が無いので連続的な指示が可能である。 


 メロディや音声に同期してサーボユニットへ指示を行うための記法を次の様にした。

    [A:B:C](D)E 

 ここでサーボへの指示は[]の中に記述し、メロディは()の中に記述する。つまりAはサーボの事前処理、Bがサーボの動きの記述、Cがサーボの終了処理、Dはメロディ、Eが音声メッセージである。例えば、

    "[200sZ>5s:90A90C>-90A-90C>:$Z>](@j)ohayo" 

と記述すると、

  1. スピード200で原点移動、 その後スピードを5に変更(A部)
  2. 「@j」で定義されるメロディを演奏(D部)
  3. その後「おはよう」と発声(E部)
  4. 2,3を行っている間にチャネル1とチャネル3のサーボモータを原点から+90度へ、次に-90度へ回転(B部)
  5.  発声が終了するとともにサーボの回転を停止し原点へ移動(C部)

 のように動作する。こういった1行をイベント毎に用意し、実行すればよい。

 (続く)

 

2025年6月28日土曜日

文鎮化し起動ロゴも出なくなったFujitsu Celsius J580 を回復・復活

文鎮化した富士通のPCの回復は、専門業者に依頼するか、ツール(FreeDOS)をインストールしたUSBメモリーを使って最新のBIOSを上書きする方法しかネットに情報が無い。とくに後者のUSBメモリーを使う方法は私を含め成功しなかった事例も多そうだ。ここに、それ以外の方法で回復した事例があるので紹介する。ただ、本件は1つの成功事例ではあっても不確定要素を含んでおり再現性は保証できない。あくまで参考として見ていただきたい。

以下ダラダラと経緯を書いたので、全体を要約すると、

  1. 約半月ぶりに Fujitsu Celsius J580(以下J580)を立ち上げようとしたがビープ音と再起動を繰り返した。この時Fujitsuのロゴも出なく、キーボードも効かず、いわゆる「文鎮化」となっていた。
  2. ボタン電池を一旦取り外すC-MOSリセットは効果が無かった。 
  3. ネット情報を頼りにUSBメモリーを使ってBIOS再インストールに挑戦したが上手く行かなかった。
  4.  3.に準じた方法でBIOS再インストーラではなくWindows10のUSBインストーラを起動することが出来て、そこからBIOSに入ることが出来た。
  5.  BIOSで時刻を合わせ設定保存・終了を行った後、元のSSDからWindowsを起動する事が出来て、無事復旧できた。

という事である。 以下は経緯である。

6月中半に累積更新を適用し、しまっておいたFujitsu Celsius J580 に月末の累積更新を適用するため起動しようとしたら全く立ち上がらない。1回のビープ音と再起動を繰り返すのみでFujitsuのロゴも出ない。キーボードも無反応。やられた!、これが悪名高き文鎮化(レンガ化)か(このPCはサブのPCとして普段は使用せず定期的な Windows Update のみ行っている)。

富士通のサポートページでは「公開予定のBIOSは問題の発生を抑えるもので、既に問題が発生したものを復旧させるものではありません。」と事前の対策を呼び掛けており、問題が起きた後ではお手上げという状態だ。一方富士通のこのページを見る人の大部分は既に手遅れの人だろう。

そこでYouTubeで紹介されていたBIOSの更新をやる事にした。その概要は、32GB以下のUSBメモリーを用意し、それをFujitsuのWEB(国際版)で提供されているツール(FTS_BootStick_100_1088425.exe)でフォーマットする。 さらにそのUSBメモリーに同WEBからダウンロードし展開した自分のPC用のBIOSファイルを格納し、J580のUSBポートにに挿す。J580のメインボードのFrontPanelコネクタ(下図)にあるRecovery端子をジャンパーでショートさせたあと電源をONにすると自動的にBIOSが上書きされる。この時DVDやHDD、SSDなどのストレージやその他のデバイスはディスプレイを除き予め外しておく必要がある。これで上手く行くはずだ。なお下図のRecovery端子はJ580のピンの配置であり、この上に被さっているソケットには両端に余計な1列の穴が空いているので場所を間違えないよう注意しないといけない(モデルや基板ごとの確認が必要)。

この方法はYouTubeでも紹介されているし、Fujitsu ESPRIMOでの成功例も多い。またWindowsではないがこのページにも同様の手順が書いてある。しかしこれをやってみたが全くダメ。ボタン電池を外してCMOSをクリヤーするのは最初に試したがダメ。ネット情報によると、古いバージョンのBIOSファイルの方が成功率が高いとかあり、真似してみても駄目。この方法でもしエラーが起きたとしても何回かビープ音がなるはずだが私の場合はリトライ(勝手に電源がON-OFF)を繰り返すのみでビープ音は鳴らずUSBから起動する気配がない。そうか、YouTubeでやり方を紹介していた修理店主が仕事としては受けないと言っていたのはこういう事かと納得した。

上記ツールでUSBメモリーにインストールされるのはFreeDOSというMS-DOS互換のフリーのOSでUSB自身で起動できるよう(ブータブル)になっている筈だが私のJ580では起動されるようには見えない。この場合、考えられる原因は、(1)上記ツールの不備かUSBとの相性でUSBメモリーがブータブルになっていない、(2)ワークステーション用であるCelsiusではセキュリティや信頼性確保のため何らかの細工が行われておりFreeDOSの起動がブロックされている、(3)BIOSが完全に壊れ、例えブータブルUSBでも読み込めない、(4)BIOSの更新では現在と同じか或いはより古いバージョンを書き込むことはできない、等が考えられる。(1)を考え他のメーカのUSBメモリーでも試したがダメだった。

こうなったらハードウェア・ツールを使って最新BIOSを強制的にEEPROMに書き込むしかない、と諦めかけていた。狙いはこいつ(GD25B127D)だ。

単に書き込むと言っても門外漢の私が成功する確率は高くない。なぜならこのROMにはBIOS以外にPC固体の識別番号やMACアドレス等の固有情報が書き込まれている可能性があり、またチェックサムやMD5などセキュリティに関する情報も入って保護されいる可能性があるので単純に書き込めばよいというものでも無いだろう。 ROMの直接書き換えは最後の手段だ。

待てよ、ブータブルと言えばWindowsのインストーラもそうだ。ダメモトでやってみようと思い立ち、手持ちのWindos10 22H2のUSBインストーラで試した。Recovery端子を短絡しディスプレイ以外のデバイスを外したJ580にWindos10 のインストーラを挿して電源をONにする。すると、何とビープ音がするではないか。2回-4回-1回というパターンのビープ音を2~3回繰り返した後インストーラが立ち上がり、画面にメニューが表示された。

そこでキーボードを接続しメニューから「BIOSの設定(正確な名前は憶えていない)」を選択するとBIOSが立ち上がった。バージョンを確認するとBIOSは既に対策版のバージョン(R1.38.0)になっている。イケルかも・・・。

そこで電池を外したことで狂っていた日時を修正し、設定の保存・終了を選び一旦電源を落とした。どうも立ち上がりそうな雰囲気だ。そこでUSBインストーラを外し、文鎮化前まで使っていたSSD(Windows11インスト―ル済)をM.2ソケットに戻し、Recovery端子のジャンパーを外して電源をONにすると何事も無かったようにWindowsは立ち上がった。

Windowsが立ち上がればこっちのもの、後は普通のWindowsマシンとして扱えばよい。本来の目的であった累積更新を適用し DVDやHDD等残りのデバイスも接続してメデタシメデタシとなった。

BIOSが既に対策版になっていた理由には次の2つが考えられるが、どちらが正しいかは分からない。

(1)6月中旬のWindowsUpdateで既にBIOSは対策版になっていたがBIOSが使うデータ領域が破壊されたままだったので立ち上がらなくなっていた。

(2)ビープ音が鳴らず見かけ上起動しなかったBIOS書き換え用USBメモリーだったが実際には書き換えは行われていた。しかしBIOSの使うデータ領域が破壊されたままだったので立ち上がらなくなっていた。

個人的には(2)はBIOSの書き換えに分の単位で時間がかかると思うので現象と合わず、(1)が正解かなと思う。 

終り

 

 

 

2025年6月20日金曜日

2色 8×8 マトリクスLEDを使う(その6)

 LEDの明るさはTB62706BFに付ける外部抵抗(R-EXT)で決まるが、この抵抗は桁毎に固定抵抗をハンダ付けしているため容易に明るさを変更できない。 一方設置の自由度を増すため明るさは可変にしたい。

そこで(その4)で述べたようにイネーブル信号をパルス幅変調(PWM)して明るさを可変にする事とした。 当初は2ms毎のラスタースキャンを起動しているTMR2をトリガーにTMR1とCLCを組み合わせてPWMを作る事を考えたが、やってみるとどうも上手く行かない。理由は不明だがTMR1にクロック(Fosc)が供給されないのだ。そこでCCPを使う事とした。CCPは元々TMR2と組み合わせてPWMを作る事が出来るようになっている。

この回路の動作の中心はクロック(Fosc/4)でカウントUPされる8ビットのTMR2である。TMR2の値がPR2と同じになると、 次のクロックでTMR2は0にリセットされる。すなわちPR2+1の周期のカウンタとなる。またこの時R-S・FFがSETされPWMのパルスがスタートする。さらにこのタイミングで割り込みを発生させることが出来る。

CCPでは10ビットのCCPRと10ビットに拡張されたTMR2とが比較され(10ビットのTMR2がFoscで駆動されていると考えると分かり易い)、一致するとR-S・FFがリセットされPWMのパルスが終了する。この動作が成り立つためには 0< CCPR <(PR2*4)の関係が成立している必要がある。

最初からCCPを使えばよかったように思われるが、そうしなかったのには理由がある。TMR2による2ms毎の割込み処理の中では先ず1行分のデータを作成し、次にSPIインターフェイスでデータをLEDの各桁まで届け、最後にラッチさせることでその行データがLEDを光らせる。つまり割り込みから実際の表示(ラッチ)迄の処理である程度の時間を取られる。一方明るさを制御するPWM信号はラッチを起点としたいが、実際は割り込みがカウント開始の起点となり処理に時間を取られるので望む結果が得られない。そこで処理の順番を変更し、割込みと同時にラッチを行うことでPWMの起点と整合させる事とした。その後次の割込みに向けて行データを用意し各桁へ届けて割込み処理を終える。このデータのラッチ(表示)は次の割込みの頭で行う。

 この方法でPWMパルスのデユーティ比は概ねCCPR/(PR2*4)である。この式から分かるがPR2が小さい場合にはPWMの細かい制御は出来ない。具体的には行スキャンレートを2msとするためのPR2の値は7なので明るさは3~4%単位での制御となる。

なお、R-EXTの値はテスト段階では室内用に10KΩを使ったがPWMを実装した後は1KΩにした。これでけっこう明るくでき、直射日光下でなければ昼間の屋外でも見えるだろうし、R-EXTを小さくすればもっと明るく出来る。LED1個当たりの最大平均電流は25mAなのでR-EXTは約800Ωまで下げることが出来る(ピークを考えるともっと下げられる)。一方それが最大16個並列になるので、ソースドライバは400mAのドライブ能力が必要だがTD62783は最大500mAのドライブ能力がある(推奨条件とは異なる)ので通常の動作は大丈夫だろう。

 (続く)

2025年6月8日日曜日

2色 8×8 マトリクスLEDを使う(その5)

 出すのが遅れたが制御部は次のような簡単な回路である。J101が外部インターフェイス用のRS-232Cコネクタ、J102とJ104はドライバー部との接続コネクタである。配置の自由度を増すため2個設けている。2つのジャンパーはソフト的にチェックして立ち上げモードを変更できるようにするためのものであり、またこの端子をデバッグ用信号の出力にも使っている。その2で見せた割り込み中を表すトレース波形はここから取り出した。

このユニットを作って驚いたのは、PICが極めて低消費電力なのは言うに及ばず、J101にRS-232cのケーブル経由でPCが接続されていれば電源を切っても動き続ける事である。回路的には何処からも電源が供給されていなくても、UARTのRX 端子(U-RX)に加わるHの信号電圧だけで機能している事になる。つまり入力ポートからの漏れ電流だけで動いていることになる。さらに5桁のマトリクスLEDを接続した状態でもこの動作は継続される。このとき暗闇で見るとLEDが薄く点灯して動作している。これには感動した。

(続く) 

 

2025年6月6日金曜日

2色 8×8 マトリクスLEDを使う(その4)

 5桁のLEDマトリクスを裏側から見るとこうなる。制御部は一番左の二階部分。全体を見るとコネクタが多くの経費を食っているようだ。

 

 使っているCコンパイラのバグに悩まされて手間取ったが(Cコンパイラのバージョンが古いままだったため原因不明の異常動作に悩まされたが最新のバージョンに上げたら安定した)、その後表示内容をスクロールさせる機能を追加することが出来た(以下はデータ量を減らすため動作が分かる程度のショート動画にしている)。


 

スクロールの基本的な構造は、表・裏2つの画面バッファを持ち(それらを瞬時に切り替えることも可能)、2つのバッファを(縦または横に)ループ状に繋げて連続的にシフトする事でスクロールさせている。左・上スクロールを組み合わせて斜め上スクロールも出来て、見てると浮遊感があるが見続けていると酔った感じになって気分が悪くなった。

機能は一通り出そろったので、これrらをユーザインターフェイスにどう纏めるかが課題となった。あと、LEDの明るさを抵抗で決めているがソフト的に変更できるようにしたい。そのためには現在BLINKの機能に使っているイネーブル端子をパルス幅変調する必要がある。このときパルスの周期を表示と同期させないとエイリアシングが発生して周期的に明滅するので一工夫する必要がある。とりあえずTimer1とCLCを使えば何とかなるだろう。

現在、前作の超音波測距センサーと組み合わせて反射物までの距離を表示させている。

(続く)


 

 

 

2025年5月31日土曜日

2色 8×8 マトリクスLEDを使う(その3)

 フリーのAsciiフォントを入手した事で文字列を表示できるようになった。8x8のフォントだが当初想定したより見易い。

誤っていた基板の配線も修正したバージョンを作成し、完成した基板5桁分を繋げてみた。3色の表示が可能だ。



ハード的には出来上がったが、まだ固定した形式でしか文字列を表示できないので、後はソフトにどういう機能を入れるか、だ。

(続く)