今日も引き続きMEGA164PのDDSファンクションジェネレータ。
コードを弄り回して、割り込み処理(角速度の足しこみ、
波形テーブルからのデータ読み出し、ポートへの出力)
が約120クロックに収められることが判った。もちろん
2ch分出力してこの処理時間。シミュレータで色々な
ケースを流してみて、とりあえずバグは一応消えた
んじゃないかと思う。
これを元に考えると、1回の割込み周期は200クロック、
もしくは160クロックあたりが候補になってくる。
200クロックなら、20000Hz波形を出力するときに
1波形あたり5サンプル。160クロックなら6.25サンプル。
中途半端な割込み間隔にする手もあるかもしれない
けど、なんか気持ち悪いのでこのどっちかにしたい。
200クロックなら、割込み1周期あたりの4割は通常処理
(受信処理周り)で使えるので、処理能力的には
USARTにデータがラッシュしても19200bpsでは破綻する
ことはない目論見。
160クロックだと2割程度となり、一番処理負荷が掛かる
データパターン(具体的には”f”の文字を受信時に
角速度を求める処理)の時に超ギリギリになっちゃう。
USARTのダブルバッファ(2バイト分)を使い切る直前
といった感じ。その前後のデータパターンを眺めて、
大丈夫なら19200bpsで160クロックおきにしたいんだけど、
どうだろうなぁ…。エラーパターンまで含めてあとで
ちゃんと見直してみよう。
速度誤差の問題もあるんだよな…。試算してみると
200クロックの場合で130ppmくらい、160クロックの場合
240ppmくらい。水晶の3~5倍くらい精度が低くなるん
だけど、まぁ2ch出力を優先したいのでこのくらいは
目をつぶることに。小数部をあと1バイト増やせば
楽勝なんだけど、問題は処理時間だな…
でもやっぱ、SPIモジュールのI/Oと違って速いな。
初期化関係もほぼ直したので、残っているのは通常処理
の部分。USARTからの入力を受けて、内部の計算数値を
整える処理のところ。
2ch側は初期値としてcos波にすることにしたので、この
cos波を扱えるようにするのと、1ch、2chを切り替える
コマンドを増やしつつ、以前作ったやつとコマンドと
通信速度を上位互換にしておきたいので、そこらへん
も念頭にモロモロがんばってみよう。
ちょっとまえの記事だけど、がた老さんの
http://gataro-avr-ken.cocolog-nifty.com/blog/2012/06/p-10usb-3c26.html
この記事。色々スゴイ。P-10でちゃんとシリアル信号
取り出して使えるようになるまでが纏められてる。
あの時シリアル接続できるって知ったきり、おいらは
全然弄ることも無かったんだけど、物理的、論理的信号
が自由自在に扱えるようにってとこまではかなり手間を
かけられたのでは?と。
ケース加工もイイ。P-10はプローブが取り外しできない
タイプだから使うときちょっと不便なんだけど、こんな
風にコネクタ生やして取り付け/取り外し出来るように
なってたら便利。んで、その空いた部分にUSB/シリアル
変換回路が入っちゃってる!
aitendoのUSBシリアル変換回路って、こんな安いのが
出てたんだなぁ。オイラはArduino用で使うのがもっぱら
だから、ピン配置的にSparkfunのFTDI Breakoutばかり
なんだけど、用途によってはこれが小さくて安くて便利
かも。
おぉ、ザナルディー!金メダル!
http://headlines.yahoo.co.jp/hl?a=20120906-00000004-rcg-moto
![](/images/clear.gif)
![](/images/clear.gif)
![](/images/clear.gif)
|