0

AVR910+avrdude

今日も畑山さんとAVRライターいじってた。また撃沈された。

シリアルポートの無いPCの為に、色々とUSB-シリアル変換やらPCカード-シリアル変換やら試してみたけど、ELMライターが動かない。

ソースコード読んだらシリアルポートのアドレス直叩きしてて、もうなんかめんどくさくなったので次はAVR910+avrdudeを試してみるか。新しいの出たらファームもdudeも更新しないとならないので面倒臭そうだけど。

avrdudeはWindowsの人はWinAVRをインストールすると入るし、UNIX系でも動く。

3

AVR – MEGA8のヒューズビット切り替え、UART

atmega8も出荷時設定では内蔵1MHz動作なので、ヒューズビットを切り替えなければ9600bpsでシリアル通信する事はできない。

TINY2313のヒューズビット切り替えと同じノリで切り替えれた。

■切り替え方

データシートの144ページ

mega8-fuse.gif

と17ページ

mega8-cksel.gif

を見るとわかる通り、下位バイトのCKSEL3-0を書き換えると動作クロックが変わる。

ELMさんのライターで

>avrsp -rf

するとヒューズビットが読める

Detected device is ATmega8

Low: 11100001

High:11-11001

Cal: 185 184 181 183

なので

>avrsp -fl11100100

すると8MHzにできた。

MEGA8のTXDをADM3202に接続してシリアル通信できた。→ソースコード(avrgcc)

2

AVR – MEGA8でもLEDをピコピコさせてみた

AVR – TINY2313でLEDピコピコしてみた

MEGA8にもLEDを沢山刺して動かしてみた。ソースコード動画

DSC06013.JPG

VCC、GND等のピン配置は90S4433と同じなのですんなりいった。

が、内蔵クロックで動いている事に気づいていなかった。今見ると結構速い。何MHzなんだろう?

あと、なんとなく覚えたてのシフト演算を使ってみた。

MEGA8は内蔵ヒューズビット→UART→アナログ入力の順に攻略していく。その後はARMと、せっかくオシロが来たので通信系だな

0

AVR – TINY2313のヒューズビット切り替え、UART

TINY2313もMEGA8もシリアル通信ができないので、おかしいなーと思ってたら内部クロック1MHzがデフォルトで有効になっていた。

1MHzだと9600bpsで送信するのには足りないので、フューズビットを4MHz動作に書き換える必要がある。

ELMライターで

>avrsp -rf

とすると

Low: 01100010

High:11-11111

Ext: ——-1

Cal: 108

と出るが、TINY2313のデータシートの105ページを見ると

fuse_l.gif

下位バイトの7ビット目が「システムクロック8分周選択」なので、

>avrsp -fl11100010

と上書きしてやったら、4MHz動作に切り替わった。

これでUART(USART)で9600bps出すのに十分な速度が出るようになったので、TXDをADM3202に接続し

DSC06017.JPG

シリアル通信成功。ソースコード

DSC06018.JPG

(ちなみにこのRS232C-UART変換基盤はDNPに3個ぐらい転がっている)

1

AVR – sbi(port,bit) cbi(port,bit)

やっとビット演算関連がわかった。

記念にcbiとsbiをマクロ定義したので書いておく。

#define sbi(PORT,BIT) PORT|=_BV(BIT) // PORTの指定BITに1をセット

#define cbi(PORT,BIT) PORT&=~_BV(BIT) // PORTの指定BITをクリア

これでWinAVR20050214で消えてたsbiとcbiが使えるようになる。

sbi(PORTB, PB1); // PB1だけ点灯

cbi(PORTB, PB1); // PB1だけ消灯

アセンブラのsbiやcbiとは違うけど。