0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

1.44 インチ TFT液晶に画像を表示する

Last updated at Posted at 2020-08-13

前回
1.44 インチ TFT液晶 128 x 128 ST7735 動作確認メモ
https://qiita.com/santarou6/items/7f2946ae918245049440
の続き


画像を表示したい。
※ソースは、後ほど、アップします


結果から示すと、以下のように出せた。
スクリーンショット 2020-08-13 15.48.50.png

手順は、
1) 表示する画像ファイルから、書き込み用のデータを作成する
2) データをEEPROMに書き込む
3) EEPROMのデータを読み込みながら、TFT液晶に描画する


もう少し細かく書くと、

1) 表示する画像ファイルから、書き込み用のデータを作成する

1−1) 128×128ピクセルのbitmap(bmp)画像を用意する
1−2) bmpから、各xy座標のRGBデータを取り出す
1−3) 24bitのRGBデータを、16bitのRGBデータに変換し、16進表記し、テキスト化する

24bitのとき、R=1byte(8bit)、G=1byte(8bit)、B=1byte(8bit)
(3byte:RRRRRRRRGGGGGGGGBBBBBBBB)
16bitのとき、R=(5bit)、G=(6bit)、B=(5bit)
(2byte:RRRRRGGGGGGBBBBB)
この変換は、
 RとBは、0〜255を、0〜31に変換。(例:r1=r0/25632)
 Gは、0〜255を、0〜63に変換。(例:g1=g0/256
64)


2) データをEEPROMに書き込む

書き込みは、ここを参考にしました

https://www.petitmonte.com/robot/howto_eeprom_i2c.html
http://radiopench.blog96.fc2.com/blog-entry-574.html

メモリは、これ
EEPROM 24FC1025
http://akizukidenshi.com/catalog/g/gI-03570/

1024Kbitなので、128Kbyte書き込める。
(1画面あたり、128 x 128 x 2byte = 32Kbyteなので、4枚分入る。)

※抜粋

write_eeprom.ino
for (i=( (m_x * stp)); i<((m_x * (stp+1))); i++){  
  Wire.beginTransmission(DEVICE_ADDRESS);    
  Wire.write(i >> 8);     // Address(High Byte)   
  Wire.write(i & 0x00FF); // Address(Low Byte)
  int id1;
  id1 = pgm_read_byte(IMAGE_DATA1 + id_ad);
  Wire.write(id1); 
  id_ad ++;
  Wire.endTransmission();
  delay(5);
}

3) EEPROMのデータを読み込みながら、TFT液晶に描画する

※抜粋

tft_drawPixel.ino
 for (int16_t y=0; y < tft.height(); y+=1) {
  for (int16_t x=0; x < tft.width(); x+=1) {

  int16_t ad1 = (y * 256) + (x * 2);
  int16_t ad2 = (y * 256) + (x * 2) + 1;

    Wire.beginTransmission(DEVICE_ADDRESS);
    Wire.write(ad1 >> 8);     // Address(High Byte)   
    Wire.write(ad1 & 0x00FF); // Address(Low Byte)
    Wire.endTransmission();
    Wire.requestFrom(DEVICE_ADDRESS, 1); 
    while (Wire.available() == 0 ){}
    unsigned char a1 = Wire.read();
  
    Wire.beginTransmission(DEVICE_ADDRESS);
    Wire.write(ad2 >> 8);     // Address(High Byte)   
    Wire.write(ad2 & 0x00FF); // Address(Low Byte)
    Wire.endTransmission();
    Wire.requestFrom(DEVICE_ADDRESS, 1); 
    while (Wire.available() == 0 ){}
    unsigned char a2 = Wire.read();

    unsigned short int c1 = (a1 << 8) + a2;
    tft.drawPixel(x, y, c1);
    delay(0);
  }
 }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?