ニックネーム: 居酒屋ガレージ店主
★ZAQのBlogari停止のため、あれこれ「データ吸い出し」対策しています。 新規記事はとりあえず停止。 コメント書き込みはまだ有効です。 (JH3DBO 下間憲行)
2015年04月30日(木)
Arduino(ATmega328P)のINT0割り込み
AC100Vのゼロクロス検出で、「INT0入力、シュミット入力に
なっていない。」
なんて書きましたが、どうやらタイミング測定のために
つないでいたオシロスコープのプローブが悪さをしてい
ました。

INT0はPD2で4ピン。
ここになまった波形のパルスを加えます。

で、ソフト的には

(1)PB0(14pin)とPD4(6pin)を出力に

(2)PD2ポートを入力にしてエッジ割り込みを有功に
// INT0 ↑エッジ割り込み (PD2)
attachInterrupt(0, int0edge, RISING);

(3)INT0の処理
/***** INT0(PD2:4pin) 割り込み *****/
void int0edge(void)
{
  PB0_H;  // (!!!) 14pin (a)
  PD4_H;  // (!!!) 6pin (b)
  PD4_L;  // (!!!) 6pin
  PB0_L;  // (!!!) 14pin
}

(a)と(b)で異なるポートに割り込み受付チェックのための
パルスを出力するようにします。
このとき、タイミングや入力波形の確認のため、オシロスコープを
各ピンにつなぎます。

それが問題でした。
PB0とPD4からは細いパルスが出ます。
これが、INT0/PD2入力に回り込んでしまい、再トリガしていました。
INT0/PD2に近いPD4のパルスのほうが影響が大。
離れた場所のPB0は、ずいぶんましになります。

プローブ先端にクリップをつないで伸ばしているのも影響
ありです。
信号の回り込み(クロストーク)が原因です。
AVRマイコンのシュミット入力のヒステリシス、5V電源
だと0.5Vくらいです。
74HC14だと5Vで1Vほどあるのに比べて、ちょっとヒステリシス
幅が小さくなっています。


※波形  (クリックで拡大↓)


トリガ付近の拡大 (クリックで拡大↓)


上がINT0入力。  正弦波を入れてます。
下が割り込み確認のために出力したパルス。
これがINT0信号に回り込んで、次々と割り込みが発生
しています。
もうちょいとシュミットのヒステリシス幅が大きければ
避けられるんですが…。



2015年4月30日 11時58分 | 記事へ | コメント(0) | トラックバック(0) |
| ・電子回路工作 |
トラックバックURL:http://blog.zaq.ne.jp/igarage/trackback/4098/
※ブログ管理者が承認するまで表示されません
コメントを記入  
お名前(必須)
 
パスワード:
 
メール:
 
URL:
 
非公開:  クッキーに保存: 
※非公開にチェックを入れると、管理者のみにコメントが届きます。
ブログの画面には表示されません。
captcha


※画像に表示されている文字を入力してください(半角・大文字/小文字の区別なし)。
文字が読みづらい場合はこちらをクリックしてください。
小文字 太字 斜体 下線 取り消し線 左寄せ 中央揃え 右寄せ テキストカラー リンク