SPI接続のLCD、UC1701です。
VDD(pin7)にレギュレータを追加できる仕様になっています。
バックライト(pin5)とRST(pin11)もレギュレータから給電できるようにして、結線をシンプルにしてみます。
レギュレータはヒートシンクと真ん中のピンがOUT側:3.3Vのピン配列になっているものが必要です。
レギュレータと入出力のコンデンサを追加。
バックライトとRSTのピンを抜いて、ポリウレタン銅線でレギュレータのOUT側と接続。
ピンを支える樹脂の部分は、ポリウレタン銅線が通るところだけ、少し削っています。
動作テストを兼ねて、コントラストの調整をしてみます。
LCDを使用するとき、スケッチにコントラストの値を指定できるので、最適な値を探ってみます。
タクトスイッチを2つ使って、片方が押されたらコントラストを上昇、もう片方が押されたらコントラストを下降させます。
レギュレータを追加したので、VDDは5Vから供給し、3.3Vで動作します。
タクトスイッチは、pinModeをINPUT_PULLUPにして、328p内部の抵抗を使用しています。
u8glibのサンプルスケッチを流用して、右側にコントラストの値を表示しています。
コントラストの値が小さいと、背景は目立たなくなりますが、表示も薄くなってしまいます。
下の画像はコントラストの値が111の時ですが、100以下ではほとんど何も見えなくなります。
背景が濃くならず、表示が分かりやすい濃さになるのは、この辺りでした。
タクトスイッチはチャタリングの影響があるで、何も対策しないと1回押しても2回分値が変わってしまいます。
そこで、処理が3回ループする間、押されていたら1回押したと見なして、コントラストを1段上げ下げするようにしたところ、操作と値の変化の間に違和感がなくなりました。
また、28ループ以上、押し続けた場合は、長押ししたと判断して、連続してコントラストを変化させるようにしています。
チャタリングの防止は、押している時間をカウントするとか、他にいろいろやり方があるようです。
INPUT_PULLUPを使用しているので、押している間はLOWで、押されていなければHIGHになります。
コントラストの初期値を178にして100から255まで変化できるようにしています。
#include <u8glib> // LCD const int SW_up = 6; const int SW_down = 7; int contrast = 178; int count_SW_up = 0; int count_SW_down = 0; U8GLIB_MINI12864 u8g(10, 9); // HW SPI (CS, RS) void draw(void) { u8g.setFont(u8g_font_gdr25r); u8g.drawStr( 0, 30, "U"); u8g.drawStr(53, 30, "g"); u8g.setFont(u8g_font_gdr30n); u8g.drawStr90(23, 10, "8"); u8g.setFont(u8g_font_gdr20r); u8g.setPrintPos(80, 30); u8g.print(contrast); u8g.setFont(u8g_font_4x6); u8g.drawStr(80, 8, "contrast:"); u8g.drawStr( 1, 54, "code.google.com/p/u8glib"); u8g.drawHLine( 2, 35, 47); u8g.drawVLine(45, 32, 12); } void setup(void) { //Serial.begin(9600); pinMode(SW_up, INPUT_PULLUP); pinMode(SW_down, INPUT_PULLUP); } void loop(void) { u8g.setContrast(contrast); // picture loop u8g.firstPage(); do { draw(); } while( u8g.nextPage() ); // contrast manipulation if(digitalRead(SW_up) == LOW ){ ++count_SW_up; }else{ count_SW_up = 0; } if(contrast < 255){ if(count_SW_up == 3 or count_SW_up >= 28){ ++contrast; } } if(digitalRead(SW_down) == LOW ){ ++count_SW_down; }else{ count_SW_down = 0; } if(contrast > 100){ if(count_SW_down == 3 or count_SW_down >= 28){ --contrast; } } }
<参考>
コメント