アットウィキロゴ

ATTiny13

2013/6/2

今日のAVR



AVRはC言語がつかえるのはいいけれど、簡単なトーン発振器を組んだらもうプログラムエリアの00E0まできてしまった。
アセンブリで組んでもかわらないかもしれない。
1kBではDCC動力デコーダは無理ぽい。ATTiny45ならだいじょうぶかな..

PWMはじめ


8ビットタイマーのカウント幅は変えられない模様。しかし9.6MHzの256分周で、37.5kHzというちょうどいい周波数、GJ。

PB0, PB1 をOutに設定すると、PICerFTで読み書きできなくなるトラブル。RESETをGNDにつないで常Loにしたら解決。

OutputCapture はA, B共にうごかすと、OCR値を0にしていても細かいヒゲがでてしまうので、Off側は通常出力にしてHighをだすように工夫。

参考コード
DDRB = 0x03;
PORTB = 0x03;
TCCR0A = 0xC3
TCCR0B = 0x01;
と初期設定し
OCR0A = value;
で任意のPW出力が出てくれるはずです。

Cで割り込みはどうやる


分かる前は暗中模索だったPWMは、いくつかの設定ですんなり高速でうごいてくれています。
NゲージE233系京浜東北を前進後退させてあそんでみましたが、やはり低周波成分が無いと低速が動いてくれません。
なので、高速1次PWMの周期をサンプリング周波数として「2次PWM」波形を出したく、PWMタイマーで割り込みを検討。

よさそうなサンプルサイトさん








2013/6/1

WinAVRはじめ 付属のProgrammers NotepadにはAVR Makeコマンドが仕込み済み!


WinAVRは2010年で開発が停まっているらしいですが、1発起動の軽さのありがたみ。要.NETなVisualStudioなんて唯一の我がマシンEeePC901には重すぎるでしょう。しかし、C#用の SharpDevelop3 はわりと軽くうごいてくれてます。

さて、簡単なLEDフラッシュを、と思い、ウエイトルーチンをwhile( -- ctr ); でやってみましたが、コンパイル(アセンブルか)して.lstファイルをのぞいてみたら、0000 0895 ret とノーオペレーションを rcallされていますた。
コンパイルオプションの設定が必要なようです。


変数に volatile 簡単なサブルーチンに inline をつけて一件落着。最適化オプションをはずすといやになるくらいコードが冗長いたしますね。。

さて、これから ATTiny13を PICerFTで書き込むピン接続をしらべます。PICerFT 2013/6/1 22:34

PICerFT→ATTiny ピン接続


UM-232 ICSP ATTiny
RI# 6 RST 1 PB5 1
CB4 11 CLK 2
GND 3 GND 4
VCC 4 VCC 8
RTS# 3 SCK 5 PB2 7
RXD(TXD) 5(1) MISO 6 PB1 6
CtS# 10 MOSI 7 PB0 5


さて、配線も済み。初期のTiny13のクロックは何MHzなのだろう..

うんとも動かない。


PB3 2番PinをLEDにつないでみたが.. うんとも。

##include <avr/io.h>
#define
F_CPU 8000000

inline void Wait( volatile uint16_t span );

int main()
{
DDRB = 0x08;
while( 1 )
{
	PORTB ^= 0x08;
	Wait( 500 );
}
return 0;
}

inline void Wait( volatile uint16_t span )
{
volatile uint16_t a;
while( -- span )
{
	a = 8000;
	while( -- a );
}
}


あ、RESET端子がLowのまんまじゃないですか、、当たり前.. ライタ(シリアル)からRSTを抜いたら..LEDが光りだしました。
しかし間隔がおそい..
main.lss, main.lstファイルを覗いてみると、なにか意味不明なコード。ループはどこかな..


上手くいった!


CLKPR = 0x80;
CLKPR = 0x00;

「クロックのプリスケーラ」がヒューズ設定(CKDIV8)が有効(0値)で、8分の1になっていたため、動作が8倍おそくなっていたという話でした。
ヒューズ設定は面倒そうなのでここはソフトでCLKPRを0にしてフルスピードに。どうやら9.6MHzでうごいてくれているようです。
CLKPRは「設定しますよ」の合図として0x80を書いてから0~8(1~256分の1)を書く仕様です。

めでたい。

ATtiny13 ATtiny25 ATtiny45 ATtiny85 Feature Comparison 2013/6/2 8:34
「ATTiny45」というのもあったらしいです。こっちが本命かなぁ..




2013/5/31

開発ツールと書き込みピン


なんだ、だめだ。AVR Studio 6.0は .NET4.0が要るんだって。
PNPadをつかった方法をしらべてみます。8ピンマイコンのために重量ツールは美しくないです。






2013/5/29

AVRはじめ


先週書き込めるようになったPIC12F683。しかしこれのPWMはモーター制御に不向きなことがわかりATTinyへ転換。

最終更新:2013年06月03日 09:18