9 years, 7 months ago.

LPC1768での実行

LPC1768で実行させる場合、プログラムの変更必要でしょうか。

NJL5501Rを使用、増幅後出力波形は確認しています。 アンプの出力をp20に入れています。 LED1が全く点灯しません。

mainルーチン先頭にLED2点灯させようとしても動作しません。 mainルーチンが動いていないように思います。

int main() { uint32_t num; int32_t wave; uint32_t rate; led2=1; pr.start_sampling(); /* start procedure */ ・・・・

よろしくお願いします。

Question relating to:

トランジスタ技術2014年10月号第6章のソフトウェア

2 Answers

9 years, 7 months ago.

Tanakaさん
試して頂いてありがとうございます。

OKANOさん
ご回答ありがとうございます。

mainの先頭が動いていないとなると、
OKANOさんが仰るように、まずはターゲットの指定およびmain関数以前の処理をご確認下さい。

問題無い場合、今のところ他に思いつきませんが、念のためImport時に、
「Update all libraries to the latest revision」
にチェックを入れて、Libraryを最新にして試して頂けますでしょうか? /media/uploads/t_tatsuoka/importprogram.png

また、移植については、回路図(*)を見た限りでは、
少なくともLEDのON/OFFの値を書き換える必要があります。

具体的には、PulseRate.h L12,13 を下記のように、0と1を逆にします。

#define LED_ON  (1)
#define LED_OFF (0)

よろしくお願いします。

(*)LPC1768のLEDは正論理ですが、トラ技ARMライタは負論理になっています。

LPC1768は、ここから辿って、
https://mbed.org/users/okini3939/notebook/mbed_NXP_LPC1768_jp/
下記回路図p3にLEDがあります。
https://mbed.org/media/uploads/chris/mbed-005.1.pdf

トラ技ARMライタTG-LPC11U35-501の回路図はこちらです。
http://toragi.cqpub.co.jp/Portals/0/support/2014/mbed/TG-LPC11U35-501.pdf

Accepted Answer

OKANOさん Tatsuokaさん 回答ありがとうございます。

アドバイスいただいたことを確認した結果です。

[1]ターゲットは「mbed LPC1768」です。

[2]PulseRateのインスタンスと関連個所をコメントアウトしましたが、main関数が動いていません。   USBSerialのインスタンス部と関連個所をコメントアウトすると、main関数の動作が確認できました。   代わりに以下のように変更して、シリアルデータ出力されることを確認できました。

  Serial serial(USBTX,USBRX);     USBSerial serial;

[3]Import時にLibraryを最新にしましたが、やはりmain関数が動きませんでした。   Library更新前でも[2]のUSBSerialを変更すると動作しました。

以上から、USBSerialの部分に問題があったようです。 LPC1768で、USBserial serial を使うときは、p31 (D+), p32 (D-) and GNDを使わないといけないようですが、 今回はプログラム書き込み用のUSBコネクタを使いました。 それが原因だったのでしょうか?

LEDの論理はそのまま使っていますので、通常が点灯で、脈波検知すると消える動作で使えています。 おおよそ70~80の脈拍が測定できています。(LCDに表示させています。)

NJL5501Rを使おうとしていましたが、なかなかうまく信号が取れずに困っていたので非常に助かりました。 アンプにNJU7043を使った以外は全く同じ回路です。 ありがとうございます。

posted by Hideki Tanaka 21 Sep 2014
9 years, 7 months ago.

現在,手元に同じ環境が無いので,何とも言えないのですがmain関数も動いてないというのは妙に思います.
ご確認いただきたい点を幾つか..

[1]
コンパイルページ右上のボタンで選択可能な「ターゲット選択」は問題ないでしょうか?
(下の図は「TG-LPC11U35-501」が選択された状態です.ここが「mbed LPC1768」になっていれば問題ありません)
target_selection

[2]
上記で問題がなければ,main関数が呼ばれる前に止まってしまっている可能性があります.
ライブラリのインスタンスを作成している部分をコメントアウトしてみて(それとそこれ作成したインスタンスprを使う部分もコメントアウトしてみて),main関数とLEDのみで問題が無いかを確認することによって,問題の切り分けが出来るかもしれません.

ライブラリのインスタンスを作成部分をコメントアウトしたコード

//PulseRate pr(p20, LED1, p26); /* AD, LED, Beep */

OKANOさん 回答ありがとうございます。

確認した結果をTatsuokaさんの回答へ返答しました。 PulseRateの部分をコメントアウトしても動作しませんでしたが、 USBSerial部分をコメントアウトして動作するようになりました。

問題の切り分けができてよかったです。ありがとうございます。

posted by Hideki Tanaka 21 Sep 2014

動くようになって良かったです.

なるほど. TG-LPC11U35-501ではUSBコネクタはLPC11U35のUSBペリフェラル端子に繋がっており,それをシリアルとして使うためにUSBSerialクラスを使います.

mbed LPC1768ではバイナリ書き込み用のUSBは直接LPC1768には繋がっていません.このUSB端子は基板裏側の「インターフェースチップ」を介して,LPC1768のシリアル端子に接続されています. このインターフェースチップがUSB↔シリアル変換を行うのでLPC1768内部のUSB機能を使う必要がありません.

このようなわけでTG-LPC11U35-501ではUSBSerialクラスを,mbed LPC1768ではシリアルポートを使うためのSerialクラスを使うことになります.

LPC1768でUSBSerialクラスを使うと,USBペリフェラルはp31(D+)とp32(D-)だけに繋がっているため未接続で放置されると動作しないままになってしまうのでしょう.

もし同コードを両基板で使う場合には以下の様に宣言しておくと便利かも知れません.

#ifdef TARGET_LPC11U35_501
USBSerial serial;
#elif TARGET_MBED_LPC1768
Serial serial( USBTX, USBRX );     
#endif



LPC11U35_501_pins
TG-LPC11U35-501ではp31(D+)とp32(D-)がUSBコネクタと接続されている

/media/uploads/okano/mbed-lpc1768-serial_and-usb
インターフェースチップ(図中ではmbedチップ)を介してUSBコネクタに接続.LPC1768のシリアル端子がインターフェースチップに繋がっており,同チップのUSB端子はこれとは別にp31(D+)とp32(D-)に出ている (参考:http://marutsumake.blog74.fc2.com/blog-entry-704.html).

posted by Tedd OKANO 21 Sep 2014