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)を書く仕様です。
めでたい。
2013/5/31
開発ツールと書き込みピン
なんだ、だめだ。AVR Studio 6.0は .NET4.0が要るんだって。
PNPadをつかった方法をしらべてみます。8ピンマイコンのために重量ツールは美しくないです。
2013/5/29
AVRはじめ
先週書き込めるようになった
PIC12F683。しかしこれのPWMはモーター制御に不向きなことがわかりATTinyへ転換。
最終更新:2013年06月03日 09:18