出力結果が毎回安定しない。
極めてシンプルにI2Cモジュールを経由してLCD1602に文字を出力しようと試した所、出力結果が安定しない状況です。
どのようなことになっているかと言うと、リセットボタンを押して再実行するたび、
上手く表示されたり、
一部または全てが文字化けしたり、
前回出力が消えず続けて文字が出力されたり、
最初に空白が入って出力されたり、
全ての表示が消えたり、
カーソルが消えたり出たり、
と、同じコードを実行しているにもかかわらず、出力結果がバラバラで安定しないという状況です。
初期不良なのか、使用しているライブラリやコードが間違っているのか、どうにもわからず。
何かこうすればいいよ、というアドバイス等あれば、教えていただけるとありがたく思います。
該当のソースコード
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2);//0x27であることを確認済み void setup() { lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Hello, world!"); } void loop(){ }
補足
接続(GND,5V,SDA[A4],SCL[A5])には問題なし、
はんだ付けでのショートしてないかの目視と通電チェックは数回程度ながら確認済み。
「SDA[A4],SCL[A5])には問題なし」というのは、オシロスコープで波形を見て判断したのでしょうか?
GND,DA[A4],SCL[A5])の配線をしているコード(電線)の長さは、どのぐらいですか?
プログラムのコードが同じなのに動作が不安定になる原因は、(配線のほうの)コードの接続不良や外部からの電磁ノイズや、電源容量の不足といったハードウェア的な要因の可能性を疑ったほうが良いと思います。
コードの長さを確認してみた所、16cmと20cmと違っていたので、12cmのものを2本繋げた所、かなり安定するようになりました。コードの曲がり具合でまだ文字化けや表示抜け等も起こりますが、固定すれば実用できる範疇にはなると思います。ありがとうございました。
問題を共有した以上、「解決しました」じゃなくて「どうやって解決したのか」もちゃんと共有しましょう。ここは、技術に興味を持った人が集まる場で、回答した人はあなたの現象に技術的に興味を持ったから回答したのです。それで「オチ」を教えないとしたらひどいと思いませんか?
#症状からみてちゃんとプルアップしていなかったのだろうと想像しますけれど。
情報が共有されるからこそ、より正しい解決方法があるならそれを記載した方が良いのではと考え、不安定な部分の解消法がないかと調べていた所です。残念なことに一時固定すれば安定するかに思われましたが、再度不安定化しました。Backpackモジュール(PCF8574T)とLCD1602を接続している動画また画像を検索して参考にしてみたものの、線を4本繋げるだけで正常に可動しているように見えるため、やはり初期不良か内部回路のどこかが壊れてしまったのではと考えています。
> より正しい解決方法があるならそれを記載した方が良い
そうですね。私もそう思います。しかし、解決したかもという投稿があった時点で何をどうしたら改善した、という具体的な対応が読み取れなかったためコメントしました。
「より正しい」について言えば、teratailのシステムでは事後に訂正が可能ですから間違いを恐れる必要はないと思いますし、「これは原因ではなかった」というのも(あまりうれしくはないですが)一つの情報ですから「なかったコト」にするものでもないでしょう。
それはそれとして。
調べてみると、wireライブラリの中で一応マイコンの内蔵プルアップをOnにしているようです。それでも、外部で例えば10kΩぐらいでSCL/SDAを釣ってみる、というのは試せることの一つだと思います。
あとは、症状的にはどこかの電位がふらついている様子なので、プルアップでなければどこかのハンダ付け不良を疑いたくなるところです。あなたが作業したことろもですが、やけに安い中華な基板の場合には製品上も怪しかったり。
コードの曲がり具合でまだ文字化けや表示抜け等も起こりますというのは、接触不良やプルアップに問題がありそうな感じですね。GNDの接続が接触不良だと信号レベルが不安定になるので、信号線だけでなくGNDも要チェックです。
オシロスコープでSDA[A4],SCL[A5]の波形を見て、上がほぼ電源電圧までいっていればプルアップの問題はないだろうと思います。
後は、I2Cの通信速度を下げることで動作が安定になる可能性があります。
はんだ取り付け部を見直してみた所、今度こそ解決しました。
最初LEDを用いてはんだ取り付け部分が通電してるか確認して、通電していない所は再度付け直しをしていたので、ちゃんと繋がってると考えていたのですが、皆さんのアドバイスを聞いて、それだけでは不十分だと知り、よく見てみた所はんだ量が不均一なように見えたので、一度全部取り除いて再度均一になるよう、丁寧にはんだ付けを行った所、正常に可動することを確認。
自分の不足が原因で申し訳なく思うものの、助けていただいて皆様感謝です。
回答3件
あなたの回答
tips
プレビュー