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/
※ブログ管理者が承認するまで表示されません