2019.12.6 ATtiny用 OSC CAL値 キャリブレーション 冶具

2019.12.6 ATtiny用 OSC CAL値 キャリブレーション 冶具

スタッフブログの更新が滞っておりすんません。今回は、ATtinyマイコン向けのOSCCAL値のキャリブレーション治具を紹介します。

おもちゃの修理やモノづくりの制御マイコンに8ピン ATtiny13aやATtiny85を利用しています。

通信販売ページの赤外線リモコン(ハピエスト リモコン)などを製作する際やUART通信を行い場合など、ライブラリで使用する内部タイマーの精度が必要です。

内部 RC OSC

ATtiny13aデータシート P23参照

ブロック図でいうところの青枠なのですが、精度を求めるなら、外部に水晶発振器を付けるということになるのですが、部品点数の増加や基板のスペース的なところもあって、内部発振器の精度でよければ、外付け回路無しで構成できます。

精度仕様

マイコン開発業務に携わった経験があればご存じかもしれませんが、低価格帯マイコンの出荷選別にコストは掛けれませんので、この数値は設計保証もしくは抜き取り検査だろうと思います。

インターネットなどでATtinyやその他マイコンの紹介記事を参照すると、内部RC発振を校正(最適なOSCCAL値のチェック)する記事をいろいろ拝見します。

当医院でもブレッドボードで最適なOSCCALを確認しているのですが、ちゃんと基板に起こしておこうという紹介になります。前振り長くてすんません。^^;

要件は、以下のような感じです。

  • ユニバーサル基板でサクッと作れる。
  • 電源は、使用環境での最適値を探索するため外部安定化電源から供給。
  • OSCCALの調整は、プッシュスイッチで。
  • OSCCALの値は、UARTからシリアルでターミナルソフトで確認。
  • オシロスコープでクロックサイクルの波形を目視する。
  • ターゲットマイコンは、ATtiny13aとATtiny85。ATtiny2313もそのうち。

当初、OSCCALの変更は、UART経由でキーボードで打ち込もうかと思っていたのですが、そもそも最適値でない場合、通信が文字化けして分からないことや、OSCCALの変更は、周波数の2%を超えるなということでプッシュスイッチの押下で±1づつを調整することにしました。

コンセプトとしては、ネット上でよく拝見する内容とほぼ同じとなります。

UARTでの通信とVCC電源ですが、Arduino Pro Mini用のシリアルI/F基板があり、ちょうど3.3V/5Vの2種の供給とUSB越しにUART通信ができるので、そのまま挿して接続できるようにしました。3.3V/5V以外は、外部から給電できりょうにVCC/GNDピンを設け切り替えスイッチで切り替えるようにしています。

さて、キャリブレーションについてですが、ATtiny85のようにクロックアウト機能を有している場合は、FUSEビットを書き換えるなりで外部ピンにシステムクロックを出力させOSCCALを増減させジッタなりを評価してやればいいのかもしれませんが、ATtiny13aのようにシステムクロックを直に評価できない場合の手段が必要になります。自分の場合は、インラインアセンブラにて、1CPUサイクルで実行できる命令にてポートにパルスを出力させるようにしました。

手っ取り早く、OUT命令が、1サイクルで実行されるので、適当なレジスタをスタッキングし退避させ、”HI” → “LOW” → “HI”とトグルさせてています。そのパルス信号をオシロスコープで周期を確認するといった具合にしています。

例えば、9.6MHz設定を8逓倍で回した場合、9.6MHz / 8 = 1.2MHz。

1.2MHzの周期は、1/1.2M = 833nsをカーソルなりで計測し目視します。

同時にTeraTermに表示されているOSCCALの値が、最適値になります。

ATtiny85用コード

ATtiny13a用コード

ATtiny13a用は、Software Serialが使用できないため、ATtiny13a用のライブラリを利用します。ライブラリの一部を更新しております。2022.3.3 追記

もし、キャリブレーション基板を自分も欲しいというひとがおられましたら、お問い合わせよりご連絡ください。相当数に達した場合、基板に起こそうと思います。