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

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

ただいまの
回答率

90.84%

  • mbed

    18questions

    mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。

Nucleo-F446RE mbedでI2C LCD動作せず

解決済

回答 3

投稿

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

yukenai

score 4

AQM1602(I2C LCD)をNucleo-F446REで動作させようとmbedに以下のソースコードを作成。
ビルド後、書き込んでも、LCDが全然反応しません。
SCL,SDAの端子をモニタしたら、L => H => Lと一回だけ変化し、それ以降、変化しません。
なお、LCDはPICマイコンで正常に動作しています。
原因を教えてください。

ソースコード

include "mbed.h"

//I2C i2c(I2C_SDA, I2C_SCL); 
//I2CSlave slave(PB_9,PB_8);
I2C i2c(PB_9,PB_8); 
//Serial pc(USBTX, USBRX); // tx, rx
DigitalOut myled(LED1);
DigitalOut LED(PA_1);

const int addr = 0x73; // define the I2C Address
//const int addr = 0x3E; // define the I2C Address

int main() {

//   spi.format(8,3);
//   spi.frequency(100000);

char cmd[4];
cmd[0] = 0x00;//制御コード
//Init Start
wait_ms(200);
cmd[1] = 0x38;i2c.write(addr, cmd, 2); //8bitバス 2行表示 5*7フォント
wait_us(50);
cmd[1] = 0x39;i2c.write(addr, cmd, 2); //IS=1(拡張コマンドを許可)
wait_us(50);
cmd[1] = 0x14;i2c.write(addr, cmd, 2); //拡張コマンドで内部周波数設定
wait_us(50);
cmd[1] = 0x73;i2c.write(addr, cmd, 2); //拡張コマンドでコントラスト設定
wait_us(50);
cmd[1] = 0x56;i2c.write(addr, cmd, 2); //拡張コマンドで電源,コントラスト設定
wait_us(50);
cmd[1] = 0x6C;i2c.write(addr, cmd, 2); //拡張コマンドでフォロアをON
wait_ms(300);
cmd[1] = 0x38;i2c.write(addr, cmd, 2);//IS=0 (拡張コマンドの処理を終了)
wait_us(50);
cmd[1] = 0x01;i2c.write(addr, cmd, 2);//  Display clear 
wait_us(50);
cmd[1] = 0x0C;i2c.write(addr, cmd, 2);// Display on

// end Init
wait_ms(100);
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
cmd[1]=0x02;i2c.write(addr, cmd, 2); //カーソルHome
wait_us(50);
cmd[0]=0x40;cmd[1]=0x31;i2c.write(addr, cmd, 2); //"1"表示
while(1) { 
myled = 1;LED=0;
wait(1);
myled = 0;LED=1;
wait(1);

} // end while
} //end main

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • ozwk

    2018/04/22 09:23

    LCDモジュールのURLください

    キャンセル

  • ozwk

    2018/04/22 11:17

    L => H => Lと変化して、最終的にはHですか?

    キャンセル

回答 3

checkベストアンサー

0

Every second i2c.read fail on Nucleo F446RE

block write/read にバグがあるとのことです

リンク先によればmbed.lib をアップデートすればいいらしいですが、実機持ってないので試してません

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/22 23:08

    すいません。回答に気づかずにいました。mbed.lib をアップデートするとは、どのようなことをやればいいのでしょうか?具体的に教えてください。

    キャンセル

  • 2018/04/22 23:20 編集

    リンク先に書いてあります
    Right click on mbed.lib in you project and select ''update''.

    キャンセル

  • 2018/04/24 09:58

    承知しました。updateしてみます。

    キャンセル

0

NUCLEOシリーズのI2C通信は不安定なので、LCD初期設定時のwait時間をもう少し伸ばしてみてはいかがでしょうか。
NUCLEO-F302R8で秋月のAQM1602Aを試したところ、LCD初期設定はwait_us(50)からwait_us(500)に変更したら安定して使えています。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

-1

まずは、そのI2C-LCDを外しておいて、I2C出力に1バイト分以上のパルス出力が出るのを目標としましょう。

I2Cクラスの使い方が正しいのか、ソースがあるならそのクラスにバグがないかをチェックすることですねー

んで、I2Cクラスがダメ、というときには、SCL、SDAをポート出力としといて、自力でバタバタさせてI2Cを実装してみることですね


まさか、プルアップ抵抗付けてないってことはないでしょうな。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/04/21 22:12

    プルアップ抵抗はLCDのモジュールに実装されています。
    ソースは全部、質問に張り付けてアップしていますが、ほとんどは、参考サイトから、
    持ってきたもので、あんまり変更しておらず、基本はこれで動くものと思っていました。
     でも、原因不明で質問しました。
    Nucleo特有のなにかあるのか、知っていたら、教えて頂きたく、お願いします。

    キャンセル

  • 2018/04/21 23:33

    I2C通信ができないというのはどうしようもありません
    Nucreoを外して、プルアップ抵抗を繋いどいて最低1バイト分のパルスが出るのを確認しましょう
    I2Cでは1バイト送った後に相手方のACKを確認して次のバイトの転送に入ります。
    つまり、外しておいても1バイト分はパルスが出るということになります
    それができないと、繋いだところでもどーにもなりません

    キャンセル

  • 2018/04/22 00:19

    おっしゃっていることは理解しています。
    ネット等でmbedのI2Cのマスターの設定を調べると
    ① I2C xxx(PB_9,PB_8); // xxxは任意の名前、SDAとSCLのピン指定
    ② xxx.write(addr, cmd, 2) ;// マスター側の書き込みでスレーブのアドレスと2は2byte
    でこの部分を記述すれば、指定の端子から信号が出力されるとあります。
    ところが現在、出力されません。
    Nucleo-F446REでI2Cマスターとして、I2C信号を出力させるために抜けている
    記述はあるのでしょうか?
    そのことについて教えて頂きたいと思っています。

    キャンセル

  • 2018/04/22 07:36

    まず、あなたの使っているI2Cライブラリがどこで公開されているものか、また果たしてNucleo-F446REに対応しているものか、はこちらからは推し量ることは出来ません
    ですんで、ライブラリの使用法に関しては、こちらからはアドバイスできません
    そのライブラリは、そのCPUにおいて実績のあるものなのでしょうか。

    で、そのライブラリが使えない、という場合は、ソフトでI2Cを実装する、というテが使えます
    SCLを出力ポート、SDAをLowでは出力、Highでは入力ポートとして切り替え、自前でクロック、データを出力していくことです。
    おそらくAQM1602のデータシートに通信シーケンスが載ってると思いますんで、オシロを見ながらそのとおりに信号出力するように組んでいけばいいです

    キャンセル

  • 2018/04/22 19:02

    今回、参考にしているサイトのソースは各ボードごとにソースが分かれていて、私が使用しているソースはこのボードに限定されて、デバック完了されているソースがアップされていると認識しています。
    また、その他のmbedのI2Cのソースもほぼ同じ記述です。それで出力されないので問い合わせしています。
    mbedに詳しい方、教えていただけませんか?
     ソフトでI2Cを実装とありますが、そのようなことをしたくないなく、mbedで簡単にコントロールできるのでとおもい、mbedを選択しています。

    キャンセル

  • 2018/04/22 22:02

    ということなら、その作者に問い合わせる、というのが筋だと思われます

    こちらとしては、標準でもなく、どこで公開されてるのかもわからない、誰が作ったものかもわからないライブラリのサポートは出来ません

    キャンセル

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

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

関連した質問

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

  • mbed

    18questions

    mbed(エンベッド)は、Webサイト上でC++を使って開発を行う、ワンボードマイコンのプロトタイピングツールです。PCに開発環境をインストールする必要がなく、Webにアクセスできればどこにいても開発を行うことができます。