[国民技术N32WB452测评]四.LCD显示DVP采集图像
本帖最后由 Eurasia32 于 2022-8-7 14:59 编辑<p>在上次评测中实现了通过DVP接口驱动GC0308摄像头进行图像采集的功能,本次测评将实现将采集图像显示至LCD显示屏。</p>
<ol>
<li>实现LCD显示屏驱动
<ol>
<li>
<p>本次测评使用的LCD显示屏为合宙的1.8寸 TFT LCD,分辨率128*160,驱动芯片为ST7735。</p>
</li>
<li>
<p>在官方提供SDK中 \BLE\devBoardDemo项目下提供了LCD屏幕的驱动,复制相关所需文件至对应项目中即可实现LCD驱动,其中lcd_dev.c文件包含相关寄存器配置,注意注释掉下图所示行</p>
<pre>
<code>LCD_SendCommand(0x21);</code></pre>
<p>该寄存器控制LCD屏幕颜色反演,若不注释可能造成显示颜色出错,同时注意修改lcd_drv.h头文件中对于现实区域大小的设置,即</p>
<pre>
<code>#define LCD_HEIGHT 128
#define LCD_WIDTH 160
#define LCD_WIDTH_Byte 160</code></pre>
<p>修改为本次所对应的128、160以及160。</p>
</li>
<li>
<p>实现图像显示的函数为void LCD_Display(uint16_t* Image),该函数功能为将内存中的16位无符号整形数组显示至LCD上,符合通过DMA直接传输图像的要求。</p>
</li>
</ol>
</li>
<li>实现GC0308摄像头驱动
<ol>
<li>
<p>在官方提供SDK中\DVP\Camera项目下提供了摄像头相关驱动,其中gc0308.c文件设置相关寄存器以及接口初始化,dvp_demo.c文件则设置数据引脚初始化以及DVP,DMA的配置,在dvp_demo.h头文件中设置了输出图像的格式以及大小:</p>
<pre>
<code>#define DVP_IMAGE_FORMAT (DVP_IMAGE_FORMAT_RGB565)
//#define DVP_IMAGE_FORMAT (DVP_IMAGE_FORMAT_GRAY)
#define DVP_IMAGE_PIXEL_SIZE (DVP_IMAGE_FORMAT)
#if (DVP_IMAGE_FORMAT == DVP_IMAGE_FORMAT_GRAY)
#define DVP_IMAGE_WIDTH ((uint16_t)320)
#define DVP_IMAGE_HEIGHT ((uint16_t)240)
//#define DVP_IMAGE_WIDTH ((uint16_t)160)
//#define DVP_IMAGE_HEIGHT ((uint16_t)128)
#else
//#define DVP_IMAGE_WIDTH ((uint16_t)274)
//#define DVP_IMAGE_HEIGHT ((uint16_t)206)
#define DVP_IMAGE_WIDTH ((uint16_t)160)
#define DVP_IMAGE_HEIGHT ((uint16_t)128)
#endif</code></pre>
<p> </p>
</li>
</ol>
</li>
<li>通过DMA将采集图像传输至LCD
<ol>
<li>
<p>在dvp_demo.c文件中定义了</p>
<pre>
<code>uint32_t DVP_Image = {0};</code></pre>
<p>常量用于存储相关图像,将其以外部全局变量形式添加至main.c文件中,在DVPDemo_Caputure()函数后直接使用LCD_Display()输出DVP_Image即可实现图像传输。</p>
</li>
</ol>
</li>
<li>最终效果03942ce7a078e97c75cf55fb6af3626c<br />
</li>
<li>总结
<ol>
<li> 图像显示帧率较为理想,不足之处在于屏幕在扫描时会出现红色条纹,起初我以为是显示屏BGR模式和RGB模式未设置好造成的,但向0x36寄存器中写入的值由0x60(RGB)变为0x68(BGR)后扫描时红线变为蓝线,说明并非颜色显示模式的问题,现在对这个问题暂时没有头绪,一个可能的方向是LCD与开发板之间连接未使用排线造成的信号干扰,若有遇到相同问题或有解决思路的欢迎来讨论。</li>
<li>其次,显示图像质量较差,主要原因可能是GC0308摄像头只有30W像素,换用OV2640等摄像头后情况可能会改善。</li>
</ol>
</li>
<li>代码</li>
</ol>
<p> </p>
显示图像质量较差,主要原因可能是GC0308摄像头只有30W像素。可不可设置分辨率,然后就会清晰一些。 lugl4313820 发表于 2022-8-7 21:18
显示图像质量较差,主要原因可能是GC0308摄像头只有30W像素。可不可设置分辨率,然后就会清晰一些。
<p>是指摄像头的分辨率还是屏幕的分辨率?我比较小白<span style="-webkit-tap-highlight-color:rgba(0, 0, 0, 0)">😂</span></p>
<p>我看了一下你的LCD屏本身的显示的像数就比较大,显得图像不是很好,可以换一下其他的屏试一下。你所设置的分辨率为128*160 = 20,480,好象才2万像数,才不到1/15,这个摄像头可以达到640*480 30fps。</p>
lugl4313820 发表于 2022-8-8 01:33
我看了一下你的LCD屏本身的显示的像数就比较大,显得图像不是很好,可以换一下其他的屏试一下。你所设置的 ...
<p>好的,感谢回复,过一阵我换个大点的屏幕试试😂</p>
lugl4313820 发表于 2022-8-8 01:33
我看了一下你的LCD屏本身的显示的像数就比较大,显得图像不是很好,可以换一下其他的屏试一下。你所设置的 ...
<p>根据您的建议,我在没有换lcd屏幕的前提下试着改了一下gc0308的图像窗口设置,原先设置为windowing vga格式输出,即640X480,同时subsample设置4/7缩放,修改为qqvga格式输出,即160X120,然后将subsample设置为不缩放,显示图像质量确实有一定改善。</p>
<p>扫描红线有没有可能是VSYNC 或者HSYNC电平设置造成的?</p> <p>相当可以了,不过曝光是不是有点高啊</p> 秦天qintian0303 发表于 2022-8-8 09:28
相当可以了,不过曝光是不是有点高啊
<p>vga输出的时候帧数最大是30fps,原先帧数设置为16.67fps,我调到qqvga输出以后采用了100fps的输出,曝光时间应该是原先1/6,拍摄灯光等较明亮物体时有一定改善</p>
littleshrimp 发表于 2022-8-8 07:28
扫描红线有没有可能是VSYNC 或者HSYNC电平设置造成的?
<p>vsync和hsync相关寄存器配置我是沿用的例程,相关说明在gc0308手册上比较少,调整不是非常方便😂</p>
有朋友验证上面代码么,感觉不点不对
页:
[1]