名張市つつじが丘おもちゃ病院

三重県名張市つつじが丘でおもちゃの病院を開院しています。年中無休で修理は無料、部品代のみ実費です。おもちゃの修理依頼は tutuji@cb4.so-net.ne.jp へメールにてご連絡下さい。なお、宅配便での受け付けは行っておりません。このブログにはおもちゃ等の修理事例やツール製作などを載せていきます。故障診断や修理方法の改善等、ご意見をお寄せ下さい。

RFチェッカー表示部のファームウェアのバグ改修

RFチェッカー表示部のファームウェアにバグが有り、改修しました。

該当するブログ記事は下記の4件です。

27MHz~2.4GHz対応RFチェッカー(ラジコン電波検知器)表示部の省電力化(第3弾)

27MHz~2.4GHz対応RFチェッカー(ラジコン電波検知器)表示部の省電力化(第2弾)

27MHz~2.4GHz対応RFチェッカー(ラジコン電波検知器)表示部の省電力化

27MHz~2.4GHz対応RFチェッカー(ラジコン電波検知器)表示部の製作

公開ファイルは既に入れ替えてありますので、ダウンロードして下さい。

なお、回路には変更はありませんので、ファームウェアの入れ替えのみの対応です。

【バグ内容】
LEDマトリクスを駆動するポートが、中間電位にさらされるにも関わらずデジタルI/Oに設定していた。

【改修内容】
RA0・RA1・RA2はアナログポート設定にしてデジタル入力バッファを切り離すようにした。
RA4・RA5はアナログポート設定ができないので、常にデジタル出力とした。
上記の変更に整合するようにLAT変換表・TRIS変換表を変更した。
スポンサーサイト
  1. 2018/01/28(日) 19:24:50|
  2. 製作記事
  3. | コメント:0

ATtiny13Aのパワーダウン実験

最近になってATtiny13Aを弄っているのだが、この石のいいところを見付けた。それはパワーダウン時の消費電流が1uA以下になることだ。PIC16Fでは20uA程度、LFタイプでも2uA程度を消費する。ボタン電池を前提とした応用には好適だと思う。

ATtiny13A以外のAVRはコストパフォーマンスが悪いのだが、ポート数が多く必要で、且つ省電力性能も必要なときは多ピンのAVRの選択も有り得るかも知れない。

この省電力性能を引き出すにはちょっとしたコツが必要だったので忘備録として記事にしておく。

おもちゃへの応用ではSleep時は内蔵モジュールをすべて停止しピン変化割込みでWakeUpすればよいので、パワーダウンモードでSleepさせる。Sleep前にWDTとBODを無効化しておく。

この処理を具体的に書いたものが以下のソースコードだ。

ATtiny13AのSleep実験ソースコード1
ATtiny13AのSleep実験ソースコード2

【処理の流れ】
①PB1をHにして、WDTとBORを殺して、パワーダウンする。

②このとき消費電流は0.3uAである。

③PB4をLにすると、ピン変化割込みが発生しWakeUpする。

④WDTを生かして、PB1をLにする。BODは自動的に生き返る。

⑤PB3がLになるまでは、約16ms周期でWDT割込みが発生し、その都度PB0が反転する。

⑥このとき消費電流は約0.8mAである。

⑦PB3がLになるとメインループの先頭に戻る。

「ちょっとしたコツ」 とは、レジスタやシステムの状態をを変更するときには変更許可ビットを設定してから規定の命令サイクル以内に目的の操作を行わなければならいという「時間制限手順」を守るということだ。ここではWDTの変更、BODの変更、パワーダウンモードへの移行がそれに当たる。この制約に従うと上記の命令シーケンスが必然となる。

中身が定かでないライブラリの使用は避けて、展開が決まっているCの構文とインラインアセンブラで書くのが確実だ。

実験に使ったプロジェクトは ここから ダウンロードできる。
  1. 2018/01/26(金) 20:54:07|
  2. 製作記事
  3. | コメント:0

RFチェッカー表示部の製作(ATtiny13A版)

RFチェッカー表示部の製作(ATtiny13A版)実装

【前振り】
以前に RFチェッカーの表示部(16F1705版) を作ったが、今回は制御マイコンをATtiny13A(2018年秋月@50円)にして、若干のコスト削減を図った。ポート数が少ないのでRFパワーデテクタのイネーブル制御ができなくて、省電力機能は実装できない。そうすると、単なるレベルメーターになってしまい、レベルメーターICでよいではないか、と言われそうだがそうではない。マイコンを使うメリットは十分ある。

・平均値とピーク値の取得をソフト処理で行うので外付けの回路が一切不要である。

・平均値とピーク値を同時に表示できるので、単に電波の有無だけでなく送信の特性が掴める。

・表示のスケーリングはテーブル変換式で変換曲線を自由に設定できるので、おもちゃの診断に適したスケーリングにできる。

【猿真似】
実は、この製作は HRHさん の猿真似だ。僕はおもちゃ修理でPICをよく使っているのだが、8ピンPICはポートの機能に制約(MCLRピンはデジタル入力にしか使えない)があり、単純なレベルメータとしても実現ができなかった。ところが HRHさん はATtiny13Aを採用することで8ピンマイコンで実現した。目から鱗だった。しかし、そのファームウェアは公開されていないので、当方で独自に開発して公開することにした。ここで公開している設計資料とファームウェアは複製・改変・二次公開を自由にやってよい。おもちゃ修理に有益で価値ある情報がおもちゃ病院業界に広く浸透し、おもちゃドクター諸氏の手で改善され進化していくことを願っている。

【設計】
①処理の流れ

・RFデテクタの出力信号を受け入れてAD変換する。高精度は必要ないので、変換結果の上位8ビットを取得する。

・平均値とピーク値を求める。平均値の算出期間とピークホールド時間は視認性と応答性の観点から数msとする。

・平均値とピーク値をバーLEDに表示する。

②性能設計

・メインループの周期に支配的なのはAD変換時間である。つまり、AD変換処理が最高速になる動作環境とする。

・ADCの最高クロックは1MHzである。一方内部オシレータは9.6MHzなので適切なクロック分周比を設定できない。このため、OSCCALのチューニングによって内部オシレータを8MHzにして8分周する。

・ATtiny13Aの実行速度限界をチェックしておく。Vcc=1.8Vでは4MHz、Vcc=4.5Vでは20MHz、その間は直線的であるので、Vcc=2.475V以上で8MHz動作が可能となる。

・8ビットAVRはクロック精度が悪い(誤差10%)のだが、これを逆手に取る。事前の実験では、工場出荷時のOSCCAL値が0x5dであったところ、0x53の設定で8MHzになった。手持ちの10個で試してみると、すべて余裕を以ってチューニングができた。チューニングに便利なツールも作ったので ここ を参照されたい。

③バーLEDの制御

・10セグメントのバーLEDを5本のポートで制御する。

・2個のLEDを1組にして、1本のポートに繋ぐ。ポート出力の極性によって1方のLEDのみを点灯させる。(次項の回路図を参照)

・ポートを入力モードに設定することで2個とも消灯する。入力モードにするとポートが中間電位にさらされるので、DIDR0レジスタの設定でデジタル入力を禁止しておく。

・この制御方法では電源電圧は3Vが基準で、最大でも3.6Vとなる。

④RFデテクタ
ADCの内部リファレンス電圧が1.1Vなので、AD8314が都合がよい。LT5534を使うときは、OUTを抵抗分圧で1/2にしてADCへ入力するとよい。

⑤ヒューズ設定

・クロックは内部オシレータ9.6MHzとし、8分周無しを設定する。

・6ポートをフルに使うので、RESETピン機能は無効化する。これを行うと以降は一般のISPライターでは書き換えができなくなるので留意されたい。

・BOD検出レベルは1.8V(TYP)を選択する。BODLEBEL1,0=10とする。

⑥OSCCAL設定

・内部オシレータを8MHzにチューニングすること。

・チューニングされたOSCCAL値をソースコード中の OSCCAL_VALUE で宣言すること。

設定例

#define OSCCAL_VALUE 0x53 //ターゲットのOSCCAL値(@8MHz)

【回路図】
RFチェッカー表示部の製作(ATtiny13A版)回路図1
RFチェッカー表示部の製作(ATtiny13A版)回路図2

【表示例】
バーLEDの左側ほどレベルが高く、右側ほどレベルが低いことを示す。
ピーク値は左側に、平均値は右側に現れる。

無信号時
RFチェッカー表示部の製作(ATtiny13A版)表示例無信号時
無信号、と言ってもノイズ電波を拾っているので、低い値で平均値が現れている。

バトロボーグのペアリング信号
RFチェッカー表示部の製作(ATtiny13A版)表示例バトロボーグ
送信パケット長が短く送信間隔も長いので、平均値は小さく、ピーク値は比較的高く表示されている。ピーク値が暗いことから送信頻度が低いことが判る。

一般の2.4GHzラジコン
RFチェッカー表示部の製作(ATtiny13A版)表示例2400MHzラジコン1
RFチェッカー表示部の製作(ATtiny13A版)表示例2400MHzラジコン2
ピーク値はほぼ一定で明るく表示されている。

27MHzTX2
RFチェッカー表示部の製作(ATtiny13A版)表示例27MHzTX2
ピーク値はほぼ一定していることがデジタル式の特徴だ。平均値は測定期間のタイミングで変動する。

27MHzアナログ2トーン式
RFチェッカー表示部の製作(ATtiny13A版)表示例27MHzアナログ式
AM変調されているのでピーク値が変動している。変調信号が遅いのでピーク値と平均値がほぼ等しくなっている。

27MHz無変調時
RFチェッカー表示部の製作(ATtiny13A版)表示例27MHz無変調時
ピーク値と平均値が同じで一定している。

【評価】

①上記の表示例の如く、送信の特性がよく判る。

②メインループは実測29usとなり、十分な性能が得られた。

③平均値の算出期間とピークホールド時間は約7msとなり、適正な値だ。

【ダウンロード】

設計資料と開発プロジェクトは ここから ダウンロードできる。
  1. 2018/01/22(月) 18:29:29|
  2. 製作記事
  3. | コメント:0

おともだちハローキティの修理(プルアップ回路外付け)

1.患者
おともだちハローキティ(Combi)
おともだちハローキティ(プルアップ回路外付け)外観
おともだちハローキティ(プルアップ回路外付け)取説1
おともだちハローキティ(プルアップ回路外付け)取説2

2.症状
①動作モードが3つあるが、モード3しか動作しない。

3.診察
①箱に操作説明が書かれていて、モード1とモード2はお腹のボタンを押すと動作を始めるが、モード3はお腹のボタンの操作は不要のようだ。モード1とモード2が動かないのはお腹のボタンが効いていないのではないかと推測する。

②お腹のボタンは、基板の櫛状パターンを導電ラバーで押さえるタイプのスイッチだった。

③このラバー接点の印加電圧を測定すると、ラバー接点をオープンにしても0.1V以下である。ラバー接点の片側はGNDに繋がっているので、ポートのプルアップが断線している可能性がある。或いは、基板パターンの断線や短絡も有り得る。

④基板は多層基板が使われていて、目視ではパターンを追えない。導通チェッカーでも負えなかった。ラバー接点のホット側は基板表面に現れることなくCOBへ入っているようだ。

⑤内部プルアップの断線はよくある故障で、外部プルアップすることで救われることがある。今回もそれであって欲しいと願いつつ、やってみた。電源電圧は電池3本の4.5Vで、プルアップ抵抗を変えながら、GNDに対するホット側の電圧を測定した結果は以下のとおり。

・5kΩではオープン時1.7Vで、操作を認識しない。

・2.5kΩではオープン時2.4Vで、操作を認識する場合もあるが、不確実である。

・1kΩではオープン時3.4Vで、操作を認識し、正常に動作した。

⑥1kΩで外部プルアップすると安定に動作することが判ったが、これをラバー接点でスイッチするのは難がある。ラバー接点は軽く押して1kΩ、強く押すと300Ωになる。今はスイッチ回路は働くのだが、今後ラバー接点が劣化していくと不動作になってしまう恐れがある。

⑦ここまで強力にプルアップしないといけなくなったのは、「内部プルアップの断線」ではなく、「GNDへの内部漏電」だと思う。それと、Vcc/2をかなり超えないとHレベルと認識しないので、ゲート部分が壊れていると思う。

4.治療
①ボタンのポート入力に不具合があるもののそれ以外の機能は正常に動くので、マイコン換装は行わず、トランジスタ1石でスイッチ回路を補強することにした。

②【回路図】
おともだちハローキティ(プルアップ回路外付け)回路図
・実験では1kΩでプルアップすると安定動作したので、実装はマージンを見て470Ωとした。

・今は0Ωでも過電流は流れないが、故障状態が今後どうなって行くのか判らないので、最低限の抵抗は付けておく。

③【実装】
簡単な回路なので空中配線する。
おともだちハローキティ(プルアップ回路外付け)実装1
おともだちハローキティ(プルアップ回路外付け)実装2
電源は、この基板では電源SWのピンからとるのがやり易かった。
おともだちハローキティ(プルアップ回路外付け)実装3
おともだちハローキティ(プルアップ回路外付け)実装4
空中配線したスイッチ回路はホットボンドで固めて、保護と絶縁をしている。
おともだちハローキティ(プルアップ回路外付け)実装5
おともだちハローキティ(プルアップ回路外付け)実装6
おともだちハローキティ(プルアップ回路外付け)実装7

④【動作テスト】

・3.5V~5Vの電源電圧範囲で正常に動作することを確認した。

・電源スイッチをオフにすると、電池の電流が完全にゼロになることを確認した。

⑤【所感】
今回の治療はあくまでも「対症療法」であり、不具合の原因そのものを解消したのではない。今は不具合を潜在化できたけれども、再び顕在化してくる可能性はある。そのときはマイコンを換装することになる。このことを明確に依頼者に伝えておきたい。不具合が再燃してきたときに藪医者と言われたくないので。
  1. 2018/01/20(土) 18:32:26|
  2. 修理事例
  3. | コメント:0

アンパンマン電動レールでGO!GO!DX(クローンリモコン製作)

1.患者
アンパンマン電動レールでGO!GO!DX(アガツマ)
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)外観

幼児向けの乗用おもちゃだ。

【メーカーサイトの説明書き】
●レールを敷いても、レールなしでも遊べます。
●レバーの切り替えで電動走行、フリー走行が選べます。
●コントローラーには前進・後進・ストップの走行操作機能の他に「アンパンマンのおしゃべりボタン」と「アンパンマンのマーチが流れるメロディボタン」が付いています。
●セット内容:本体一式、レール12本

ハンドルのところに赤外線リモコンが付いていて、幼児が操作することもできる。また、取り外して親御さんが操作することもできる。

2.症状
①リモコンが無いので動かせられない。

3.診察
①本体はテスト用リモコンで正常に動作するので、リモコンを新調すれば使えるようになる。

4.治療
【方針】
テスト用リモコンを差し上げればよいと言われるかも知れないが、テスト用リモコンはテストドライバーとして特化しているので、通常使うリモコンとしては不適格だ。

・省電力での運用が設計されていない。

・キャリア変調ではないベアな赤外線コードの出力機能など、通常のリモコンには不要な機能が搭載されている。特に邪魔になる訳ではないが。。。

そのため、正規のリモコンのクローンを作ることとした。

【要件定義】
正規のリモコンの機能と赤外線コード仕様は ここ を参照。

【デバイス選定】
入力ポートが5本、出力ポートが1本必要で、これに該当するデバイスとしてPIC12F509(2018年秋月価格@50円)とATtiny13A(2018年秋月価格@50円)が挙げられる。

・PIC12F509は内部プルアップ機能がGP0、GO1、GP3にしかないので、2本は外部プルアップが必要であり、多少のコストアップになる。ATtiny13Aは全ピンが内部プルアップ可能である。

・内部オシレータの周波数精度が12F509が1%であるのに対して、ATtiny13Aは10%もあり、今回の応用では信号タイミングに精度が求められるので、個別のキャリブレーションを実施する必要がある。手間が掛かるだけのことであり、不採用の理由には当たらない。

・ポートが6本必要なため、RESETピンをポート機能ピンに充てる必要がある。12F509はコンフィグの設定で容易に変更できるが、ATtiny13Aは一度RESET機能を殺すと以降の通常のISPライターでのプログラムができなくなり、再書き込みをするには高電圧シリアルプログラミング機能を持つプログラマー/デバッガーが必要になる。これも開発側の設備の問題であり、不採用の理由には当たらない。

・プログラムメモリは12F509が1kワードに対して、ATtiny13Aは512ワードだが、今回の応用では十分な量である。

・実行速度、消費電力、動作電源電圧範囲などはどちらも問題は無い。

以上の比較評価から今回はATtiny13Aを採用する。

【設計】
①ポートの割り当て

・LED制御信号を出力するポートは高電圧シリアルプログラミングの信号線と被らないようにする。

ポート割当て、高電圧シリアルプログラミング信号線
PB0:GOボタン入力(内部プルアップ)、SDI
PB1:STOPボタン入力(内部プルアップ)、SII
PB2:BACKボタン入力(内部プルアップ)、SCI
PB3:アンパンマンボタン入力(内部プルアップ)
PB4:LED出力(正論理)、SDO
PB5:メロディボタン入力(内部プルアップ)、高電圧

②赤外線信号のタイミング
フレーム構成:リーダー+機能コード(8ビット)+反転コード(8ビット)+トレイラ(1ビット)
リーダー:オン2.9ms+オフ1.7ms
ビット値0:オン0.6ms+オフ0.6ms
ビット値1:オン0.6ms+オフ1.2ms
トレイラ:オン0.6ms
フレーム周期:100ms

③操作ボタンと赤外線期の機能コードとの対応
GO:b'11001100'
STOP:b'11101110'
BACK:b'10101010'
アンパンマン①:b'00001001'
アンパンマン②:b'01001001'
アンパンマン③:b'10001001'
アンパンマン④:b'11001001'
メロディ①:b'00010001'
メロディ②:b'10010001'

④省電力設計

・操作が無いときはパワーダウンモードでSleepする。

・どれかボタンがオンされるとポート変化割り込みでWakeUpする。

⑤内部オシレータのキャリブレーション

・ATtiny13Aのキャリブレーションツール でキャリブレーション値を決定し、その値をファームウェアに持ち込み、実行開始直後にOSCCALレジスタに反映する。

【回路図】
アンパンマン電動レールでGO!GO!DX(クローンリモコン製作)回路図

【検証】
①BACKボタンがオンしたときの出力信号波形
アンパンマン電動レールでGO!GO!DX(クローンリモコン製作)動作時赤外線信号波形1
アンパンマン電動レールでGO!GO!DX(クローンリモコン製作)動作時赤外線信号波形2
アンパンマン電動レールでGO!GO!DX(クローンリモコン製作)動作時赤外線信号波形3


②Sleep時の消費電流は16uAだった。

【ダウンロード】
設計資料と開発プロジェクトは ここから ダウンロードできる。

  1. 2018/01/17(水) 20:58:15|
  2. 修理事例
  3. | コメント:0

OSCキャリブレーションツール(ATtiny13A)

【前振り】
AVRの工場出荷時に校正された内部オシレータの誤差は10%もある。手持ちのATtiny13Aを実測してみると5%以上の誤差があった。タイミングに精度を求められる応用、例えば赤外線リモコンやラジコンのエンコーダ/デコーダに使うにはユーザ側でデバイス個別に校正をしなくてはいけない。その作業を効率的に行うためのツールを作った。

【校正のやり方】
①AVRを内部オシレータで稼働させ一定周波数のパルスをポートに出力する。

②そのパルス周波数を外部でカウントして規定値との乖離を視る。

③乖離の具合によって、OSCCAL値の増減を入力ポートを介して指示して、合わせ込む。

④最後に、入力ポートを介して校正値のEEPROMへの書き出しを指示する。

⑤プログラマーでEEPROMを読み出して、OSCCALの校正値を得る。

【操作方法】
①PB0(ピン5)とGND(ピン4)にカウンタを繋ぐ。

②内部オシレータが9.6MHz・8分周のときはPB0の周波数は585.9375Hzが正解値になる。

③内部オシレータが9.6MHz・分周無しのときはPB0の周波数は4687.5Hzが正解値になる。

④そうなるようにPB3とPB4を操作する。

⑤PB3(ピン2)をLにするとOSCCAL値がインクリされる。

⑥PB4(ピン3)をLにするとOSCCAL値がデクリされる。

⑥目標の周波数になったら、PB1(ピン6)をLにするとOSCCAL値がEEPROMの0番地に書込まれる。

⑦PBnは内部プルアップされている。

【ダウンロード】
このツールの開発プロジェクトは ここから ダウンロードできる。
  1. 2018/01/17(水) 20:30:51|
  2. 製作記事
  3. | コメント:0

PICプログラマーで ATtiny13Aの高電圧シリアルプログラミング をサポート

プログラマー外観

【前振り】
おもちゃに使われているカスタムICが故障しているときは別のマイコンで換装することになるが、数あるマイコンの中で殆どの場合はPICを採用している。その理由はコスト面で、今のところPICが最も廉価だからだ。PIC16F1705のように100円(2018年秋月価格)で音声再生と音楽演奏が同時実行できる石はPIC以外には無い。ラジコンのデコーダのようにデジタルI/Oだけで済む場合はPIC12F509(2018年秋月価格50円)で換装が可能だ。このくらいのコストであればおもちゃ修理に使ってもよいと考えている。

しかし、PIC以外にもコストパフォーマンスの良い石があった。ATtiny13A(2018年秋月価格50円)だ。ADC付きで、RESETピンをデジタルI/Oやアナログ入力に割り当てることができる。同じ価格のPIC12F509にはADCは無いし、MCLRピンはデジタル入力にしか使えない。動作速度も内部オシレータ使用で、命令サイクルは9.6倍も速い。これがATtiny13Aのメリットだ。逆にデメリットは、一度RESETピンの機能を無効にすると、その後は一般のISPライターではプログラムできなくなることだ。書き直すためには高電圧シリアルプログラミングをサポートしたライターが必要になる。

そこで、 自作している 「USB接続PICプログラマー」 に高電圧シリアルプログラミングの機能を追加した。PICプログラマーと呼んでいるが、PIC以外にもシリアルEEPROMやAVRの低電圧シリアルプログラミングもサポートしている。今になって機能追加の意欲が湧いてきたのは、おもちゃ修理にATtiny13Aのメリットを活かせるのではないかと言う期待感が高まってきたからだ。しかし、そうすると読者の皆さんにも高電圧シリアルプログラミングの環境を持っていただかないと、このブログで公開するファームウェアの利用がし辛くなってしまう。高電圧シリアルプログラミングができるライターをお持ちでなければ、この 「USB接続PICプログラマー」 がお薦めだ。

【改造の要点】
「USB接続PICプログラマー」 は元々高電圧を生成する機能を持っているし、AVRの低定電圧シリアルプログラミングは既にやっているので、高電圧シリアルプログラミングをサポートすることは容易だ。AVRのメモリプログラミング仕様を確認したところ、「USB接続PICプログラマー」 の回路は変更不要で、ソケットアダプタを新規に製作するだけで実現可能なことが判った。プログラマーを制御するマイコンのファームウェアとPC側の制御ソフトは機能追加が必要だ。

今のところ、おもちゃ修理に使ってメリットがあるのはATtiny13Aのみなので、これをサポート対象としている。

AT90S2323とATtiny85も高電圧シリアルプログラミングが可能であるが、AT90S2323は内部オシレータが無いので使い勝手が悪いし、今ではコストメリットも無い。ATtiny85は今後サポートするかも知れない。

ファームウェアは高電圧シリアルプログラミングのデバイスインタフェースを取り込む。
ソケットアダプタは低電圧シリアルプログラミングに対して、SII信号の追加とピン接続の変更を行う。
PC側の制御ソフトは高電圧シリアルプログラミングのプロトコルを追加する。

ATtiny13A用のソケットアダプタの結線図
PICプログラマーでATtiny134A高電圧シリアルプログラミングをサポート結線図

【ダウンロード】
改造後のUSB接続PICプログラマーの設計資料とプログラマー制御マイコンのファームウェアの開発プロジェクト、PC側の制御ソフトの開発プロジェクトは ここから ダウンロードできる。

【使い方】
デバイス一覧の中から 「tiny13A-HV」 を選択する。HVのキーワードが高電圧シリアルプログラミングを表している。

実行機能は 「読込み」 「書込み」 「チップ消去」 「RUN」 が使える。

AVRSTUDIOで扱うHEXファイルはフラッシュメモリとEEPROMとで分かれていて、ファイル名の拡張子で区別される。フラッシュメモリは 「.hex」 、EEPROMは 「.eep」 だ。「USB接続PICプログラマー」でも、指定されたHEXファイル名が 「*.eep」 のときはEEPROMにアクセスする。それ以外のときはフラッシュメモリにアクセスする。

「USB接続PICプログラマー」 は FB(フューズビット) 、 LB(ロックビット) 、 SB(シグネイチャーバイト) 、 CB(キャリブレーションバイト) の情報をHEXファイルでやり取りする。FBはアドレス0x100000 、 LBはアドレス0x200000 、 SBはアドレス0x300000 、 CBはアドレス0x400000 に配置している。FBとLBの設定値をHEXファイルに埋め込んでおけばデバイスに書き込んでくれるので便利だし、設定ミスの防止になる。他のライターを使うときは、これらの情報が不正データだと見做されるかも知れない。

【関連調査】
秋月で販売されているAVRで高電圧シリアルプログラミングが使えるものを調べた。

AT90S2313 高電圧シリアル無し
AT90S2323 RESETピンの機能変更機能は無い、高電圧シリアルのコードが異なる
ATmega48/88/168/328 高電圧シリアル無し
ATmega88 高電圧シリアル無し
ATtiny85 RESETピンの機能を無効にできる、高電圧シリアルのコードが微妙に異なる
ATtiny2313 高電圧シリアル無し
ATmega8 高電圧シリアル無し

高電圧シリアルプログラミングは AT90S2323 と ATtiny85 で使えるのだが、プロトコルはATtiny13Aと違っている。HEXファイルを書き込むだけなのに何故デバイス毎に仕様を変えるのか、その設計思想が全く理解できない。
  1. 2018/01/15(月) 15:14:36|
  2. PIC開発
  3. | コメント:0

アーロと少年の修理(マイコン換装)

本件は、(愛知県)小牧おもちゃの病院様の修理事例であり、COBチップが故障していたため、つつじが丘おもちゃ病院(当院)が提供している 「故障したICやマイコンの代替品をお作りするサービス」 を利用していただいた。
当記事には依頼元の小牧おもちゃの病院様から提供していただいた情報や資料が含まれている。

故障したICをPICマイコンで換装した事例は既に100件を超えていて、その殆どが「電子オルゴール+音声再生」のファームウェアをベースに開発している。どれも似たり寄ったりでマンネリ化して来ている感が否めないが、見方を変えれば、このファームウェアは少しのカスタマイズで多種類のおもちゃに適用できると言うことでもある。

1.患者
アーロと少年 いっしょに冒険! トーキングアーロ&スポット
アーロと少年(マイコン換装)外観
恐竜のアーロの背中にスポット少年を乗せると二人が会話をするそうだ。
動力源はバネで、尻尾のレバーを操作するとしゃべりながら歩くらしい。

2.症状
①うんともすんとも言わない。

3.診察
①依頼元でCOB不良と診断し、代替マイコンのファームウェア開発を当院へ依頼された。

4.治療

【要件】
①依頼元から提示された動作要件は以下のとおり。

・本体にSWが2つあり、一つは少年を背中に乗せると感応するSW。もう一つは尻尾のレバー操作で感応するSW。共に感応している間はオンが継続し、正論理で入力され、外部プルダウンされている。

・背中SWがオンすると以下を順に実行する。
 「いっしょにいこう」を音声再生
 「アンパンマーチ」を演奏
 「アンパンマンたいそう」を演奏
 「ミッキーマウスマーチ」を演奏

・上記の実行中は背中SWのチェックは行わず、オフになっても最後の曲まで演奏を継続する。

・尻尾SWがオンすると、「アーロの鳴き声」を音声再生する。

②非動作中はSleepし、背中SW、または尻尾SWのオンでWakeUpする。

③電源が3Vであるのとスピーカーが小型のためシングルPWM出力では音量が小さい。元々はBTL出力のようである。緩和策として、音声再生とオルゴール演奏の音量レベルを共に100%に設定しておき、アーロが鳴くときはお喋りとオルゴール演奏の音量レベルを50%にミュートして、飽和を避けながら実感音量を大きくする。

④外部にアンプを設置する場合のためにアンプのイネーブル信号を出力する。この制御信号は正論理と負論理で別ピンに出力する。

【ファームウェア開発】
①PIC電子オルゴール+音声再生Ver5_6をベースに級の処理を書き加える。要件は簡素なので特別な仕掛けを作り込むことは無い。

②音声の長さに応じて所要メモリが決まる。逆に言えば内蔵メモリ量によって収容できる音声の長さが制約される。「いっしょにいこう」が1秒、「アーロの鳴き声」が2秒あり、8kspsでは12kワードが必要になるので、16kワードのメモリを持つ16F18326(2017年秋月価格130円)でないと収まらない。

③4kspsにすると音声データは6kワードになり、音声の前後を若干カットすることで8kワードのメモリを持つ16F1705(2017年秋月価格100円)にギリギリ搭載できた。

④ポートの割当て

・ポート数は余裕があるので、ICSPに使われるポートは空けておく。

・未使用のポートは入力モードで内部プルアップしておく。

;RA0:PWM(CWGB)出力(負極性)、ICSPDAT
;RA1:空き(入力モード、内部プルアップ)、ICSPCLK
;RA2:PWM(CCP1)出力(正極性)
;RA3:MCLR(内部プルアップ)、Vpp
;RA4:尾SW入力(正論理)
;RA5:背SW入力(正論理)
;RC0:アンプイネーブル出力(正論理)
;RC1:アンプイネーブル出力(負論理)
;RC2:空き(入力モード、内部プルアップ)
;RC3:デバグ時はTX、非デバグ時は空き(入力モード、内部プルアップ)
;RC4:空き(入力モード、内部プルアップ)
;RC5:空き(入力モード、内部プルアップ)

⑤開発したファームウェアの設計資料と開発プロジェクトは ここから ダウンロードできる。音声を8kspsで再生する16F18326のプロジェクトと、再生レートを4kspsに落とした16F1705のプロジェクトの2種類が格納されている。

【再生音】
8kspsでの再生音はこれ

4kspsでの再生音はこれ

(再生できない場合はダウンロードファイル中のMP3ファイルをお聴き下さい)

【回路図】
(依頼元からの提示待ち)

PIC16Fにはポートピンの内部プルダウン機能が無いのでSW入力ポートは外部プルダウンが必要だ。

  1. 2018/01/07(日) 10:44:37|
  2. 修理事例
  3. | コメント:0

アンパンマン電動レールでGO!GO!DX(赤外線コード変更)

1.患者
アンパンマン電動レールでGO!GO!DX(アガツマ)
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)外観
幼児向けの乗用おもちゃだ。

【メーカーサイトの説明書き】
●レールを敷いても、レールなしでも遊べます。
●レバーの切り替えで電動走行、フリー走行が選べます。
●コントローラーには前進・後進・ストップの走行操作機能の他に「アンパンマンのおしゃべりボタン」と「アンパンマンのマーチが流れるメロディボタン」が付いています。
●セット内容:本体一式、レール12本

ハンドルのところに赤外線リモコンが付いていて、幼児が操作することもできる。また、取り外して親御さんが操作することもできる。

2.症状
①リモコンが無いので動かせられない。

②本体は、テスト用リモコンでは正常に動作するので、リモコンを新調すれば使えるようになる。

3.診察
①別の赤外線リモコンで動くようにしたいとのこと。お客様から支給された赤外線リモコンは中華製で下記の物。ネット通販で100円台で売られているそうだ。
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)リモコン

②支給された赤外線リモコンの赤外線信号波形の例を以下に掲げておく。すべての信号波形はダウンロードファイルの「アンパンマン電動レールでGO!GO!DX(赤外線コード変更)中華リモコン波形.xls」を参照。

③外面は家電品のリモコンのようだが、中華仕様なのか日本の家電協フォーマットとは大きく異なる。

④フレームの繰り返し
「電源」ボタンを押しっ放しのとき
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)リモコン波形1
フレーム周期は108ms。

「電源」を1回目に押したとき
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)リモコン波形2

「電源」を2回目に押したとき
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)リモコン波形3
・3回目に押したときは1回目に押したのと同じ波形であった。
・1回目と2回目で波形の前の部分(MSB寄り)が異なるが、後ろ部分(LSB寄り)は同じであるため、後ろ部分をデコードすればよい。
・上記の2点は全てのボタンでも同じ状況になっていた。不思議な仕様だ。
・長時間のオフ後のオンでビットの開始と判断する。
・オフ時間とオンの時間の両方が変化するが、オフ時間でビット値を判定する。
 ビット値0はオフ0.9ms
 ビット値1はオフ1.7ms
・11ビット分の受信でフレーム終了と判断し、下位8ビットをデコード値とする
・上記のルールで全ボタンのデコードを行った結果は以下のとおり。

「電源」:00000000100
「↑」:00000010000
「↓」:00000010001
「ミュート」:00000000101
「←」:00000001001
「→」:00000001000
「AV/TV」:00000000110

4.治療
①本体の基板は健全なので手は入れない。中華リモコンから受信した赤外線信号を「レールでGOGO!」の本来の赤外線コードに変換して、本体の基板に入力することにする。この修理事例でのテーマは、赤外線信号のプロトコル変換器を作ることだ。

改造のイメージ
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)改造イメージ

②プロトコルを変換するだけの処理なので最小のPICで実現できる。最廉価なPICで10F322(2017年秋月@45円)を採用する。

③機能設計
//ポートの割当て
//RA0:ICSPDAT
//RA1:変換後の赤外線信号出力、ICSPCLK
//RA2:変換前の赤外線信号入力
//RA3:ICSPVpp

//受信(中華リモコン)赤外線信号
//フレーム構成:11ビット
//リーダーやトレーラは無く、長時間のオフ後のオンでビットの開始と見る
//赤外線オフの時間とオンの時間の両方が変化するが、オフの時間でデコードする
//ビット値0:オフ0.9ms
//ビット値1:オフ1.7ms
//11ビット分の受信でフレーム終了と見て、後部の8ビット分をデコード値とする
//フレーム周期:108ms

//送信(純正リモコン)赤外線信号
//フレーム構成:リーダ+機能コード8ビット+反転コード8ビット+トレイラ
//リーダ:オン2.9ms+オフ1.7ms
//ビット値0:オン0.6ms+オフ0.6ms
//ビット値1:オン0.6ms+オフ1.2ms
//トレイラ:オン0.6ms
//フレーム周期:100ms

//赤外線コード変換表
//入力IR信号コード値 出力IR信号コード値
//電源 :00000000100 STOP:b'11101110'
//↑  :00000010000 GO :b'11001100'
//↓  :00000010001 BACK:b'10101010'
//消音 :00000000101 STOP:b'11101110'
//←  :00000001001 音声:b'00001001'
//→  :00000001000 音楽:b'00010001'
//AV/TV:00000000110 STOP:b'11101110'

④回路図
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)回路図
・元々は赤外線受信モジュールが2個設けられていて並列接続されている。このことは従前どおりとする。

・また、本体基板ではバッテリーからダイオード2本を介してVccを供給しているが、これではフル充電時に5.5Vを超える可能性があるので、事前に十分評価した方がよい。

⑤入出力信号波形
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)動作時赤外線信号波形1
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)動作時赤外線信号波形2
アンパンマン電動レールでGO!GO!DX(赤外線コード変更)動作時赤外線信号波形3

⑥ファームウェア
・TMR0を時間計測に充てる。TMR0の1カウントに相当する時間を計測のタイムベースとし、16usとする。

・中華リモコンからフレームを受信すると、純正リモコンの赤外線コードに変換してフレームを送信する。従って、フレームの送信周期は受信フレームの周期に等しくなる。中華リモコンのフレーム周期は108msであり、純正リモコンのフレーム周期の100msと殆ど変わらない。また、送信機のボタンを押しっ放しにすると無限にフレームを繰返すことも同じであり、本体のマイコンから見れば純正リモコンと全く同じに見える。

・ファームウェアの設計資料と開発プロジェクトは ここから ダウンロードできる。
  1. 2018/01/05(金) 22:05:24|
  2. 修理事例
  3. | コメント:0

プロフィール

大泉茂幸

Author:大泉茂幸
名張市つつじが丘おもちゃ病院
名張市つつじが丘南3番町129
tutuji@cb4.so-net.ne.jp
090-5534-6494
連絡は上記のメール、またはSMSでお願いします。

子どもの頃から趣味は電子工作一筋でやってきました。理科離れが進む中で科学技術に興味を持つ子どもが少しでも増えて行くことを願って、子ども達に電子工作の活動の場を提供しています。

1981年からおもちゃ病院の活動を始め、2014年に三重県名張市への移住を機に「つつじが丘おもちゃ病院」を開院しました。自分でおもちゃを設計し製作する【おもちゃ工房】と、マイコンを応用した電子工作を楽しむ【マイコンクラブ】も併設しています。新規参加メンバーを募集しています。

本ブログで公開している技術情報や成果物のご利用および再配布はフリーです。読者様の技術活動のお役に立てば幸いです。ご利用いただいた結果や感想等を記事へのコメントやメールでフィードバックしていただけると有難いです。

最新記事

最新コメント

月別アーカイブ

カテゴリ

おもちゃ病院 (7)
技術情報 (9)
修理事例 (143)
製作記事 (77)
ドクター研修会 (2)
PIC開発 (9)
未分類 (9)

訪問者数

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR