結果2:表示が一部抜ける。
結果3:表示が一部抜ける。
結果4:すべて思うように表示される。
以上は結果の動画である。
以下、いろいろ説明。
秋月電子で買ったLCD(AE-AQM1602A(KIT))で工作をしていた。tinyRTC(時計)と、DHT20(温湿度計)とマイクロSDとLCDとArduinoをつなげ、最終的には、arduinoからそのマイコンであるATmega328P-Uを取り出しほかの部品とつなぎ、温湿度を記録する機能付きの時計を作成しようと思っていた。いろいろうまくいかないことが多々あったが、ここでは、LCDについて。
まずはブレッドボード上でいろいろ試す。いろいろな不具合を乗り越え、回路も決まり、スケッチ(プログラム)も決まり何とか、具体的な形にまでもっていった。でも、やはり、具体的にハードウェアを組んでからもスケッチの見直しをしたくなるものだ。また、気付かなかった小さな改善点も見えてくる。
そこで、スケッチを少し変更し、そのスケッチを別のATmega328P-Uのマイコンに書き、マイコンを交換してみた。すると、表示がうまくいかない。なぜかわからず、ここで、沼に陥る。そしてついには、できたハードウェアを使って、イチから表示の部分についてテストしてみることにした。
普通、ネット上の「やってみた」の記録では、ブレッドボード上で、最低限の配線で試してみた結果が多い。ここでは、すでに、時計や温湿度計やマイクロSDなどの回路が既に組まれた状態での実験なので、その部分が大きく違う。ただ、かなり苦しんだ結果なので、同じように苦しむ人もいるかと思い、ここに記録する。
配線は既に済んでいる。実験したスケッチは以下の通り。インデントが変になっているけど。loop部分で、LCDcrDsp1とLCDcrDsp2を変えて実験。また、delaytimeを0と1で実験。
// I2C LCD test
#include <I2CLCD.h>
#define LCD_ADRS 0x3E //Slave address of LCD(Arduino ver.)
/* arduino のピン
18,19:SCL,SDAとしてLCDとの通信に利用
*/
byte delayTime=1;
void setup() {
I2CLCD.begin(32);
delay(delayTime);
}
void loop() {
LCDcls();
delay(500);
LCDcrDsp1(0,0,"0123456789abcdef");
LCDcrDsp1(0,1,"0123456789abcdef");
delay(3000);
}
void LCDcls(){ //LCD Clear Screen
LCDcl1row();
LCDcl2row();
}
void LCDcl1row(){ //LCD 1行目クリア
I2CLCD.setCursor(0,0);
delay(delayTime);
I2CLCD.print(" ");
delay(delayTime);
}
void LCDcl2row(){ //LCD 2行目クリア
I2CLCD.setCursor(0,1);
delay(delayTime);
I2CLCD.print(" ");
delay(delayTime);
}
void LCDcrDsp1(byte clm,byte row,String st){
I2CLCD.setCursor(clm,row);
delay(delayTime);
I2CLCD.print(st);
delay(delayTime);
}
void LCDcrDsp2(byte clm,byte row,String st){
I2CLCD.setCursor(clm,row);
delay(delayTime);
for (int i=1;i<=st.length();i++){
I2CLCD.print(st[i-1]);
delay(delayTime);
}
delay(delayTime);
}
さらに気になること。不思議なことに、delayを全く入れなくても、元のスケッチのままできちんと表示されるATmega328P-Uのマイコンがある。ブレッドボードでいろいろ試す場合、arduinoと回路はつながったまま、いろいろスケッチを試すことになる。つまり、同じマイコンを使い続け、いろいろ試すことになる。ハードウェアを組んでしまってからは、実験するためにはいちいちマイコンチップを外さないといけない。そこで、手元にあるもう一つのマイコンチップに新たなスケッチを書き、そのマイコンチップをハードウェアにさしてみる。同じスケッチを書いたにもかかわらず、以前から使っていたマイコンチップではしっかりと表示され、新たにスケッチを書いたマイコンチップでは表示がおかしくなったのである。スケッチが何か変になったのかもと思い、ものすごく時間を費やして検討したがわからなかった。また、ハードウェアに問題があるかもと思いいろいろ検討もしてみた。とても苦戦した。そこで今回の実験を最終的にしてみたのである。
もし、ブレッドボード上で単純にLCDの表示の回路実験をした場合、マイコンチップごとで差が出なかったかもしれない。あるいは差が出たのかもしれない。LCDが一つしかなく、またそれは既にハードウェアとして組んでしまっているので、それはわからない。
今回、表示がおかしくなったのは、2つのことが考えられる。
1.マイコンチップごとの差。
2.組んだ回路によってLCDがうける影響の差。
たとえ、マイコンチップごとに差があったとしても、回路による影響がない場合、その差は許容される程度のものなのかもしれない。
そういうことはわからないが、ただ、今回のケースでは、表示の時にうまくdelayを入れることで、何とか実用になるようにできた、という報告である。
0コメント