TextLCDと割込みに付いての質問

16 Oct 2011

フォーラムって質問とかしても良いのかどうか知りませんが、教えて下さい。 (質問とか駄目な場だったら無視して下さい...)

ちなみに、初心者レベルです。 mbed LPC1768を使ってます。

TextLCDを使うと、ピン変化割り込み関数内でDigitalInとDigitalOutが働かないのですが、 気のせいしょうか? 何か間違ってますでしょうか?

p17が0になると、割込みがかかり、 p9の入力と同じ値がp19に出力されると言う(あまり意味は無い)プログラムです。 TextLCD関係の部分を消すと割込みの中のDigitalOutがちゃんと実行されます。

#include "mbed.h"
#include "TextLCD.h"

TextLCD mylcd(p24, p26, p27, p28, p29, p30); 

volatile int n;
DigitalIn DATA(p9);
DigitalOut DATA2(p19);
InterruptIn CLOCK(p17);

void trigger() {
    if(DATA.read()==1)
        DATA2=1;
    else
        DATA2=0;

    n++;
}


int main() {
   while(1){
      mylcd.cls();
      CLOCK.fall(&trigger);

      while(1){
            if(n>10) break;
       }

       CLOCK.fall(NULL);
       mylcd.printf("end");

       n=0;
       wait(5);
  }
}

16 Oct 2011

I don't speak japanese, so I hope you understand English.

From google translate I can't get clear what you question is, but I think "end" shows to fast. This is because you have to debouce your switch. When you press a switch it produces a lot of shit before it stabilizes. Your interrupt triggers multiple times on this bouncing.

http://www.micahcarrick.com/files/atmega8/tutorial_3/debounce.png

You can build a debouce circuit like this:

http://hades.mech.northwestern.edu/images/6/61/Debounce_schematic.png

(Maybe you don't need the 7414.

私は日本語話さない、私はあなたが英語を理解願ってそう。

Googleは翻訳から私はあなたが質問かを明確得ることはできませんが、私は、簡単に"終わり"を示して思う。これは、スイッチをdebouceする必要があるためです。それが安定する前に、スイッチを押すと、それはたわごとの多くを生成します。あなたのinterruptinはこのバウンスで複数回トリガします。

このようなdebouce回路を構築することができます。

(たぶん、あなたは7414は必要ありません。

16 Oct 2011

Willem Melchingさんの言うとおりかも知れません :-)

このページで"チャタリング"というキーワードを探してみてください。詳しく書いてあります。

http://homepage3.nifty.com/~nagai/

(回路はスイッチを押すとOFF、放すとONになります。

それでもダメな場合は配線をもう一度調べてみてください :-)

ただ、LCDのプログラムを無くすと動くのは気になりますね、なんでだろう?

16 Oct 2011

http://mbed.org/users/4180_1/notebook/pushbuttons/ has several examples on how to debounce pushbuttons and use interrupts. There are software debounce functions in the cookbook already that do not require external hardware (not even resistor pullups are needed).

17 Oct 2011

I don't speak English. So I use translation machine.

To Willem Melching, yoshinari kou, jim hamblen
thankyou!
and I'm very sorry!
I found my mistake.

I had tried to take a digital calliper's output
DATA(p9) is digital calliper's data output , and CLOCK(p17) is digital calliper's clock.

First : Interruption starts with an digital calliper's clock.
Second : take a calliper's data output DATA(p9)
DATA2(p19) is for a check of operation.

Therefore not chattering.

Although I cannot say well,
DATA(p9) have 50 figures and 10 figures of the beginning is all "1" .
My program is "if(n>10) break;".

I looking with the oscilloscope ,DATA(p9) and DATA2(p19) .
"DATA(p9) changes, but DATA2(p19) not chenge. why!"
I assumed.

I hope you understand my English.



Willem Melchingさん, yoshinari kouさん, jim hamblenさん
本当に有り難うございます。
そして、本当にごめんなさい。
間違いを見つけました。

質問は詳しく書くべきでした...
何をしたかったかと言うと、デジタルノギスの、出力を取り出そうとしていて、
基本的なプログラムを作っていた途中でした。
DATA(p9)は、デジタルノギスからのデータで、CLOCK(p17)は、デジタルノギスのクロックです。
デジタルノギスからのクロックが入ると、割込みが入り、データを取得するというプログラムです。
DATA2(p19)は、動作確認用です。

なので、チャタリングではありませんでした。

なにが、間違っていたかと言いますと、
CLOCK(p17)が入ってから、DATA(p9)は50桁ほど送られて来ますが、
if(n>10) break;としていた為に最初の10個しか読んでませんでした。
しかも仕様で最初の10個はすべて"1"です。

オシロスコープで見ていたため、「DATA(p9)は変化があるのに、DATA2(p19)はずっと変化しない??」
と思い込んでました。

伝わったでしょうか。

17 Oct 2011

To yoshinari kou

すみません。 「TextLCD関係の部分を消すと割込みの中のDigitalOutがちゃんと実行されます。」
と書きましたが、勘違いでした。

I'm sorry
I wrote "When Comment out TextLCD , DigitalOut is Execution.",
but it is my mistake.

18 Oct 2011

デジタルノギスですか、面白そう:-)。 なるほど、解決できてよかったです。

信号の数が多く、高速な場合でオシロスコープで見にくいときは、 ロジックアナライザで複数信号同時に見ると見やすいですよ:-)。

19 Oct 2011

ロジックアナライザ便利そうですね。
でも、なかなか買う迄はいたらないです。
最近、思い切ってオシロスコープを購入してお金が無いのと、仕事じゃなくて、完全趣味でやってるので。

アドバイスありがとうございました。