
前回 【電子工作】コンパクトなATTINY1614簡易オシロ付きロジックチェッカを作りました(その3)
で一旦完成したこのプロジェクト。
ATTINY1614のファームの不具合を修正するリファクタを行ったのでその報告です。
AIのClaudeのチャット・サポートを貰ってファームを修正しました。
元記事はNoteにまとめています。
【電子工作】「信号みえ太」コンパクトな簡易オシロ付きロジックチェッカの製作(その4 ATTINY1614ファームの不具合修正)
改善要望点
完成後に気づいた不具合点は2点です。
・3接点サムスイッチを操作した時に時々画面が真っ暗になることがある
・長押しで電源OFFですが、なにかのはずみで切れなくなることがある
これらの不具合対策のために、リファクタしないといけないのは下記の3点
と考えました。
この「信号みえ太」の後に、「信号だす蔵」を開発して、不具合が色々と発生し、改善しました。
その経験を信号みえ太にも織り込みたいと考えました。
① スイッチ入力や、LCD更新時にADCを止めて、割り込みが重畳させない
② I2Cのエラー処理が入ってない。リトライとかタイムアウトを入れる
③ それ以外のスリープやWakeUpで処理が不十分なところの改善
今回のリファクタリングで、不具合が改善すると思います。
変更方針
AIにリファクタを依頼すると、下記の変更方針での回答がありました。
① ADC/スイッチ入力/LCD更新の割り込み重畳対策
・V1.2のISR(PORTA_PORT_vect)は内部で_delay_ms(20)を最大2回
(〜40ms)ブロッキング実行していました。
・これがI2C転送中やADC変換中に重なると、I2Cバスが長時間止まって
OLEDがタイムアウト/リセット→画面ブラックアウト、
あるいは長押し判定のタイミングがズレて電源が切れない、
という2つの症状の両方に説明がつきます。
・Arduinoでは、割り込み処理内で複雑な処理を入れていますが、AVR
Studioで開発した「信号だす蔵」では割り込み処理はフラグを立てる
のみで、処理はmain処理側に渡して動作不具合を解決しました。
キー処理は反対にブロッキング処理にして、ボタンを離す時も含めて
チャタリングを排除しました。
② I2Cエラー処理
・Wireライブラリ依存(タイムアウトなし=ハングしうる)をやめ、
だす蔵と同じ直接TWI0レジスタ制御に変更。
・I2C_start/I2C_Writeにタイムアウト(15000カウント)・NACK検出・
BUSERR/ARBLOST検出を追加し、異常時はI2C_Force_Recover()で
バスを強制復旧します。
③ Sleep/WakeUp処理
・こちらは今回は見送りました。実運用で目立った不具合が出ていない
ため、①②の修正で様子を見て、必要になれば着手する予定です。
変更点
具体的な変更点は下記の2点です。(③は今回見送ったため対象外)
① ADC / スイッチ入力 / LCD更新の割り込み重畳対策
実際に変更したのはスイッチ割り込み(ISR)側のみです。
ISRを軽くすることで、ADCともLCD更新とも競合しなくなりました。
・ISR(PORTA_PORT_vect)からブロッキング処理(_delay_ms(20)×最大
2回、合計〜40ms)を完全に撤去
・ISRはswitchPushedフラグを立てるだけの非ブロッキング処理に変更
・チャタリング待ち・長押し判定・長押し後のレンジ変更処理は、新設した process_keys()(メインループから毎周呼び出し)に移動
・readWave()内の早期打ち切りチェック(switchPushed)を、
旧版でhRange 6〜9に漏れていたのを全レンジ(0〜9)に統一
低速レンジ計測中でもボタン操作への反応が遅れなくなります。
② I2Cエラー処理
・通信方式自体はV1.2(実績あり)のWireライブラリのまま変更せず、
Wire.endTransmission()の戻り値でエラー(NACK/バスエラー等)を
検出した場合のみI2C_Recover()でTWI0を再初期化(Wire.end()→
Wire.begin())してバスをリカバリする
・復旧後はOLEDへの疎通確認(ACK確認)まで行い、本当に復旧できたか
を戻り値で返す
・FlushBuffer()は転送異常を検知したらその場で打ち切り、
次周期のリトライに委ねる形にする
改訂履歴
この方針でファームを改定しての動作確認、修正を繰り返しました。
最初のV1.2から最終のV2.0までの改定履歴は、ファーム(スケッチ)
内のコメントに記載しています。
実機確認結果: ・キー操作の安定性向上、長押しでのSleep復帰OK
・500us/divなど高速レンジでの画面更新も高速化を確認
参考のために前と変わりませんが回路図を添付します。
電源はボタン電池から供給されているので、UPDIプログラマーとは
UPDIピンとGNDピンをつないでArduinoからUPDIでプログラムします。
なお、今回のソフトの最新版はGistのこちらにおいてます。
TINY1614_LOGIC_CHECKER_w_osciloscope_V2.0.ino
今回はファーム改定だけなので、これで終了しますね。
次回の記事は何にしましょうかね、乞うご期待!
過去の記事
・【電子工作】「信号みえ太」コンパクトなATTINY1614簡易オシロ付きロジックチェッカの製作(その1 Arduinoで実装)
・【電子工作】「信号みえ太」コンパクトな簡易オシロ付きロジックチェッカの製作(その2 ATTINY1614に移植)
・【電子工作】「信号みえ太」コンパクトな簡易オシロ付きロジックチェッカの製作(その3 ケースに組込み・完成)

おもちゃ修理情報のまとめ・備忘録にNoteを使っています。
修理記録や電子工作メモをNoteに写真付きで整理しています。
今回の記事は下記note記事からの転載です。
【おもちゃ病院】バトル型戦車ラジコン MILITARY TANK IRC 2台の修理
今回は近隣のおもちゃ病院で預かったメーカ不明のバトル型戦車
「MILITARY TANK IRC 」2台を修理しました。機構系はベテランドクターが修理を行い、電装系は私が修理を行う共同作業で修理しました。
概略:バトル型戦車 2台を修理
モータの補修、モータドライバの故障修理、大砲のLEDランプドライバ修理
等を行いました。
① 持ち込まれた状態
-
年式、メーカー:不明(クレーンゲームの景品との所有者談)
1台目:27MHzラジコンは動作
2台目:40MHzラジコンは動作 -
症状:1台目 車輪の片側が動かない。反対側は前進/後進ともOK
2台目:片側の車輪が回りっぱなしで、反対側も動かない -
正常な仕様:左側と右側の車輪が独立して前後し、キャタピラが動作
砲塔も時計回り/反時計回りに動作し、発射ボタンで大砲の先端が
光り、相手に当たると砲塔後ろのLEDが一つずつ点灯する。
全部点灯したら、その戦車は負けて動かなくなる。
ここに持ち込む前にベテランおもちゃドクターによる解析は終了しています。モータがロックしていたのが、壊れた理由の一つですが、それは修理してもらっています。トランジスタも見て貰ってますが、SMDトランジスタが外れない!そうです。
② 原因
1台目(緑色の機体)
分解してメイン基板を確認:
この基板に、下記の回路が載っています。
・左右車輪のHドライバ(前進/後進制御)
・砲塔の回転制御のHドライバ(時計回り、半時計まわり)
・砲塔の大砲発射制御(IR LEDと赤LEDの点灯制御
・27/40MHzのラジコン受信回路(超再生)
右下の緑色が制御用のCPUが乗ったサブ基板で、ここから
各ドライバへの制御信号が出ている。
基板の構成
基板の上です。Hドライバ用のTO-92トランジスタが、SS8050 NPNが2個、2個で計4個、SS8550 PNPも2個、2個で4個のってます。
基板裏は表面実装(SMD)部品です。
上半分
下半分
各制御信号の確認
下から順に、左の前進、左の後進、右の前進、右の後進、砲塔の時計回り、反時計回り、大砲の発射の制御信号となる。
下の写真は右の後進の信号のハンダが外れていたので、細い電線を使って、追い半田でジャンパーしたところです。(線はあとで切ります)
つぎにモータ制御用のHドライバの確認です。
パターンを追って、回路図をトレースしました。
教科書に載っているHブリッジ回路と同じでした。
上2つがSS8550(足つきPNP)、下2つがSS8050(足つきNPN)
そのさらに左と右のトランジスタが表面実装のL6トランジスタです。
SS8550/SS8050をドライブするL6というSOT23のSMDトランジスタが怪しいです。
AIで調べると2SC1623と言う汎用のトランジスタです。
仕様:耐圧 (V_{CEO}=50 {V}\)、最大コレクタ電流 (IC=100 {mA})、直流電流増幅率 (hFE}=200~400\)
手持ちの2SC2712で交換します。マーキングはLYになります。
末尾がGでなくて、Yなので、hFEが120-240と若干低い以外はほぼ同じです。 有名な汎用トランジスタ、2SC1815の表面実装版になります。
https://akizukidenshi.com/catalog/g/g102638/
表面実装のL6を外す
この手の表面実装部品は、ボンドで部品をつけてディップでハンダ付けしていますので、取り外すのはかなり大変です。
自分ははんだごてを2本持って、ハンダを盛って3本の足を同時に熱し、
頃合いを見計らって、一本のコテでトランジスタに少し力を入れて剥がします。
うまくやらないとパターンをはがしてしまうので、注意が必要です。
2SC2715に交換
うまく外せれば、代わりの部品を取り付けるだけです。
自分はL6のベースのパターンを1本切ってしまいました。
極細のジュンフロン線の中の線を使って、ジャンパーして補修するしかないですね
外したトランジスタをトランジスタチェッカでテストします。
このL6は動作していたようです。
故障しているトランジスタは抵抗になったりします。
トランジスタチェッカでは正常でも、動作しないことがあるので注意が必要です。
(チップ中の線の半断線?)
2台目(黄色の機体)
2台目の黄色い戦車も同じように修理しました。基板の位置が違いますね。
下の写真は、右のシールの上のL6を外してます。
あやしいトランジスタは全部交換しました。
大砲発射LEDの修理
この固体は、大砲先端の赤LEDが点灯しっぱなしでした。
赤外LEDも同様です。
オシロで調べると、サブ基板からのベースに入る信号は正常です。
コレクタが常時”L"になっていて、点灯します。
駆動するトランジスタY1が壊れているようです。
黄色の線と、青い線の右側のトランジスタです。
Y1はSS8550のSMD型トランジスタですね。
よく使うので、在庫を持っています。
この2つを交換して、ようやくミッションコンプリ―トです!
ラジコンの送信機でボタンを押すと、すべての機能が動作するようになりました。箱にいれて返しましょう。
長い期間の修理、大変お疲れさまでした。
最終の組み立てと動作確認は、依頼されたベテランおもちゃドクターにお任せしましょう!
④ 結果
-
完全復活
⑤ メモ(次回の自分へ)
-
モータロックで、ディスクリートの足つきトランジスタでなく、ドライバのトランジスタが壊れているので驚きました。220Ωで電流制限されているのに不思議です。モータからサージのスパイクが出たのかも?
-
トランジスタチェッカでOKでも、動作しないトランジスタがありました。足つきのSS8550の1つは念のため交換しました。
-
自宅にオシロがあると、信号の変化をみれるので便利です。
2万円くらいで買えるので、本格的に修理をするなら、持っておいて損はありません。(私は3台持ってますw)
-
直って、依頼者さんがずいぶん喜んでくれたようです。チップまでいただきました。よかったです。
※ 個人情報や危険な改造内容は記載しません
※ 写真は必要最小限とします
このラジコン、1998年製でこちらのブログに情報がありました。
https://tycocollectors.com/models/1997-tyco-slammer/
ぜひこちらからご覧ください👇









