ここから本文です

arduinoのloop()の周波数 loop()が回る周波数が知りたいです。 具体的には外部...

tnk********さん

2016/3/3018:36:35

arduinoのloop()の周波数

loop()が回る周波数が知りたいです。
具体的には外部からsin波などの数値をリアルタイムで入力した時の分解能の限界を教えてほしいです。

閲覧数:
3,303
回答数:
2

違反報告

ベストアンサーに選ばれた回答

2016/3/3023:15:07

その前に。
ハードの限界を引き出そうと思うなら、arduino言語は全く適当でない、というのはいい?
「簡単に使えます」のために、arduino言語はいろいろと「無駄」をしているから。マイコンの性能をカリカリに使いたいのなら出来るだけ自分でやるようにしないと。
http://ameblo.jp/aretaumitohirunosunahama/entry-12014713486.html
あたりを見ると、
----
これはArduinoの標準関数
analogRead()
の実行に約100usかかる
----
のを、Arduinoおまかせにしないことで
----
実測の結果、
19.048usごとに
A/D変換が実行されました。
----
なんて話もある。これはArduinoとしてではあるけれど。さらに本気でやるのならAVR-studioだっけ、Arduinoから離れてAVRを自分で全部面倒みてやる、とかの必要もあるかも。

実際には、周期が重要なパラメータならばプログラムの実行時間に頼って周期を作るのは決してよい方法ではなくて、タイマーなどを叩いてしっかり「時間」を作りこんでやるのが普通。「数値をリアルタイムで入力」というのがADコンバータなのかそれともそれ以外の「数値」を入力する経路なのかもわからないけれど、例えばADコンバータなら変換に必要な時間(有効桁数によってちがったりするけれど)はカタログデータから求まるので、それに対して適切な余裕を持たせた周期タイマーでAD変換のトリガをかける、などの手法を取る。「数値」のソースが違ったとしてもまぁ大筋は同じ考え方になると思う。



それでもやっぱり"loop()が回る周波数を知りたい"のなら...
一番簡単には、オシロスコープを調達して、I/Oのどれかを毎周期トグル(OFF<->ON切換)して、その周期を測定すればいい。もちろんのこと、loop()の中身によって実行周期は変わるから、中身はそれなりに作りこんでやらないと測定にならない。

あるいは、loopを数万回繰り返す周期でLEDをトグルしてやれば、その数万分の1がloop()の周期ってことになる。
何もしないでループを回してみると、

void setup() {
pinMode(13,OUTPUT);
}

long n=0;
int s=1;
void loop() {
if(n++>1000000){
s=s^1;
n=0;
digitalWrite(13,s);
}
}
で大体2秒周期ぐらい(相当いいかげんだけど)だから、一周2μS、500KHzぐらいで回っていることになる。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

fried_turnipさん

2016/3/3018:49:09

周波数は決まっていません。
loop内の処理が終わると即座に始めから繰り返します。
処理が少なければ速く回るし、処理が多ければ遅くなります。
割り込み処理等が有ればそれによっても遅くなります。

従って、質問者さんのシステムについては質問者さんが
ご自身で計測するしか loopが回る速さを知る方法はありません。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる