タグ付けされた質問 「interrupt」

3
入力が変更されたときに関数を自動的に呼び出すことはできますか?
現在、私のスケッチでは、メインループを回るたびに入力ピンをチェックしています。変更を検出すると、カスタム関数を呼び出してそれに応答します。コードは次のとおりです(要点に合わせてトリミングされています)。 int pinValue = LOW; void pinChanged() { //... } void setup() { pinMode(2, INPUT); } void loop() { // Read current input int newValue = digitalRead(2); // Has the input changed? if (newValue != pinValue) { pinValue = newValue; pinChanged(); } } 残念ながら、これは入力の非常に短い変更(短いパルスなど)、特にloop()少しゆっくり実行している場合は常に適切に機能するとは限りません。 Arduinoに入力の変更を検出させ、関数を自動的に呼び出す方法はありますか?
21 pins  interrupt  isr 

2
Unoはいくつの割り込みピンを処理できますか?
Arduino Uno R3で7チャンネルRCレシーバーを使用することを検討しています。ドキュメントには、最大2本の割り込みピンが記載されていますが、他の特定のブログでは、PinChangeIntライブラリで最大20本のピンを割り込みとして使用することが記載されています。それでは、Arduinoはネイティブにいくつの割り込みを処理できますか?これは、PinChangeIntなどのソフトウェアサポートで処理できる数とは異なりますか?

2
ロータリエンコーダを使用してArduinoをどれだけ正確に取得できますか?
多くの場合、ステッピングモーターは大型モーターには高価です。ただし、強力な標準DCモーターとロータリーエンコーダーを使用すると、ステッピングモーターを「シミュレート」できます。Arduinoを備えたロータリーエンコーダーは、基本的なループを使用しており、他のコードはそれほど多くありません 「パルスを逃し」、十分な回転を頻繁に記録しませんか?これをもっと多くのコードでどのように処理できますか?これを行うためのより良い方法はありますか?割り込みは役立ちますか?この問題に役立つ何らかの回路はありますか? 注:おそらく、1秒間に4回転を超えることはありません... (多くの場合もありますが、1インチあたり10回転の直線運動がある場合に1分間に24インチだけになる親ねじタイプのメカニズムを実行している場合。 )

3
割り込みルーチン内でmillis()およびmicros()を使用する
のドキュメントattachInterrupt(): ... millis()カウントは割り込みに依存しているため、ISR内でインクリメントすることはありません。機能するためdelay()に割り込みが必要なので、ISR内で呼び出された場合は機能しません。micros()最初は動作しますが、1〜2ミリ秒後に不規則に動作し始めます。... どのようにmicros()違いますかmillis()(その精度の点を除きます)?上記の警告はmicros()、割り込みルーチン内での使用は常に悪い考えであることを意味していますか? コンテキスト- 低パルス占有率を測定したいので、入力信号が変化したときにルーチンをトリガーし、現在の時刻を記録する必要があります。

2
Arduinoの関数ポインター割り当てはアトミックですか?
次のスニペットは、TimerOneライブラリのソースコードからの抜粋です。 // TimerOne.h: void (*isrCallback)(); // TimerOne.cpp: ISR(TIMER1_OVF_vect) // interrupt service routine that wraps a user defined function supplied by attachInterrupt { Timer1.isrCallback(); } // TimerOne.cpp: void TimerOne::attachInterrupt(void (*isr)(), long microseconds) { if(microseconds > 0) setPeriod(microseconds); isrCallback = isr; // register the user's callback with the real ISR TIMSK1 = …

1
Arduino Unoおよび同様のボードで割り込みはどのように機能しますか?
ATmega328Pプロセッサを使用するArduino Unoおよび関連するボードでの割り込みの仕組みを説明してください。次のようなボード: うの ミニ ナノ プロミニ リリーパッド 特に議論してください: 割り込みを使用する目的 割り込みサービスルーチン(ISR)の作成方法 タイミングの問題 重要なセクション データへのアトミックアクセス 注:これは参考質問です。

1
割り込みによるパルスのカウント
12,500 Hzの方形波からのパルスをカウントして出力をトリガーしようとしています。ここに私がこれまでに持っているコードがあります。Arduinoがリセットされると、25 msのサンプルで315がシリアルに出力されます。315 x 40 =12600。これは完璧に機能しているように思えます。 私の唯一の問題は、ボードのリセット時に一度だけこの番号を返すことです。同じコードをに移動するとvoid loop、連続してカウントされ、一定しない戻り値が返されます。 ループセクションに何を入れる必要があるのか​​理解していないので、一定期間を超えて取得している入力ピンのトグルの数を繰り返し正確にカウントできるため、12,500の存在に基づいて出力に何かを行うことができますHz信号かどうか。 volatile int IRQcount; int pin = 2; int pin_irq = 0; //IRQ that matches to pin 2 void setup() { // Put your setup code here, to run once: Serial.begin (9600); attachInterrupt(pin_irq, IRQcounter, RISING); delay(25); detachInterrupt(pin); Serial.print(F("Counted = ")); Serial.println(IRQcount); } …
10 interrupt 

1
変数が1を超えるISRからアクセスされ、ISRの外部で共有されない場合、揮発性は必要ですか?
だ明確に文書化グローバルデータは、ISRとメインプログラムと共有されている場合、データのニーズが宣言されることをvolatile保証メモリの可視性にするために(それが唯一の1バイトのデータで十分、何も大きなニーズも保証アトミックに特別な手配を) 。ここに良いルールがあります: ISRの外部でのみ使用される変数は、揮発性であってはなりません。 ISR内でのみ使用される変数は、揮発性であってはなりません。 ISRの内部と外部の両方で使用される変数は、揮発性でなければなりません。 しかしvolatile、変数が1を超えるISRからアクセスされ、ISRの外部で共有されない場合に必要ですか?たとえば、static変数を使用して内部状態を維持する関数があります。 void func() { static volatile long counter; // volatile or not? // Do stuff with counter etc. } この関数は、ピン割り込みから、およびTimerOneライブラリからの2つの方法で呼び出されます。 attachInterrupt(0, func, CHANGE); Timer1.attachInterrupt(func); ISRに入ると、割り込みは自動的に無効になるため、アトミック性の問題はありませんが、これvolatileはコンパイラーの質問です。何がキャッシュされ、何がキャッシュされないかです。 もちろん、申し訳ありませんが安全です。
9 interrupt  timers  isr 

2
タイマーを使用してISRの変数を更新する方法
Timer3の周波数をカウンターで確認しようとしています。揮発性として宣言されたカウンターの値はISRでインクリメントされ、毎秒合計がメインループに表示され、値はゼロにリセットされます。 タイマーは正しく設定されています。(3Hzタイマーを選択すると、LEDが点滅します) 問題 カウンターはインクリメントされません。出力は次のとおりです。 Setup Completed tick: 1 tick: 0 tick: 0 tick: 0 コード volatile int cont = 0; void setup() { Serial.begin(9600); pinMode(13, OUTPUT); // Initialize Timer cli(); // disable global interrupts TCCR3A = 0; // set entire TCCR3A register to 0 TCCR3B = 0; // same for …

3
複数の独立したLEDパターン
私は問題を抱えていますが、最初は(そしてArduinoを初めて使うのは)と思いましたが、Arduinoに最適なアプリケーションでした。しかし、それを実装しようとして失敗した後、私は自分自身を疑っています! 単に-私は多くのLEDを個別に制御する必要があります。それらの多くは独自のパターンを持っています-たとえば、「5秒オン-5秒オフ」。「連続点滅」-または「2回点滅、一時停止、1回点滅」などのシーケンス。明らかにスレッドの贅沢がなければ、私は少し行き詰まっています。a)Arduinoが最良の選択であり、b)もしそうである場合、どうすればこれに対処できますか? 前もって感謝します :)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.