質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • Arduino

    537questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

arduino atmega2560 外部割込みについて

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 157

ueg

score 4

外部割込みの動作確認をしていますが、思った動作になりません。ハードの疑いもあるため、プログラム上に問題が無いか教えて下さい。

ハードはatmega2560で、外部割込み0(43ピンをプルアップ)にスイッチでGND接続。
割込みの入る度にシリアルモニタへ値を表示(プロッタ表示では半波波形になる)し、半波分終わると
endが表示というつもりにしています。
実際の動作では、割込みが掛からないでモニタ表示は何も出ません。
割込み設定のLOWをCHANGEにした時のみ、勝手に割込みが連続で掛かり、end表示は1文字ずつ間欠で出ていました。(勝手に割込み動作?)

include <math.h>

float omega=0,rad,tget;
void setup() {
Serial.begin(9600);
attachInterrupt(0,intsyori,LOW);
}

void loop() {
if(omega>180)
Serial.println("end");

void intsyori(){
omega++;
rad = (3.1415/180)*omega;
tget=sin(rad);
Serial.println(tget);
}

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

INT0は確かに43番Pinですね。
気になるのが

float omega=0,rad,tget;


volatile float omega=0,rad,tget;

y_waiwai殿が指摘されているようにチャタリングを軽減する事も必要です。
抵抗を50K程度でプルアップしてスイッチに並列に適当なコンデンサ(1uF)程度を入れてみる。
まずはお試しの程。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/07 21:59

    43pinの電圧を見ますと、プルアップ電圧が確かに印加されており、スイッチでLOWレベルに変化しましたので、ハードは間違いなさそうです。ただ、試しているうちLOW設定の時に勝手に割込みが掛かり続け、それ以外では全く割込みが入りません。試しにピンを44にし、int1にしてみましたが同様の動きでした。

    キャンセル

  • 2018/07/07 22:52

    sinsmartという安価なボードを使用しているのですが、一応互換品のようですので問題は無いと思っているのですが、電源ラインに大きなコンデンサを入れると勝手に割込みがかかるのは無くなりました。ハードに問題?と今のところ思ってきつつあります。

    キャンセル

  • 2018/07/07 23:01

    電源はなにをつないでます?しっかりしたものをつないでください

    キャンセル

  • 2018/07/08 08:48

    電源は市販のAC/DCアダプタで、容量は十分あります。(12V,1.8A)

    キャンセル

  • 2018/07/08 11:12

    サインスマートの基板上の三端子レギュレターに癖がありそうですね。また内蔵のプルアップを用いるのであればスイッチでダイレクトにGNDではなく1K程度の抵抗を直列に入れる事をお勧めします。

    キャンセル

  • 2018/07/10 22:26

    int0は内臓プルアップができるのでしょうか?できるのであれば、入力モードにする設定が必要に思いますがint0(PD0)は43をpin番号として良いのでしょうか?

    キャンセル

  • 2018/07/11 15:22

    内蔵のPULL UPはあります。しかしながら私が仕事で使うときには確実動作のため外部でPULL UPします。また視覚的にもPULL UPと分かるためです。またsetup()までの間、ピン状態が不定のあり事も含めて仕事では回路に配慮しています。またチャタリング防止のためにコンデンサーを並列にする場合、コンデンサへの最大流入電流も考慮するためです。内蔵の抵抗は抵抗値が厳密ではありませんし。

    キャンセル

  • 2018/07/11 21:07

    外部割込みに使うラインは、入力モードにする必要は無いのでしょうか。(やってもやらなくても同じ?)

    キャンセル

  • 2018/07/11 21:10

    なにもしない状態で入力モードなはず
    明示的に入力にしてもいいけど。
    動作からみて、なんか別のピンが割り込み入力になってるんじゃないかと思われるが。
    ArduinoIDEのCPU設定を確認してみよう

    キャンセル

  • 2018/07/11 21:17

    y_waiwai殿’なにもしない状態で入力モードなはず’。そうです、しかしデフォルトではハイインピーダンス状態です。(参照:https://www.arduino.cc/en/Tutorial/DigitalPins)

    キャンセル

  • 2018/07/11 22:00

    解決していませんが、最後まで質問に付き合って頂き、有難うございました。

    キャンセル

  • 2018/07/11 22:27

    貴殿だけではなく、いつもarduinoの質問で思うことを記します。arduinoに限らず何かを参考にして何かを実現する時、元々参考にしていた部分にしがみついてしまう。でもarduinoや他のCPUも所詮ハード。なのでいきなり難しい部分ではなく例えば今回もSWを使っての割り込み。初めからうまく動かなくても’何で?’と考えトライ。今回はホビーの面ではなくモノづくりとして実際の要素も含めて回答。まずはy-waiwai氏などの意見(恐らくオシロスコープやロジアナを使う環境)。でも解決するときっと今後に役立ちます。私のコメントでも’外付け抵抗’は実現場では視覚的にも’PULL UP’してるぞ。と分かる手法。また教科書通りではなく実現場では’デフォルトは入力のはず’と思っても瞬間的に何か出力も。でもこれらを経験すれば’ノウハウ’に。そして貴殿もきっと素敵な回答者に。

    キャンセル

+1

割り込み入力にスイッチを直接つなげると、チャタリングが発生するために割り込みが複数回発生します

これを避けるためには、スイッチと割り込み入力の間に、CRとシュミットゲートを噛ませてチャタリングを除去するようにする必要があります

スイッチのチャタリングとは


割込み設定のLOWをCHANGEにした時のみ、勝手に割込みが連続で掛かり

ってことですが、スイッチがちゃんと割り込み入力につながってませんね
ちゃんとテスターかなんかで割り込み入力ピンがスイッチとつながってるか確認してみる必要があります

そして、
Arduino 日本語リファレンス
をみると、ここはLOWではなく、FALLINGにする必要がありますねー

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/07 13:57

    今困っている症状は、スイッチを入れても全く反応しない状態で、”CHANGE”設定に変えると逆にスイッチを入れなくても勝手に割込みが連続して掛かります。

    キャンセル

  • 2018/07/07 14:02

    1番最初はFALLINGにしていましたが、CHANGE以外は反応無しでした。(割込みしない)
    スイッチ部は導通をチェック済みです。

    キャンセル

  • 2018/07/07 14:21

    割り込み入力間違ってる可能性が高いです。
    入力ピンを確認しましょう

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Arduino

    537questions

    Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。