注册 登录
查看: 1004|回复: 32

[鹰眼] 多工能调试助手串口能接收数据,但是摄像头助手无法显示图像

[复制链接]
发表于 2014-11-18 19:33:45 | 显示全部楼层 |阅读模式
用的是PTC14,PTC15

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-11-18 20:10:02 | 显示全部楼层
命令对不对?你把你的发送函数发来看看。单步调试,上位机十六进制显示,看看数据对不对。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-18 20:27:05 | 显示全部楼层
用的5.1的例程
void sendimg(uint8 *imgaddr, uint32 imgsize)
{
    uint8 cmd[4] = {0, 255, 1, 0 };    //yy_摄像头串口调试 使用的命令

    uart_putbuff(VCAN_PORT, cmd, sizeof(cmd));    //先发送命令

    uart_putbuff(VCAN_PORT, imgaddr, imgsize); //再发送图像
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-18 20:27:40 | 显示全部楼层
山外メ雲ジ 发表于 2014-11-18 20:10
命令对不对?你把你的发送函数发来看看。单步调试,上位机十六进制显示,看看数据对不对。

用的5.1的例程
void sendimg(uint8 *imgaddr, uint32 imgsize)
{
    uint8 cmd[4] = {0, 255, 1, 0 };    //yy_摄像头串口调试 使用的命令

    uart_putbuff(VCAN_PORT, cmd, sizeof(cmd));    //先发送命令

    uart_putbuff(VCAN_PORT, imgaddr, imgsize); //再发送图像
}
回复 支持 反对

使用道具 举报

发表于 2014-11-18 20:29:29 | 显示全部楼层
做好自己 发表于 2014-11-18 20:27
用的5.1的例程
void sendimg(uint8 *imgaddr, uint32 imgsize)
{ ...

那个例程对应的是YY上位机。

你参考这帖子的代码,就发送函数不同而已:
【山外摄像头】鹰眼上位机例程和微焦效果 - 智能车资料区 - 山外论坛 http://www.vcan123.com/forum.php ... id=6242&ctid=27
回复 支持 反对

使用道具 举报

发表于 2014-11-18 20:57:48 | 显示全部楼层
山外メ雲ジ 发表于 2014-11-18 20:29
那个例程对应的是YY上位机。

你参考这帖子的代码,就发送函数不同而已:

是这个发送函数吗?
void sendimg(uint8 *imgaddr, uint32 imgsize)
{
#define CMD_IMG     1
    uint8 cmdf[2] = {CMD_IMG, ~CMD_IMG};    //山外上位机 使用的命令
    uint8 cmdr[2] = {~CMD_IMG, CMD_IMG};    //山外上位机 使用的命令

    uart_putbuff(VCAN_PORT, cmdf, sizeof(cmdf));    //先发送命令

    uart_putbuff(VCAN_PORT, imgaddr, imgsize); //再发送图像

    uart_putbuff(VCAN_PORT, cmdr, sizeof(cmdr));    //先发送命令
}


回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-18 21:23:51 | 显示全部楼层
山外メ雲ジ 发表于 2014-11-18 20:29
那个例程对应的是YY上位机。

你参考这帖子的代码,就发送函数不同而已:

我把发送函数改成了这个
void sendimg(uint8 *imgaddr, uint32 imgsize)
{
#define CMD_IMG     1
    uint8 cmdf[2] = {CMD_IMG, ~CMD_IMG};    //山外上位机 使用的命令
    uint8 cmdr[2] = {~CMD_IMG, CMD_IMG};    //山外上位机 使用的命令

    uart_putbuff(VCAN_PORT, cmdf, sizeof(cmdf));    //先发送命令

    uart_putbuff(VCAN_PORT, imgaddr, imgsize); //再发送图像

    uart_putbuff(VCAN_PORT, cmdr, sizeof(cmdr));    //先发送命令
}
数据显示是正常的,但是图像还是显示不出来
回复 支持 反对

使用道具 举报

发表于 2014-11-18 22:04:13 | 显示全部楼层
做好自己 发表于 1416317031
我把发送函数改成了这个
void sendimg(uint8 *imgaddr, uint32 imgsize)
{
#define CMD_IMG     1
    uint8 cmdf[2] = {CMD_IMG, ~CMD_IMG};    //山外上位机 使用的命令
    uint8 cmdr[2] = {~CMD_IMG, CMD_IMG};    //山外上位机 使用的命令

   ...
难道是上位机的参数没配置好?宽80,高60,二值化
来自PC客户端 来自PC客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-19 10:41:30 | 显示全部楼层
山外メ雲ジ 发表于 2014-11-18 22:04
难道是上位机的参数没配置好?宽80,高60,二值化

这些都对啊,依然没图像
回复 支持 反对

使用道具 举报

发表于 2014-11-19 11:31:32 | 显示全部楼层
做好自己 发表于 2014-11-19 10:41
这些都对啊,依然没图像

你用串口助手看看,看看单片机发送的数据,跟串口助手接收到的数据有什么不同。

记得用十六进制来看啊。
回复 支持 反对

使用道具 举报

发表于 2014-11-19 15:58:31 | 显示全部楼层
这是一对乱码吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-19 19:41:45 | 显示全部楼层
山外メ雲ジ 发表于 2014-11-19 11:31
你用串口助手看看,看看单片机发送的数据,跟串口助手接收到的数据有什么不同。

记得用十六进制来看啊 ...

山外哥,数据是一样的,图像还是不行。另外还出来了一件奇葩的事,我们用usb转串口接受数据导致电脑鼠标不受控制了,我和队友的两台电脑都是这样。
回复 支持 反对

使用道具 举报

发表于 2014-11-19 19:44:21 | 显示全部楼层
做好自己 发表于 2014-11-19 19:41
山外哥,数据是一样的,图像还是不行。另外还出来了一件奇葩的事,我们用usb转串口接受数据导致电脑鼠标 ...

你的USB转串口模块很烂,估计是 PL2303 ,最好用CP2102,其次是 ch340 。(FTF232 最好用,但太贵了)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-19 19:45:05 | 显示全部楼层
sestpqwnkm 发表于 2014-11-19 19:44
你的USB转串口模块很烂,估计是 PL2303 ,最好用CP2102,其次是 ch340 。(FTF232 最好用,但太贵了)

就是CH340
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-19 21:31:48 | 显示全部楼层
山外メ雲ジ 发表于 2014-11-19 11:31
你用串口助手看看,看看单片机发送的数据,跟串口助手接收到的数据有什么不同。

记得用十六进制来看啊 ...

把例程的bus频率改了,灰度图像显示成功。如果要显示二值化图像和彩色图像要怎么做呢
回复 支持 反对

使用道具 举报

发表于 2014-11-19 22:15:50 | 显示全部楼层
难道是波特率的问题 ????   
回复 支持 反对

使用道具 举报

发表于 2014-11-19 23:15:59 | 显示全部楼层
做好自己 发表于 2014-11-19 21:31
把例程的bus频率改了,灰度图像显示成功。如果要显示二值化图像和彩色图像要怎么做呢

你用的是 鹰眼还是7620?
鹰眼是二值化图像啊。上传一下你的代码来看看。
回复 支持 反对

使用道具 举报

发表于 2014-11-19 23:17:24 | 显示全部楼层
问下楼主,这助手能测出某个引脚的pwm波形吗?
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-11-19 23:48:06 | 显示全部楼层
小@小哒哒何 发表于 2014-11-19 23:17
问下楼主,这助手能测出某个引脚的pwm波形吗?

除非你的PWM频率比较低,不然不能,单片机的ADC采集速度比较慢。
回复 支持 反对

使用道具 举报

发表于 2014-11-20 08:26:35 | 显示全部楼层
仰逸致 发表于 2014-11-19 23:48
除非你的PWM频率比较低,不然不能,单片机的ADC采集速度比较慢。

那意思就是没用咯
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-20 14:21:37 | 显示全部楼层
仰逸致 发表于 2014-11-19 23:15
你用的是 鹰眼还是7620?
鹰眼是二值化图像啊。上传一下你的代码来看看。

鹰眼
uint8 imgbuff[CAMERA_SIZE];                             //定义存储接收图像的数组
uint8 img[CAMERA_W*CAMERA_H];                           //由于鹰眼摄像头是一字节8个像素,因而需要解压为 1字节1个像素,方便处理

//函数声明
void sendimg(uint8 *imgaddr, uint32 imgsize);          //发送图像到上位机
void img_extract(uint8 *dst, uint8 *src, uint32 srclen);
void PORTA_IRQHandler();
void DMA0_IRQHandler();

/*!
*  @brief      main函数
*  @since      v5.0
*  @note       山外 DMA 采集摄像头 实验
                注意,此例程 bus频率设为100MHz(50MHz bus频率会太慢而导致没法及时采集图像)
*/
void  main(void)
{
    //初始化摄像头
    camera_init(imgbuff);

    //配置中断复位函数
    set_vector_handler(PORTA_VECTORn ,PORTA_IRQHandler);    //设置LPTMR的中断复位函数为 PORTA_IRQHandler
    set_vector_handler(DMA0_VECTORn ,DMA0_IRQHandler);      //设置LPTMR的中断复位函数为 PORTA_IRQHandler

    while(1)
    {
        //获取图像
        camera_get_img();                                   //摄像头获取图像

        //解压图像
       img_extract(img, imgbuff,CAMERA_SIZE);

        //发送图像到上位机
        sendimg(img, CAMERA_W * CAMERA_H);                  //发送到上位机
    }
}
void sendimg(uint8 *imgaddr, uint32 imgsize)
{
#define CMD_IMG     1
    uint8 cmdf[2] = {CMD_IMG, ~CMD_IMG};    //山外上位机 使用的命令
    uint8 cmdr[2] = {~CMD_IMG, CMD_IMG};    //山外上位机 使用的命令

    uart_putbuff(VCAN_PORT, cmdf, sizeof(cmdf));    //先发送命令

    uart_putbuff(VCAN_PORT, imgaddr, imgsize); //再发送图像

    uart_putbuff(VCAN_PORT, cmdr, sizeof(cmdr));    //先发送命令
}

/*!
*  @brief      二值化图像解压(空间 换 时间 解压)
*  @param      dst             图像解压目的地址
*  @param      src             图像解压源地址
*  @param      srclen          二值化图像的占用空间大小
*  @since      v5.0            img_extract(img, imgbuff,CAMERA_SIZE);
*  Sample usage:   sendimg(imgbuff, CAMERA_W * CAMERA_H);                    //发送到上位机
*/
void img_extract(uint8 *dst, uint8 *src, uint32 srclen)
{
    uint8 colour[2] = {255, 0}; //0 和 1 分别对应的颜色
    //注:山外的摄像头 0 表示 白色,1表示 黑色
    uint8 tmpsrc;
    while(srclen --)
    {
        tmpsrc = *src++;
        *dst++ = colour[ (tmpsrc >> 7 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 6 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 5 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 4 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 3 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 2 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 1 ) & 0x01 ];
        *dst++ = colour[ (tmpsrc >> 0 ) & 0x01 ];
    }
}

/*!
*  @brief      PORTA中断服务函数
*  @since      v5.0
*/
void PORTA_IRQHandler()
{
    uint8  n = 0;    //引脚号
    uint32 flag = PORTA_ISFR;
    PORTA_ISFR  = ~0;                                   //清中断标志位

    n = 29;                                             //场中断
    if(flag & (1 << n))                                 //PTA29触发中断
    {
        camera_vsync();
    }
#if 0             //鹰眼直接全速采集,不需要行中断
    n = 28;
    if(flag & (1 << n))                                 //PTA28触发中断
    {
        camera_href();
    }
#endif
}

/*!
*  @brief      DMA0中断服务函数
*  @since      v5.0
*/
void DMA0_IRQHandler()
{
    camera_dma();
}

回复 支持 反对

使用道具 举报

发表于 2014-11-20 15:02:37 | 显示全部楼层
如果你用的是鹰眼OV7725,你选择的是二值化显示,这样是不会显示的,要选择灰度图像

评分

参与人数 1互助 +1 收起 理由
虚竹 + 1 赞一个!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2014-11-20 15:24:50 | 显示全部楼层
冬瓜弗斯 发表于 2014-11-20 15:02
如果你用的是鹰眼OV7725,你选择的是二值化显示,这样是不会显示的,要选择灰度图像

上位机灰度图像是显示的,但是二值化图像不显示
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-11-20 15:25:03 | 显示全部楼层
做好自己 发表于 2014-11-20 14:21
鹰眼
uint8 imgbuff[CAMERA_SIZE];                             //定义存储接收图像的数组
uint8 img[ ...

不需要解压,直接发送采集的数据就好。
解压了就会变成灰度模式。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-11-20 15:26:26 | 显示全部楼层
冬瓜弗斯 发表于 2014-11-20 15:02
如果你用的是鹰眼OV7725,你选择的是二值化显示,这样是不会显示的,要选择灰度图像

鹰眼是二值化,只不过楼主进行解压,解压后就变成灰度模式了。

不需要解压,直接发送采集的数据就好。
解压了就会变成灰度模式。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

发表于 2014-11-20 15:26:44 | 显示全部楼层
wjyz 发表于 2014-11-20 15:24
上位机灰度图像是显示的,但是二值化图像不显示

不需要解压,直接发送采集的数据就好。
解压了就会变成灰度模式。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-20 16:38:02 | 显示全部楼层
山外メ雲ジ 发表于 2014-11-20 15:26
不需要解压,直接发送采集的数据就好。
解压了就会变成灰度模式。

不解压的话,上位机接收的数据除发送命令外,全是00;还是无法显示二值化图像。
回复 支持 反对

使用道具 举报

发表于 2014-11-20 17:08:47 | 显示全部楼层
做好自己 发表于 2014-11-20 16:38
不解压的话,上位机接收的数据除发送命令外,全是00;还是无法显示二值化图像。

那肯定是你发送错了数据,要发送采集的缓冲区数据啊!!!

摄像头初始化的时候传递一个地址进去,那个地址就是采集缓冲区地址。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-20 19:11:45 | 显示全部楼层
唉,还是显示不出来啊
回复 支持 反对

使用道具 举报

发表于 2014-11-20 19:26:29 | 显示全部楼层
宫格格 发表于 2014-11-20 17:08
那肯定是你发送错了数据,要发送采集的缓冲区数据啊!!!

摄像头初始化的时候传递一个地址进去,那个 ...

试了,不行。你有成功的例程吗?能发给我一份吗?
回复 支持 反对

使用道具 举报

发表于 2014-11-20 19:30:11 | 显示全部楼层
做好自己 发表于 2014-11-20 19:11
唉,还是显示不出来啊

那你想加我Q吧,我现在比较忙,没时间。等下晚点给你远程调试吧。
回复 支持 反对

使用道具 举报

发表于 2014-11-20 19:31:12 | 显示全部楼层
wjyz 发表于 2014-11-20 19:26
试了,不行。你有成功的例程吗?能发给我一份吗?

传递进去的 缓冲区大小,设置对了吗?

【山外摄像头】鹰眼上位机例程和微焦效果 - 智能车资料区 - 山外论坛 http://vcan123.com/forum.php?mod ... id=6242&ctid=27
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-11-20 20:10:31 | 显示全部楼层
山外メ雲ジ 发表于 2014-11-20 19:31
传递进去的 缓冲区大小,设置对了吗?

【山外摄像头】鹰眼上位机例程和微焦效果 - 智能车资料区 - 山 ...

多少合适呢?我没改缓冲区大小。我先用着YY上位机吧。等过几天对代码熟悉了,再找你调一下吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回列表 返回顶部