LCD Shield sample. 4.3inch.

Dependencies:   GR-PEACH_video mbed-rtos mbed

Fork of GR-PEACH_LCD_sample by Daiki Kato

Information

Japanese version is available in lower part of this page.
このページの後半に日本語版が用意されています.

This program displays the NTSC input from NTSC1A of LCD Shield on the screen. Touch coordinates are displayed on the terminal when you touch the screen. You can touch at the same time up to 2 points.

When you connect the "GR-PEACH AUDIO CAMERA Shield", you can display an image of the CMOS Camera(MT9V111).
If you use CMOS Camera, Please change the below in the “main.cpp”.

main.cpp

#define VIDEO_INPUT_METHOD     (VIDEO_CVBS)
->
#define VIDEO_INPUT_METHOD     (VIDEO_CMOS_CAMERA)


Please refer to following link about "GR-PEACH AUDIO CAMERA Shield".
https://developer.mbed.org/teams/Renesas/wiki/Audio_Camera-shield


このプログラムは、NTSC1AからのNTSC入力をLCDシールドの画面上に表示します。画面をタッチすると、タッチ座標がprintf表示されます。2点まで同時にタッチできます。
GR-PEACH AUDIO CAMERA Shieldを接続すると、CMOSカメラ(MT9V111)の画像を表示することができます。CMOSカメラを使用する場合は、「main.cpp」の以下を変更してください。

main.cpp

#define VIDEO_INPUT_METHOD     (VIDEO_CVBS)
->
#define VIDEO_INPUT_METHOD     (VIDEO_CMOS_CAMERA)


GR-PEACH AUDIO CAMERA Shieldについては下記を参照ください。
https://developer.mbed.org/teams/Renesas/wiki/Audio_Camera-shield

Revision:
1:f0d5f9c28404
Parent:
0:47ea8de0be6c
Child:
2:8e78c957adb5
--- a/main.cpp	Thu Oct 01 08:54:48 2015 +0000
+++ b/main.cpp	Fri Nov 06 09:44:29 2015 +0000
@@ -14,6 +14,27 @@
 #define USE_VIDEO_CH           (0)                 /* Select  0 or 1            If selecting VIDEO_CMOS_CAMERA, should be 0.)               */
 #define VIDEO_PAL              (0)                 /* Select  0(NTSC) or 1(PAL) If selecting VIDEO_CVBS, this parameter is not referenced.) */
 /*****************************/
+ 
+/**** LCD Parameter **********/
+#define LCD_DE_MODE            (0)
+#define LCD_SYNC_MODE          (1)
+
+#define LCD_DOT_CLOCK          (13.40f)     // 13.4MHz
+
+#define LCD_H_WIDTH            (480u)
+#define LCD_H_BACK_PORCH       (43u)
+#define LCD_H_FRONT_PORCH      (52u)
+#define LCD_H_SYNC_WIDTH       (41u)
+
+#define LCD_V_WIDTH            (272u)
+#define LCD_V_BACK_PORCH       (12u)
+#define LCD_V_FRONT_PORCH      (2u)
+#define LCD_V_SYNC_WIDTH       (10u)
+
+#define LCD_MODE               (LCD_SYNC_MODE)
+
+/*****************************/
+
 
 #if USE_VIDEO_CH == (0)
 #define VIDEO_INPUT_CH         (DisplayBase::VIDEO_INPUT_CHANNEL_0)
@@ -31,13 +52,8 @@
 
 /*! Frame buffer stride: Frame buffer stride should be set to a multiple of 32 or 128
     in accordance with the frame buffer burst transfer mode. */
-#if VIDEO_INPUT_METHOD == VIDEO_CMOS_CAMERA
-#define PIXEL_HW               (640u)  /* Camera */
-#define PIXEL_VW               (468u)  /* Camera */
-#else
-#define PIXEL_HW               (800u)  /* NTSC */
-#define PIXEL_VW               (480u)  /* NTSC */
-#endif
+#define PIXEL_HW               (480u)  /* WQVGA */
+#define PIXEL_VW               (272u)  /* WQVGA */
 
 #define VIDEO_BUFFER_STRIDE    (((PIXEL_HW * DATA_SIZE_PER_PIC) + 31u) & ~31u)
 #define VIDEO_BUFFER_HEIGHT    (PIXEL_VW)
@@ -144,10 +160,13 @@
     };
 #endif
 #if(1) //lcd
-    Thread::wait(500);
-
+    lcd_pwon = 0;
+    lcd_blon = 0;
+    Thread::wait(100);
+ 
     lcd_pwon = 1;
     lcd_blon = 1;
+    Thread::wait(100);
 
     DisplayBase::lcd_config_t lcd_config;
     PinName lvds_pin[8] = {
@@ -158,16 +177,36 @@
 
     lcd_config.lcd_type             = DisplayBase::LCD_TYPE_LVDS;
     lcd_config.intputClock          = 66.67f;
-    lcd_config.outputClock          = 33.26f;
+    lcd_config.outputClock          = LCD_DOT_CLOCK;
     lcd_config.lcd_outformat        = DisplayBase::LCD_OUTFORMAT_RGB888;
     lcd_config.lcd_edge             = DisplayBase::EDGE_RISING;
-    lcd_config.h_toatal_period      = (800 + 92 + 128 + 36);
-    lcd_config.v_toatal_period      = (480 + 5 + 35 + 5);
+#if(LCD_MODE) //SYNC Mode
+    lcd_config.h_toatal_period      = (LCD_H_BACK_PORCH + LCD_H_WIDTH + LCD_H_FRONT_PORCH);
+    lcd_config.v_toatal_period      = (LCD_V_BACK_PORCH + LCD_V_WIDTH + LCD_V_FRONT_PORCH);
+ 
+    lcd_config.h_disp_widht         = (LCD_H_WIDTH);
+    lcd_config.v_disp_widht         = (LCD_V_WIDTH);
+    lcd_config.h_back_porch         = (LCD_H_BACK_PORCH);
+    lcd_config.v_back_porch         = (LCD_V_BACK_PORCH);
+ 
+    lcd_config.h_sync_port          = DisplayBase::LCD_TCON_PIN_2;
+    lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_INVERTED;
+    lcd_config.h_sync_width         = LCD_H_SYNC_WIDTH;
+ 
+    lcd_config.v_sync_port          = DisplayBase::LCD_TCON_PIN_0;
+    lcd_config.v_sync_port_polarity = DisplayBase::SIG_POL_INVERTED;
+    lcd_config.v_sync_width         = LCD_V_SYNC_WIDTH;
+ 
+    lcd_config.de_port              = DisplayBase::LCD_TCON_PIN_NON;
+    lcd_config.de_port_polarity     = DisplayBase::SIG_POL_NOT_INVERTED;
+#else  //DE Mode
+    lcd_config.h_toatal_period      = (LCD_H_WIDTH + 80u);
+    lcd_config.v_toatal_period      = (LCD_V_WIDTH);
 
-    lcd_config.h_disp_widht         = 800;
-    lcd_config.v_disp_widht         = 480;
-    lcd_config.h_back_porch         = (128 + 36);
-    lcd_config.v_back_porch         = (35 + 5);
+    lcd_config.h_disp_widht         = (LCD_H_WIDTH);
+    lcd_config.v_disp_widht         = (LCD_V_WIDTH);
+    lcd_config.h_back_porch         = (68u);
+    lcd_config.v_back_porch         = (18u);
 
     lcd_config.h_sync_port          = DisplayBase::LCD_TCON_PIN_NON;
     lcd_config.h_sync_port_polarity = DisplayBase::SIG_POL_NOT_INVERTED;
@@ -178,7 +217,8 @@
     lcd_config.v_sync_width         = 0;
 
     lcd_config.de_port              = DisplayBase::LCD_TCON_PIN_3;
-    lcd_config.de_port_polarity     = DisplayBase::SIG_POL_NOT_INVERTED;
+    lcd_config.de_port_polarity     = DisplayBase::SIG_POL_INVERTED;
+#endif
 
     /* Graphics initialization process */
     error = Display.Graphics_init(&lcd_config);