2009年06月15日

AVR: ATROS/(PICROS)を試す(2):ソフトUARTを実装してみる

AVR: ATROS/(PICROS)を試す(2):ソフトUARTを実装してみる

ATROSのデモはいい感じで動きました。

次はATROSにtiny26/261/45 などUARTがないAVR用に「ソフトUART」を
組み込んでみます。

ソフトUARTはHEROさんのところの「AVRAPPNT.ZIP」のreadme.txtをみると
日本語化されていないけど英語版でサンプルソースがあることがわかる。
ソフトUARTサンプルは2種類あって

タイマを使うAVR304と使わないAVR305がある。

ATROSでタイマ0を使っているので、タイマを使わないAVR305の送信部分だけ
移植した。受信はちょっと難しそう。またそのうち。
送信だけでもデバッグには非常に有効だし内部データが確認できるのは
非常によい。

AVR305のソフトUARTは水晶発振子前提の書き方だけど
tiny2313の内蔵RCの8MHzで57600bpsまで送信できた。
57600bpsだと1バイト送るのに25usecしかかからないので
例えば10msec毎に起動するタスクで1バイトづつPCに転送すれば
十分使える。

10バイト20バイト単位でも0.5msecくらいで終わる感じなので余裕で
大丈夫な気がする。
と、思ったが実際やってみると約15文字の連続転送で2msec強かかっていた。

アプリケーションノートのAVR305のアセンブラはavrasm2.exe用なので
avr-as用に変更が必要だった。少し前にavrasm2.exeの勉強をしたことが
役にたった。実際にはC言語から呼び出す「アセンブラ関数」にした。
これは ELM chanさんのページが非常に参考になった。
http://elm-chan.org/docs/avrlib/asm_gcc.html

実際には意味不明のアセンブラエラーが出て結構つまずいた。
そのエラーが解決してからchanさんのページを良く読むと、
「; アセンブラスタイルコメント(cディレクティブの行には不可?)
」とあって同じような問題に遭遇したと思われる。

例えば以下の書き方をすると「エラーになるときとならない時」があるのだ、

#define FOOBAR 5     ;ここからコメント

「;」以降がコメントだけどセミコロンのコメントは使わない方が良いです。
自分の場合は以下のようにしてようやくアセンブル通りました。

#define FOOBAR 5     //;ここからコメント

コメントはCまたはC++のコメントを使うのがよいのです。

ついでに115.2kbps通信もやってみたけど内蔵RC発振8MHzでも問題なく通信できた。

やるなぁ〜 ソフトUART

ソフトUARTの代償として1バイトの通信期間中は全ての割り込みの禁止が
必要なこと。連続送信すると時間が直列にかかること。
例えば9600bpsだと1バイト送るのに1msecかかる。タスクの中で
10バイト以上連続送信すると10msec以上かかりタスクの時間管理が
破綻するし。割り込みの禁止期間も長くなる。

正直なところ全tinyシリーズでハードウエアUARTを付けといてほしかったぞATMEL君。

といいつつ、ソフトUARTで115.2kbpsまでOKなのでOKです。

tiny2313なのでtiny26でもOKか試そう。

ところで今気づいたがHEROさんところのATMELアップノート「avrsio.zip」
にシリアル通信関係はほとんと全部あるようだ。

それを見るとソフトUARTのサンプルは3〜4種類?くらいあるようだ。
それぞれ特徴があってどれがいいかはアレだけど今回は
タイマや割り込み資源を消費しないAVR305を採用したのだった。



posted by Copyright (C) avrin All Rights Reserved. at 21:13| Comment(0) | TrackBack(0) | PICROS | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。