2.4インチ液晶ディスプレイ高速表示② Arduino DUE 編
ILI9341ドライバーICを使用した2.4インチ液晶ディスプレイの高速表示テクニック第2回目。 前回はArduino UNO R3とMEGA2560でのやり方を紹介したわけだが、今回は高性能MPUを搭載したArduino DUEでのやり方だ。
最初から見ていない人は、ぜひ最初から読むのをお勧めする。
私キャッスルのArduino DUEは改造されて見た目が変わっちゃっているが、気にしてはいけない。 気になる人は、過去記事を見てほしい。
そもそも、Arduino DUEはあんまり使っている人がいないのか、話題に上ることが少ない。 すごく早いのに。
余談だが、Arduino GIGA R1 なんて物が発売されたが、なんじゃあの化け物は。 OS無しで制御できるのか? って思えるほどのトンデモ仕様。 気になるが値段が値段だけにポチる勇気はちょっと無いかな・・・。
そんなことはどうでもよくて、DUEでのプログラムだな。
例によって変更する6つの関数の箇所だけ書いておく。
void Lcd_Writ_Bus(unsigned char d) { REG_PIOC_CODR = 0x17e00000; REG_PIOB_CODR = 0x02000000; REG_PIOC_SODR |= d << 22 & 1 << 22; REG_PIOC_SODR |= d << 20 & 1 << 21; REG_PIOB_SODR |= d << 23 & 1 << 25; REG_PIOC_SODR |= d << 25 & 1 << 28; REG_PIOC_SODR |= d << 22 & 1 << 26; REG_PIOC_SODR |= d << 20 & 1 << 25; REG_PIOC_SODR |= d << 18 & 1 << 24; REG_PIOC_SODR |= d << 16 & 1 << 23; REG_PIOA_CODR |= 1 << 24; REG_PIOA_SODR |= 1 << 24; } void Lcd_Write_Com(unsigned char VH) { REG_PIOA_CODR |= 1 << 23; Lcd_Writ_Bus(VH); } void Lcd_Write_Data(unsigned char VH) { REG_PIOA_SODR |= 1 << 23; Lcd_Writ_Bus(VH); } void H_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c) { unsigned int i, j; REG_PIOA_CODR |= 1 << 22; l = l + x; Address_set(x, y, l, y); j = l * 2; for(i = 1; i <= j; i++) Lcd_Write_Data(c); REG_PIOA_SODR |= 1 << 22; } void V_line(unsigned int x, unsigned int y, unsigned int l, unsigned int c) { unsigned int i, j; REG_PIOA_CODR |= 1 << 22; l = l + y; Address_set(x, y, x, l); j = l * 2; for(i = 1; i <= j; i++) Lcd_Write_Data(c); REG_PIOA_SODR |= 1 << 22; } void LCD_Clear(unsigned int j) { unsigned int i,m; REG_PIOA_CODR |= 1 << 22; Address_set(0, 0, 239, 319); for(i = 0; i < 240; i++) for(m = 0; m < 320; m++){ Lcd_Write_Data(j>>8); Lcd_Write_Data(j); } REG_PIOA_SODR |= 1 << 22; }
こうすると、なんと3秒で完了する。 「3秒ならUNO R3と同じじゃん」って思うかもしれないが、前回書いたようにこの液晶ディスプレイはUNO R3で最大の効果が出るように設計されている。 最適ではない状態でも3秒という時間で終わるのだから、驚異的な速さだ。
配線をし直して最適状態で動かしたらどうなるか。 ちょっと気になるよね。