楽天市場
[無料でホームページを作成] [通報・削除依頼]

番外 続ATTINY13A OSCCAL の簡易校正

タイトルにOSCCALの校正と記載されていますが、OSCCALの校正方法ではありません。

ATTINY13Aのソフトシリアルインターフェースを用いて、
ソフトシリアルインターフェースに必要なディレイの最適値を求めるプログラムです。
内部発振周波数を校正しない(したくない)場合に使用します。
他のATTINYでも使用可能です。プログラムは超簡単です。

ATTINY13Aの内部発振周波数は電源電圧により変動するので、
校正時の電源電圧を実際に使用する電源電圧と同じにして校正を行う必要があります。


[手順] OSCCALの校正の場合と同様ですが通信条件のみ異なります。回路も一緒です。

?ATTINY13AのFuse Bit を設定する。 (SELFPRGEN,CKDIV8など)
?ATTINY13Aに校正プログラムを書き込む。
?Teratermを起動、9600bps,8bit,1Stopbit に設定。
?シリアル接続したATTINY13Aに通電。
?TeraTermの画面から、正常に表示される値の中央値を求める。





[TeraTermの設定]
img_20140530-160634.jpg



[実施例]
求めた定数をSCalibに代入し、bwait2ルーチンに反映させます。
ブートローダーのプログラムなどで、クロックが不正確でも通信のみ実施したい場合には、
OSCCALの校正が不要となるためコード短縮が可能となります。

.equ SCalib = 0x93

bwait:                      ; wait 1 bit
        rcall    bwait2
bwait2:                    ; wait 1/2bit
        ldi      rs,SCalib-1
        subi    rs,1
        brcc    PC-1
        dec     cn
        ret

また、精度は得られませんが、SCalibの値からATtinyの現状の発振周波数 xtal を推定することができます。
ソフトウエアシリアル(出力)が要する1ビット当たりのサイクル数は 6*SCalib+24となりますので、
ボーレートとの関係式 xtal/baud = 6*SCalib+24 が導かれ、

baud = 9600bps, SCalib = 0x93 の場合、
xtal = (6*147+24)*9600 = 8697600(Hz) となります。



具体的な実施例として、定数SCalibを用いて、Arduino用のブートローダープログラムに反映しました。
「番外 続Arduinoからタイニーブートローダーを使用する」のページを更新しましたので、
併せてご覧いただけると幸いです。





ソース一式のダウンロード先

Bequest333のページ(別館)

http://hp.vector.co.jp/authors/VA058115/

https://drive.google.com/file/d/1DKP3yILibp1u0jW2HOjT_gxArvwu8LHG/view?usp=drivesdk





































.