首页 理论教育 物联网实验教程:六图像采集实验

物联网实验教程:六图像采集实验

时间:2023-10-21 理论教育 版权反馈
【摘要】:该命令调节单片机串口与C328串口的波特率,并唤醒C328。

物联网实验教程:六图像采集实验

1.实验目的

本实验介绍如何使用单片机ATmega128控制串口摄像模块C328进行拍照。通过实验使读者掌握C328的使用方法,并进一步熟练ATmega128的程序设计。

2.实验设备

(1)硬件

● 单片机实验母板(IOT-SCMMB)1套。

传感器及外围模块(IOT-MODULES)1套。

● JTAG编程器1个。

● PC(含串口)1台。

(2)软件

● 串口调试助手。

● WinAVR20050214。

● AVRStudio4.18。

3.实验原理

本实验基于ATmega128实现一个串口摄像的程序,硬件平台是基于单片机实验母板(IOT-SCMMB)以及相应的传感器及外围模块。实验中用到了两个单片机U4、U5,单片机U5实现了以下的功能:U5通过串口1发送命令给串口摄像模块,串口摄像模块把相片数据通过串口1发回给U5,U5再把数据通过它的串口0发送给另外一个单片机U4的串口1的扩展芯片GM8123,最后单片机U4通过串口0把数据发送到PC,在PC上打开串口调试助手,就可以获得相片的数据。

实验各模块的关系如图3-11所示。

978-7-111-34147-5-Chapter03-47.jpg

图3-11 实验各模块的关系

为了便于理解,实验内容分为3部分:串口的接收和发送程序,C328串口摄像模块的控制程序,单片机U4和U5的双机通信程序。下面分别对各部分进行介绍。

(1)串口的接收和发送程序

因为在实验一中已经介绍过串口的使用方法,串口的初始化以及基本的数据收发已经为大家所熟悉,所以这里不再详细描述,着重关注本实验所增加的基于缓冲区的串口数据收发过程。在本实验中,串口1的发送和接收过程都使用了缓冲区,即首先把要发送的数据保存到缓冲区中,如果单片机的串口空闲,数据就会直接被发送出去;如果串口正在发送或者接收数据,则数据被保存在缓冲区中,待串口空闲时再将其发送出去。这里串口1的发送和接收都是用中断实现的。

串口1的发送程序首先把要发送的数据保存到缓冲区,然后打开串口中断(即使能UDRIE)。此时由于没有数据发送,中断处理程序会立即被执行,其判断缓冲区中是否有数据。如果有,就把数据发送出去;如果没有,则关闭串口中断(关闭UDRIE使能),等待下一次的数据发送。

978-7-111-34147-5-Chapter03-48.jpg

串口1的中断发送处理函数主要负责数据的发送。当中断使能时,如果没有数据正在发送或者接收,则会发生中断。中断处理函数会把缓冲区中的数据发送出去,如果没有数据,则关闭中断使能。待下次串口1有数据需要发送时,再把中断打开,进行数据发送。

978-7-111-34147-5-Chapter03-49.jpg

串口1的接收程序中首先判断接收缓冲区是否有数据。如果有数据,取出数据;如果没有,则等待。

978-7-111-34147-5-Chapter03-50.jpg

978-7-111-34147-5-Chapter03-51.jpg

单片机接收到数据会发生接收处理中断,触发串口1的中断接收处理函数,把接收到的数据发送到发送缓冲区,并移动发送缓冲区指针

978-7-111-34147-5-Chapter03-52.jpg

(2)C328串口摄像模块的控制程序

C328串口摄像模块支持标准串口输出JPEG图像数据。该模块有4个引脚:GND、RX、TX、VDD,其中TX和RX引脚分别与单片机U5串口1的RX和TX引脚相连,其他两个引脚分别接地和电源。单片机U5通过串口1向C328发送命令,C328收到命令后,给单片机发送应答(ACK)。

单片机控制C328,通常需要用到如下几个命令。

1)同步命令。在使用C328之前,需要给C328发送同步命令。该命令调节单片机串口与C328串口的波特率,并唤醒C328。当发送命令时,需要多次发送唤醒命令,且发送命令之间要有一定的时间间隔,直到C328发送应答信号给单片机,则C328被唤醒,完成同步。相关的程序如下:

978-7-111-34147-5-Chapter03-53.jpg

978-7-111-34147-5-Chapter03-54.jpg

2)初始化命令。单片机发送初始化命令给C328,设置C328照相色彩类型、预览方式,发完命令后还要等待C328的应答。

978-7-111-34147-5-Chapter03-55.jpg

下文中设置数据包大小的命令和发送照相命令这两个命令的实现过程与初始化命令类似,只是构建命令的参数不同。这里只给出构建发送命令的语句,具体请参考实验代码。(www.xing528.com)

3)设置数据包大小命令。此命令用来设置数据包的大小,当C328给单片机传送相片数据时,必须按这个大小进行传送。

978-7-111-34147-5-Chapter03-56.jpg

4)发送照相操作命令。单片机给C328发送照相命令,C328执行照相操作,把相片数据放到缓冲区中。

978-7-111-34147-5-Chapter03-57.jpg

5)发送获取已照相片数据大小命令。发送此命令给C328,C328会返回在其缓冲区的相片数据的大小,单片机通过这个命令来确定相片数据的大小。

978-7-111-34147-5-Chapter03-58.jpg

6)获得相片数据命令。C328收到单片机发送的这个命令,会把缓冲区的相片数据发送给单片机,然后单片机通过串口0把数据发送给单片机U4。

978-7-111-34147-5-Chapter03-59.jpg

978-7-111-34147-5-Chapter03-60.jpg

在上一个命令中,包含了单片机把获得的数据通过其他串口发送出去的函数waitForData。这个函数从C328获得数据,然后通过串口0发送给与单片机U4的串口1相连的串口扩展芯片GM8123上去。

978-7-111-34147-5-Chapter03-61.jpg

978-7-111-34147-5-Chapter03-62.jpg

(3)单片机U4和U5的双机通信程序

单片机U5的串口0与单片机U4的串口扩展芯片GM8123的扩展口3相连,所以如果U5要给U4发送数据,需要让串口扩展芯片GM8123工作在串口3的单模式下。这样,U4可以从GM8123收到数据,然后通过单片机U4的串口0发送到PC上,通过串口调试助手就可以得到相关的数据。

GM8123的初始化程序是让GM8123工作在单通道模式下。单片机通过这个扩展串口接收来自单片机U5发送过来的数据。

978-7-111-34147-5-Chapter03-63.jpg

单片机U4的串口扩展芯片工作在单通道的工作方式下,等待单片机U5给其发送数据,相关的代码如下:

978-7-111-34147-5-Chapter03-64.jpg

单片机U5初始化C328,并且给C328发送相关命令,C328执行完照相命令后,把数据发送给单片机U5,然后U5把相片数据发送串口扩展芯片GM8123,相关的代码如下:

978-7-111-34147-5-Chapter03-65.jpg

978-7-111-34147-5-Chapter03-66.jpg

4.实验内容

阅读C328串口摄像模块的文档,掌握如何编写其相关驱动,并通过单片机控制C328照相,以得到相片的数据。

掌握ATmega128用中断实现串口通信的过程,阅读串口扩展芯片GM8123的数据手册,参照原理图,实现单片机双机通信。

5.实验步骤

1)建立两个文件夹,一个是U4,一个是U5,使用WinAVR分别写相关的代码,并编译得到.hex文件。

2)使用AVR Studio分别将.hex文件下载到单片机U4和U5上。

3)将单片机U4串口与PC相连,打开串口调试助手,波特率为9600bit/s,校验位NONE,数据位8位,停止位1位,且用十六进制显示。再按单片机的复位键,过5s,就可以在串口调试助手上收到数据,把这个数据保存起来,命名为src.txt,最后运行convert.exe就可以得到src.jpg图像文件。

6.思考题

1)本程序中,单片机U5串口1使用中断方式接收数据,可否使用查询方式?程序如何实现?

2)如何编写从串口读取图像数据并直接显示JPG文件的上位机软件。

7.补充阅读

[1]徐勇军,安竹林,等.无线传感器网络实验教程[M].北京:北京理工大学出版社,2007.

[2]ATmega128/LDatasheet.http://www.atmel.com/.Atmel,2010.

[3]C328Datasheet.http://www.sparkfun.com/.2009.

[4]GM8123Datasheet.http://www.sia.cn/.2004.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈