00:12
这个呢,是咱们上午讲的这个代码啊,然后呢,咱们上午呢,给大家去写了一个仿真。嗯,然后呢,看一下波形。你好。咱们大家呢,都把这个波形打开啊,先把这个波形打开。
01:18
打开这个波形之后啊,打开波形之后,在上上面这个快捷键里面,大家可以看到有一个run澳的一个选项啊,Run澳的这个快捷键。啊,我们点击一下这个run奥。啊,点击一下这个run,然后呢,它会运行到什么位置呢?运行到这个stop的位置,啊运行到stop的位置,这个stop呢,是咱们仿真运行结束的一个位置。然后咱们回到波形啊,再全局,然后呢,就能看到这样的一段波形啊,这样的一段波形,然后这样的一段波形呢,呃,对于我们来说呢,还是不够啊,还是不够。
02:02
因为这个到目前为止呢,还没有看到这个RGB的一个颜色数据,所以呢,呃,接下来呢,我们继续往下运行啊,继续点这个run奥啊,继续点这个run奥。我们让它继续往下运行,运行到这个出现数据为止。好,现在的话大家应该都能看到这个数据出现了啊,那么呃,现在的话,我们呢,让这个波形呢,再运行一会儿啊,等这个数据呢,完全变为0之后啊,说明呢,我们的一幅图片就已经结束了。啊,我们继续让它运行。
03:50
嗯,大家的话也可以这个,呃,这个继续往下运行啊,然后波形呢,一直运行到这个图片结束啊,一副一副图片整个结束啊。
04:03
咱们一起呢,看一下你们的波形跟我的是否一样。
05:05
因为咱们这个一幅图片这个运行完的话,它这个所需要的时间还是比较长的啊嗯,大概的话一幅图片需要16ms多啊,大概是这个样子。啊,我们继续往后等啊。大家看一下你们的,你们的这个波形能不能运行出来啊,是不是跟我一样的,如果一样的话打个1啊,不一样的话,呃,你们可以截个图,让我看一下你们的波形是什么样的。
06:06
嗯,没波形的话,嗯,看一下你你这个截个图,让我看一下是什么什么情况。是是这个吗。嗯。这个的话,你是这个没有继续往下运行啊,你点上面有一个run奥这个选项,你点一下这个三角三角符号啊,点一下就行了。啊,这个。嗯,陈思佳的话也是一样的啊,也是一样的问题。好,然后出现这个这个地方出现一段零的时候,咱们就可以停了啊,然后嗯,李成浩这个同学呢,已经这个做的很好,它已经有好几段好几段这个零了,这说明已经已经扫描了好几副图片了啊,这个这个更好了啊,这个时间大家可以看到这个时间的话,已经90ms还要多了啊这个。
07:08
这个肯定是没问题的啊,这个不行,肯定没问题。嗯,点了之后的话,你点一下这个,点一下这个符号,这个符号的话是点是看全全全部的波形啊点一下。嗯,这个波形的话也是没有运行啊,也是没有运行。嗯,继续点这个。
08:00
点这个run奥啊,让它继续往下运行就可以了。啊,大家看一下你们的波形有没有运行到这样的一个位置啊,大概运行到16.8ms左右啊,基本上就可以了啊,只要这个刻度时间刻度到这个到这个时间位置就可以了啊。
09:39
啊,如果这个运行到这个时间刻度位置的同学啊,打个1啊。
10:14
嗯,50多毫秒,那时间只要大于这个时间就行啊,只要大于大于这个时间肯定是可以的。嗯,这个没问题啊,90多毫秒没问题啊。
11:00
嗯,没00是吗。呃,没00的话,呃,可能是原因呢,你把你的黄这个黄色的光标放到这个位置啊,放到这个位置点一下啊,放到这个位置之后,然后呢,你点这个放大镜啊,点这个放大镜一放大,它应该就有了。
12:33
好,那如果大家都有这样的波形的话,呃,那么咱们接下来的话,大家就在这样的一段波形当中随便找个位置啊,然后呢,给它放大啊给它放大。啊,给它展开啊,把这样的波形给它放的稍微大一些啊,啊能够看到里面的数据。
13:56
好,我们放大之后呢,我们呢,把这个数据呢,给它改一下啊,给它改成二进制,改成二进制的话,咱们方便观察,因为咱们在赋值的时候给的就是二进制啊,我们选中这个信号啊右键呃,在这个选项里面有一个二进制这个选项啊,咱们选择这个。
14:27
咱们选择这个二进制啊。点一下这个二进制,点完之后呢,大家可以看到咱们这个数据呢,呃,就变成了什么呢,就变成了111啊后面是5个0,那这个呢,说明是什么呢?说明咱们给的这个颜色,这个红色啊,就已经复制出去了啊,就已经给出去了。那么这个给出去呢,大家会发现这个,呃上面有一个HS这个波形,HS这个波形呢,呃跟这个数据它是有对应关系的啊,我们来看一下,呃在一开始的时候,计数器呢,是在呃这个A段。
15:04
咱们来放大呀啊,从这个位置开始是在A段啊,然后到这个位置结束,都是A段啊,整个都是A段,然后呢,从这个位置结束,呃,到这个位置。啊,从这个位置到这个位置,这之间呢,是咱们的B段啊,然后呢,咱们往后这个这个数据维持到这个这一段呢,都是咱们的C段啊,都是咱们的C段,然后呢,从C段到这个位置,这是咱们的D段啊,这是咱们的D段,这是咱们这个上午给大家讲了这个时区里面的ABCD四个段啊ABCD四个段。嗯,不管不管是哪一截数据,它对应的关系呢,都是这样的啊,都是这样的,然后呢,当一幅图片扫描完之后,大家可以看到我们的VS的话就会拉低啊,就会拉低,拉低的话,那就呃,这个就代表咱们的第二幅图片就已经出现了啊,第二幅图片就已经出现了。
16:08
那这个时间,呃,刚才也给大家说了,这个时间的话大概是16ms多一些啊,那这个时间是怎么算的呢?啊,我们一起呢,给大家来算一下。嗯,咱们的像素。啊,咱们的像素是这个一行总共是800个点,一列总共是555 25个点啊,咱们来算一下。嗯,算一下800×525。嗯,乘以525。啊,然后呢,乘以一个使用周期的时间啊,一个使用周期的话是咱们的时钟的话是25兆啊,那么一个周期的话是40ns啊40ns,所以再乘以40啊,等于大家可以看到啊,这应该这个就是16.8ms啊,16.8ms的一个时间。
17:07
啊,就是这么来的啊,就是这么来的,所以呢,咱们一幅图片的时长大概呢,就是16点。啊,就是16.8ms啊,就16.8ms啊,这个时间。大概是这样的。好,这个是咱们的一个仿真,如果说大家能出出来的仿真呢,跟我的一样,那就说明是没有问题了啊,那就说明没有问题了。
18:01
好,那么没问题的话。啊,没问题的话,那咱们这个。嗯,微基呢,就呃先说,呃,这个仿真的话就先说到这儿啊,仿真就先说到这儿。大家看一下有没有这个波形跟我的不一样的。
19:07
嗯。你这个波形一直是0。啊,一直是零。那这样的话就有问题了啊,这样的话就有问题了,那你把这个。把代码的这一部分啊,这两行给我截个图,让我看一下。
20:51
嗯,这个代码看着是没啥问题的啊。看着没问题的。嗯,那你把工程给我发一下吧。
22:49
嗯,这个的话是。这个VE啊,这个位置的话是VE。
23:00
首先首先这个位置是有问题的。
24:16
改完之后咱们再来看一下啊,大概的看一下有没有数据啊。呃。这位同学说这个点完之后。呃,点完之后没有波形,没有波形。呃,没有波形的话,呃,是因为你这个复位是一直为低电平啊,你也就是说你的波形是一直处于复位的啊,一直处于复位的,在你的仿真里面,你看一下你这个这句话是不是没写。
25:48
嗯,在这的话可以看到这个看到V,呃,从来就没有计数啊,一直的话就没有计数。看一下这个原因啊。
26:07
嗯,这个位置的话应该是小于啊,应该是小于。然后咱们继续往后看啊。
27:01
啊,现在的话就有数据了啊,现在的话就有数据了啊,原因的话,呃,也找到了啊,找到了就是这个地方。这个是小于VE啊,小于VE就这一个地方错了。
28:00
看一下还有没有其他问题了。嗯。都是X。
29:21
呃,你这个,呃,赵中国这个问题的话,呃,应该的话跟刚才那个同学是一样的啊,应该跟刚才那个同学是一样的。呃,你先这个点一下这个。这个这个按钮,先点一下这个按钮,看一下有没有数据,如果没有数据的话,应该可能是一样的问题啊,可能也是计数器出错了。
30:01
这个看不太清啊。为,为啥?都是X,也没有竖线。这啥意思呀?嗯,没数据的话,把你的工程也给我发一下,让我看一下。啊,你们两位同学这个把这个代码都给我发一下啊。
31:38
这个。6。你1。不是,是其他人,其他人。
32:07
我。
34:41
嗯,这个HS和VS一直都没变啊,那这样的话应该是这个计数器有问题啊,计数器有问题咱们来先看一下啊。什么是仿真呢?
35:45
啊,这个地方也是写错了啊,这个地方应该是小于啊,这个地方应该是小于。当它小于最大值的时候才能加1啊。这个等于的时候就应该清零了啊,这个这个逻辑写的有问题。
36:06
嗯,下面的话应该就没问题了啊,就这一个地方。啊,这个是。这个是赵振国的啊,这个是赵振国的同学,赵振国同学的。然后改完之后再来看一下。
37:02
啊,在这个地方呢,出现了数据啊,就应该没问题了。它能出现数据就说明是正确的。啊,没什么问题,这个是赵正国同学的。然后。另外一个啊,咱们一起来看一下。
38:55
这个这个是没问题的啊,这个也是可以出现波形的。
39:00
这个是对的啊。这位同学发的这个代码啊,没什么问题啊。好,那接下来的话,呃,咱们呢。讲一下下一个内容。
40:36
这个危机的一个驱动原理呢,大概就是这个样子啊,大概就是这个样子,然后呢,接下来咱们说一下咱们的摄像头。
41:01
嗯,然后首先的话,我先把这个摄像头的这个我这个芯片手册啊给大家发一下。嗯,我给大家呢,发到这个群里。大家把这个文档呢,可以呃下到你们的电脑上,然后的话这样的话看着比较方便一些。
42:46
嗯。
43:06
好,我们打开这个手册之后啊,我们来看一下这个手册内容啊呃,首先的话,咱们这个手册的话,它是可以输出一个640×480格式的一个危机数据啊,它是可以输出这样的一个分辨率,咱们上午的话,刚好做的这个分辨率呢,就是这个分辨率,到时候呢,咱们的摄像头进行显示的时候,正好可以匹配的上啊。然后往下。啊,咱们往下看。呃。这个摄像头的话,它可以提供这个巴比特的一个图像数据。啊,多项数据。它使用的控制是通过串行的摄像头控制总线SAB协议。啊,用的是这款协议,然后进行控制的。
44:02
这个协议的话,嗯,也比较简单啊,也比较简单,呃,这个如果说大家这个之前了解过IC协议的话。啊,就应该没什么问题,因为这个SDB协议呢,跟咱们的C协议呢,是基本上是一样的,啊,基本上是一样的。所以呢,咱们在这就这个。咱们稍后再说这个SAP协议,咱们先把这个手册啊,先给他看完啊,看完之后再来看手册。来看这个时序的手册啊。往下啊说这个它可以提供呢一个图像,这个图像呢,大概是每秒30帧的一个图像。啊,每秒30帧的一个图像。呃,那么这个呢,也就是说咱们摄像头去拍摄图片的一个帧率啊,去拍拍摄这个摄图片的一个帧率,就是说一秒钟可以拍30张图片啊,大概是这样的一个速度。
45:11
然后呢,我们来看一下这个,呃,这个其他的一些数据啊,其他一些数据啊,主要的话,我们来看一下这个输出的格式啊,输出的图像格式,这个格式的话,大家可以发现它输出的格式呢,不止一种啊,不止一种。但是而且呢,它输出的数据呢,是一个完整的一个巴比特啊,完整的一个巴比特数据,那么它输出的输出的这个图像格式,呃,有这个YCRCB4:2:2。啊,这样的一种格式,还有一种呢,是RGB56555444啊也是可以的,或者是GRB422也是可以的,或者是这个这个。
46:01
呃。这个RGB数据啊等等这4种模式都是可以进行输出的啊,都是可以进行输出的。那么咱们要用的,呃,用的模式呢,就是这种就是RGB这个,呃,这个565的格式啊,咱上午的话给大家去讲了332的,那么咱们把332的这个格式啊,一旦一扩充,那么它就会变成565的啊,就可以适用于565的。啊,这个如果说大家想用这个五五或者四四的话,也是可以的啊,也是可以的,只不过呢,需要再配置摄像头的时候,需要给它配置成特定的模式啊,配置成特定模式,呃,这个在做的时候,一般这个习惯上大家都用565啊,因为这个模式的话,呃,这个数据采集比较简单一些啊。比较简单一些。啊,帧率啊30帧。
47:00
啊,帧率是30帧,这个呢,大概是咱们摄像头的一个参数啊,至于其他的内容啊,这些内容的话就不再看了啊,因为这个比较涉及的东西呢,比较专业一些啊,咱就不再看了。然后呢,下边这个这个图呢,是咱们摄像头的一个芯片的一个图示啊,摄像头芯片的一个图示。呃,这个是这款芯片的所有端口啊,所有管角啊都在这里面啊,但是呢,它这个管角的话是没有完全都给拉出来的啊,因为它的摄像头呢,是比较小的那种摄像头啊,比较小的那种摄像头。呃,在这儿的话,可以给大家呢,大概的看一看啊,咱们摄像头的一个。样子。
48:19
啊,在这的话给大家看一下啊,这个的话是咱们的啊,这个摄像头啊,这是咱们的摄像头,这个摄像头的话是比较小,小小巧一点啊,比较小啊,前面呢,有一个镜头是可以进行旋转的啊,这个旋转的话就可以去调焦啊,自动去调焦啊,这是咱们的这个摄像头啊,这个摄像头外边的话是一个镜头,镜头你把它拆下来之后,里边就是这款,呃,这个摄像头芯片啊,就是这款芯片。啊,在这儿的话,我就不再去拆了啊,不再去拆了。然后看一下这个摄像头的背面,背面的话它是呃,两排总共是18个插针。
49:07
啊,两排总共18个插针,这是咱们的一个摄像头的所有管角啊,咱们摄像头的所有管角大概呢,就是这样的一个一个样子,啊,大概就是这样的一个样子,呃,当我们去用的话,把这个插针。把这个插针直接插到我们的开发板的这个插针上就可以了啊,就可以直接去用了啊。这个是咱们的这个摄像头比较简单一些啊,比较简单。好,咱们就先看到这儿啊,先看到这儿,然后的话。啊,然后的话,嗯,在这儿的话,我们还需要呢,给大家去说一下这个管角的问题啊,管角的问题,因为刚才给大家看的话,这个摄像头它是一个,呃,18个管角的啊,18管角的,但是在这儿的话,大家可以看到这个管角呢,不止是18个啊,不止18个啊,那为什么这个管角数不一样呢。
50:05
啊,那我们接着往下看啊,来给大家去介绍一下,每个管角都是什么样的含义,都是干什么用的啊,以及给大家去介绍一下。嗯,在介绍之前呢,我们先来看一下这个摄像头的一个内部的一个逻辑啊逻辑图示,嗯,大家可以看到这边呢,是一个。嗯,是一个图像阵列,这个图像阵列呢,是656×488的一个图像阵列,嗯,这个图像阵列采集到之后,这个摄像头呢,会自动的裁出来一个640×480大小的一张图片,然后呢把它转换成,大家可以看到这个地方有一个ad,对吧?有一个ad就是把模拟信号转成数字信号,然后呢将它转换成数字信号,这边呢有一个DSP,这个呢是咱们的数字信号处理。啊,处理完之后给到咱们的F缓存,然后呢,最终通过这个端口输出给输出给到咱们的ipga啊是这样的一个过程啊,这样的一个过程,那么这个摄像头的控制管角,大家可以看到有下面的叉CLK,呃,Stra,然后还有一个h ref p c l kvs c,还有reet,还有咱们power down啊,包括咱们的呃,SLC和SLD啊等等这些管角,那这些管角都是什么含义,以及都是干什么用的,咱们来往下看啊,往下看。
51:38
这张表格的话,是咱们这个摄像头管角的一个解释啊,给大家去解释了每个管角它的一个端口方向,以及它的作用描述啊,在这个地方呢,都有啊都有咱们来看一下,首先的话,第一个管角是AV。啊,AVDD这个管角的话,大家可以看到它是呃power啊,就是咱们电源啊,大家都知道VDD啊。
52:07
基本上都是电源啊,都是代表电源的。然后这边SLD和SLC这两个的话是咱们的呃SCB的一个接口,呃SCB的一个接口,呃s ABB的一个串行数据IO,那说明这个这个端口它是一个双向的一条数据线啊,是一条双向的数据线,什么叫双向的话,呃咱们呃今天的话给大家去讲了输入端口和输出端口。啊,那这个双向是怎么回事呢?双向是可以做输入也可以做输出的一种端口啊,这是第三种端口类型。这个数据线是可以做输入,可以做输出的,然后呢,还有一个SAB的一个串行的时钟输入啊,对于摄像头来说,它是输入信号啊,是输入信号,那这样的话,对于我们ipg来说,这个信号需要我们生成之后给到摄像头啊,我们生成之后给到摄像头。
53:08
啊,端口方向是这个样子的,然后接下来是D1 D1的话是咱们RGB数据的一个输出比特一啊,咱们的数据的话总共是巴比特,那么这个管角的话,它输出的是呃,比特一这一比特数啊,然后还有第三啊是比特三。然后这下边的话有一个power down啊,Power down是什么呢?是掉电啊掉电模式,掉电模式的话有这个有两种,一种呢是正常模式,另一种呢是掉电模式,那我们再去使用的话啊,我们就使用正常模式就可以了啊,使用正常模式就行了,所以呢,我们待会儿再配置这个管角的时候啊,直接给他一个0就OK了。啊,直接给他一个0就OK了啊,别的都不需要啊,直接给个0。然后再往下就是v ref2,这个v ref的话啊,大家都知道v ref它是一个参考电压啊,它是一个参考电压。
54:10
啊。这个地方都给大家写着,它是一个参考电压。那么参考电压呢,后边有一个描述,它说呢,连接了一个0.1谬法的一个电容,啊连连到哪去了,连到了地上啊,连到了地。连到这个D啊。那这个什么意思呢?就是嗯嗯,就是这个电源的话,一般会连一个电容,然后呢,起到一个保护电源的一个。作用。啊,这样的话可以使咱们的电源更加稳定啊,就是这样一个作用啊,然后下边A基地,呃,基地的话,大家都知道它是个D线啊D线。然后接下来D0是比特0 D2比特2啊,这个就不再说了。
55:04
咱们的数据线总共是巴比特,巴比特的话是8根线,分别对应这个咱们的D0到D7啊。然后DVDD啊,是一个电源啊,V ref,参考电压啊,VSYC,这个信号大家应该都比较熟啊,都比较熟,为什么比较比较熟呢?因为咱们上午刚做完VGAV里面就有这个信号,这个信号呢,咱们在VGA里面叫做VGA的VS啊,叫V机的VS,就是这个型号。啊,就是这个信号。然后h ref,这个h ref的话,大家就可以把它理解为是咱们的V机的HS啊,对应的是V机的HS。这个型号是对应的啊,然后PCLK是pixel clock啊,这个是像素始钟啊,像素时钟,像咱们上午去做这个分辨率的时候。
56:04
咱们的像素时钟呢,给的是呃,25兆啊,给的是25兆,这个25兆就是咱们的像素时钟啊,就是咱们像素时钟。然后接着往下有个stray啊,这个呢,是咱们的led的一个控制输出啊,这个led啊,你说老师这个摄像头上怎么会有led呢?其实这个led是什么呢?就是咱们的闪光灯啊,就是咱们闪光灯,它就是去控制闪光灯的一个端口,但是呢,像刚才我给大家去看的那个模块。啊,给大家去看那个模,看那个摄像头模块,那个小模块里面呢,根本就没有这个闪光灯这个东西,所以呢,这个信号,呃,一般的话,我们也是不用管它的啊,不用管它的。所以这个信号呢,在摄像头,呃,在摄像头那个拈上,大家会看到根本就呃没有这条线啊,就没有这根线,呃,人家呢,就在做的时候,就没有把这根线呢给它拉出来。
57:06
啊,是这样的一种模式,然后叉CLK,这个是系统的时钟输入,这是给到摄像头的啊,让摄像头去工作的一个时钟啊,然后第7是比特7,第5是比特5。然后do VD,这个VD的话还是一个电源啊,还是一个电源,然后的话还有一个reset,这个reset的话是一个复位,它的作用啊,在这的话有给大家有去描述啊,说清除所有的寄存器,并且呃,Reset就重置他们。嗯,为它们默认的值啊,就是这样的一个作用啊,就是这样的一个作用,就是让所有的寄存器呢,恢复默认的值啊,然后0是0是这个复位模式1的话是正常模式啊。是这样的一个作用啊,然后基因DD啊,第6是比特6,第4是比特4啊,这是我们所有的一个端口啊,所有端口那到目前为止都给大家呢,已经介绍完了啊,已经介绍完了,那介绍完了之后。
58:09
回过头我们再来捋一捋啊,再来捋一捋,可能大家听完一遍之后,这个可能记不太清。啊,记不太清,咱们对应这个图,然后给大家去解释一下,嗯,这个地方呢,有一个叉CLK,叉CLK呢,是给到摄像头,让摄像头去工作的一个时钟啊,就是说你摄像头呢,想要去工作,想要去采采这个图像,它得有一个始终去供供应它去工作,那这个始终是谁呢?就是咱们这个叉CLK。啊,用的就是这个叉CK,然后这个stray是是闪光灯咱们没有用,所以这个端口呢,咱们不用管,大家就相当于呃,大家就认为它没有这个端口就可以了。然后h ref是咱们的VGA的HS啊,VSYC是VGA的VS,然后PCLK是像素适中啊,这个就是咱们为了咱们的相当于是摄像给咱们的VGA去准备的啊,VGA准备的。
59:10
为什么要输出这样的一个信号呢?这样的一些信号呢,嗯,是为了咱们后续去采数比较方便。啊,去采数比较方便啊,你说老师为什么不把这个数据直接给到魏金呢啊。很很简单一个原因啊,就是它两者速度不一样,这个PCLK可不是25兆啊,可不是25兆啊,为什么这么说呢?大家都知道,呃,咱们的一幅图片大概的时长是,呃,20,呃10 16.8ms啊,16.8ms,那咱们呢,一起来算一算这个。我拿着1000除以十六十六,大家可以算出来是等于62,当然这个误差比较大,我再精确的稍微精确的算一下,除以16.8ms,等于大家可以看得出来结果是59.5啊,就大概呢,就是一秒钟是可以输出60帧的啊,是可以输出60帧的,所以呢,咱们。
60:22
嗯,咱们的V。微机的正常帧率是60帧。啊,是60帧。嗯,啊,如果这个。有喜欢这个打游戏的同学啊,应该会经常会看到这样的一个东西,就是呃,有一个参数叫FPS。呃,叫做FPS,这个FPS呢是什么呢?这个FPS呢,就是一个图像帧率啊,图像帧率,这个帧率越高,你的图像呢就越,呃流畅啊越流畅,如果说你的帧率小于了60帧,呃说明咱们的微机呢,在显示的时候可能就掉帧了,掉帧的时候你的画面呢,就会出现卡顿的情况啊,就会出现卡顿的情况。
61:10
所以呢,这个FPS的这个参数越大,你的图像越流畅啊,是这样一个关系,那咱们的晰机上午做的晰机呢,是60帧,这个地方摄像头提供的帧率呢是30帧,所以呢,它俩的速度呢,是不匹配的啊,不匹配的就是因为它这个始终呢啊始终呢不是咱们的像素时钟。啊,不是咱们做危机的一个驱动的时候的那个像素之中。啊,这两者还是不太一样的啊,不太一样,所以呢,呃,大家再去采到这个数据的时候,这个数据是不能直接去给到危机的。啊,这一点大家要注意啊。然后这个地方有个reset reset的话是为了初始化咱们的这个寄存器的啊,就是给到这儿的啊,给到初始他的,那初始化之后呢,咱们需要去通过这两个串行接口,这两个呢,是咱们SAB的一个串行接口,通过这两个接口呢,去给这些寄存器呢,做一下配置,就是让它配置成我们想要的一种功能啊,想要的一种功能。
62:18
然后还有一个泡泡档啊,这是咱们的所有端口,这边呢,还有一个数据的输出啊,就摄像头的话,总共就这么多端口啊,总共就这么端口。那接下来的话,呃,给大家去看一看这个到底这个寄存器咋配置,或者说配置,配置有什么含义。
63:11
这个表格啊,是咱们的寄存器的一个配置配置页面啊,大家会看到这个寄存器配置呢,非常的多啊,大家会看到往下翻这个寄存器非常非常的多啊,它这个每一个寄存器都有特定的一个功能啊,都有特定的功能。在这的话啊,我们来简单的看一看啊。嗯。我们就以这个简单的寄存器来说,比如说这个01这个寄存器啊,D为01的这个寄存器,它呢是一个蓝色的一个补偿啊,蓝色补偿说蓝色通道啊,增强设置啊,这个就是为了这个蓝蓝光补偿的啊,蓝光补偿还有一个红光补偿啊等等。
64:04
呃,这是一些作用。嗯,可能这些东西。对于我们来说,这个比较专业啊,涉及到的东西比较专业一些,所以呢,我们就呃,不再这个一个一个的去研究了啊,就不再一个一个去研究了,呃,这个我们呢,可以从网上呃找到这个配置的一个顺序,以及这个配置的一个呃数据。我们是可以找到这样的文件的啊,那么接下来呢,我把这个文件呢,就直接发给大家啊,就直接给大家,呃,因为这里面涉及的东西呃,太专业啊,我们就不再去研究了啊,不再去研究了,我们就直接给大家去用就行了。我把这个。
65:00
我把这个代码啊给大家发到群里。啊,我把这个代码发到群里啊,大家可以打开看一下啊,大概看一下,大概呢,就是这样的一个模式,然后呢,它前面的寄存器呢,大家会看到,呃,给大家的话都有这个注释啊,都是说干什么用的对吧,怎样去配置这个地方都说明的有,但是后边的话都没再说明了啊,都没再说明了啊这个的话咱也就不再去研究了啊,不再去研究了。大家都知道啊,咱们直接去用这个文件直接去配置就可以实现咱们摄像头的一个驱动啊就可以了。好,这是这个代码啊。大家把这个代码呢,先保存一下啊,待会儿的话我们可能要用啊,待会儿我们后边写代码的时候要用了。
66:11
好,那这个寄存器,呃,说完之后呢,我们回过头啊,回过头,那么配置完之后,我们来看一下这个参数啊,我们来看一下这个参数。这个SAB协议啊,有一些参数呢,需要我们去关注一下。首先第一个这个时钟的频率,时钟的频率呢,是在呃,最大的话啊,这个应该是最大值啊,这个max啊应该最大值,最大值最大频率是400K赫兹啊,是400K赫兹,也就是说咱们的这个SAB的串行时钟的频率。呃,最大是400K啊,最大是400K,不能超过这个频率啊,你可以比它小,但是不能超过。然后,嗯。往下啊,然后往下。
67:02
嗯,我们可以看到。呃,这样的一个参数啊。啊,这样的一个参数就是这个ts reset啊TSS这个是干什么呢?是设置时间在软硬件复位之后。啊,软硬件复位之后要这个,呃,这个需要呢,1ms的时间啊,这个这个时间的话最大是1ms,但是这个1ms的话就是有一个疑问啊,有一个疑问就是我们不知道它是。呃,复位有效的时长,还是复位之后有效的时长,这个呢,我们这个它里面呢,是没有说明的啊,没有说明的,那既然没有说明,那么我们呢,就也不需要去。这个特别研究了啊,我们怎么办呢?我们呢,让复位有效时间为1ms,然后呢,复位结束之后再维持1ms,这样的话,不管它是什么样的,我们都是可以满足的啊,都是可以满足的,所以做的时候,我们先让ET这个波形呢,先拉低一毫秒,然后再拉高一毫秒,是这样的一个过程。
68:13
然后接着往下有一个寄存器改变的一个设置时间,这个时间呢是最大是300ms啊,最大是300ms,那也就是说我们想要去我们去设置这个寄存器啊,给它设置完成之后,我们需要呢,等待300ms左右的时间,然后呢,就可以去正常的去接收数据了啊这是这样的一个时间,那么呃,有了这个说明之后呢,呃,给大家呢去。捋一捋咱们的这个。呃,过程啊,捋一捋咱们这个。嗯,这个整个的一个配置过程啊。
69:03
嗯,我给大家做一个文档吧。摄像头设计报告。咱们呢,接下来呢,给大家去做一个设计报告啊。摄像头设计报告。给大家去做这个设计报告的主要目的是为了大家呢,去方便去理解咱们摄像头的一个驱动啊。
70:10
啊,首先啊第一点。啊,第一点就是咱们的一个配置的一个驱动的一个顺序。驱动流程。就是咱们按照什么样的顺序能够这个正常的使用这个摄像头啊,首先第一点啊,首先第1点提供是系统时钟。提供。系统时钟啊,XCLK啊,这个时钟是多少呢。在咱们的文档里面是有说明的啊,咱们来看一下。啊,在这儿啊,这个是输入的这个时钟频率,这个时钟频率呃,最小10兆啊,最大48兆,正常模式是给了24兆啊,正常的情况下是给了24兆,所以呢,这个叉CLK,嗯,为。
71:12
多少呢?24MHz啊,24MHz就是给出来这样的一个时钟啊,给出来这样一个时钟,然后呢,同时同时还要干什么呢。设置成power down模式。啊,Power down模式。啊设置,把这个down模式呢,设置为正常模式。啊,为正常模式,这是咱们的第一步。然后第二步。啊,第二步干什么呢?第二步的话就需要去配置我们的这个摄像头寄存器,那配置摄像头之前呢,我们需要做一个操作,就是要先复位,让所有的寄存器呢,恢复初值啊所以呢,这个地方呢。
72:07
就是嗯,设置reset。啊,设置reset这个信号啊,这个信号呢,怎么去设置呢,就是先拉低1ms时间,然后再拉高1ms。啊,再拉高1ms的时间。啊,这样去设置的话,就是为了方便咱们的这个配置啊,方便咱们的配置,因为在这个手册里面,呃,给的给出来了啊,人家都说了这个时间呢,是1ms啊一毫秒,呃,如果说呃,人家说这个最大,这个设置的时间最大是需要1ms,如果说大家觉得这个时间比较极限啊,怎么办呢?你可以给它大一些啊,给它大一些设置成2ms也是可以的啊,也是可以的。就好比说啊,就好比说你在等公交车的时候,说这辆公交车呃,到你这个站最多需要半个小时啊,那如果说你在这儿等一个小时,那肯定能够等到这个公交车啊,就是这样的一个意思啊,这样一个意思。
73:16
就是说他设置最多需要1ms,那你要是给2ms的话,肯定能够设置完啊,他肯定能够配置完了啊,就是这样的一个时间啊。然后第3点设置完复位之后,接下来呢,就是咱们的一个配置过程了啊,就是寄存器配置。啊,计算机配置,计算机配置的时候要通过SCCB协议啊,通过SCB一个协议去进行配置,这是咱们的第三步,然后第4步,呃第4步要干什么呢?配置完成之后呢,咱们有这样的一个说法,就是咱们呢需要去呃等待一个。时间,这个时间呢,是为了这个等待这个就是为了就是配置完了让等他,等待他一会儿,然后让他。
74:06
在这个模式下去进行工作,所以呢,这个呢,我们叫做等待时针。啊,等待时针啊,或者是说是等待300ms。啊,都是可以的,啊都是可以的。啊,这个人家说的这个时间呢,是一个呃,理论的一个极限值,那么如果说大家想完全的确保它能够完成啊,咱们在给值的时候,给时间的时候,可以多给一些啊,可以多给一些,这样的话,防止这个出现什么问题,然后最后第5步就是采集图像数据了。啊,采集图像数据了,这就是这样的一个过程啊,这样的一个过程,这就是咱们的整个的一个。呃,设计流程吧,啊,整个的一个设计流程。
75:09
好,那么没啥问题之后啊,没啥问题之后,接下来呢,呃,给大家呢,画一下咱们的框图。简单画一下吧。设计框图啊,给大家去画一个图示啊。呃,给大家画这个图示呢,是为了方便大家呢去理解啊。
76:16
好,接下来的话,我们。给大家画一下咱们的端口啊,画一下咱们的端口。这个端口的话,我们可以这条线呢,可以给它画的粗一点啊,这样的话方便观察。好,那么这个首先的话,呃,我们最主要的一个信号啊,最主要的一个信号。是咱们的这个。始终和复位啊,所以呢,在这儿我先把这个始终和复位给大家去画出来。
77:12
这个内容就是咱们的适中啊,咱们的适中。好,就是这样的一种格式啊。这是咱们的时钟,然后呢,时钟画完之后呢,是咱接下来呢,是咱们的复位啊咱们的复位。
78:05
这两个的话是咱们的一个主要的一个端口啊,主要的一个端口。然后。这两个端口之后啊。这两个端口,呃,咱们呢,画完之后,接下来呢,是咱们摄像头的一些,呃,其他端口,比如说什么呢。咱可以按照咱们的这个,呃,这个图啊,然后呢,给大家来画。啊,按照这个图来画。首先的话有ipg给到,呃,给到咱们这个摄像头的一个叉CLK啊。
79:06
CLK.啊,是这个ipg输入进来的啊是输入进来的。啊,IG输出的啊,这个画反了。这个现在咱们画的是ipg啊,画的是ipg,所以呢是ipg输出的啊。啊,OA7670的一个配置啊。
80:02
然后这个叉CLK之后啊,我们再来看一下啊,是咱们的像这个HREF啊,PCLKLVSYNC啊,这三个信号都是咱们摄像头的输出,对IP来说都是输入啊,所以呢,咱们给它画一下。首先第一个是这个。OV7670的h ref.啊,咱们把这个摄像头的信号呢,给过来的信号呢,都给它加上一个前缀,啊,都加上一个前缀,这样的话方便咱们去。区分啊,后面咱们去区分。
81:03
这是咱们这个信号,然后呢,咱们这个h ref的端口方向啊,需要调整一下,对ipg来说它是输入啊,对IG来说它是输。然后再往下啊,再往下是咱们的这个,呃,VSYC.啊,VSYC,然后的话再往下是咱们的。这个PCK。啊,PCLK这个是咱们的像素时钟。然后这三个端口画完之后呢,还有一个reset和power down,嗯,这两个呢,是IP的输出,是IP的输出。这个是OV。7670的这个。这个这个reset。Reset-n reet-N。
82:08
然后下边这个呢,是。啊,PWDN啊,这是咱们的这两个端口,然后呢,另外呃,另外还有这个。咱们的STB的两个串行接口啊,这两个串行接口呢,也也是输出。啊,也是输出。呃,分别是OA7670SCB的C,嗯,还有OV7670SCB的D。这个SAB的D的话,这个信号呢,它是比较特殊的,它是一个双向的一个端口啊,双向的一个端口。
83:00
然后呃,这个写完之后,还有一个数据啊,还有一个数据。嗯,这个数据的话。啊,这个数据的话。这个数据的话,呃,是一个双向的,然后呢,另外还有咱们摄像头输出出来的一个数据,这个数据呢,是一个巴比特的一个数据,那么我们把这个信号呢,直接给它写出来啊,这个呢是我们这个摄像头的一个数据啊,摄像头的一个数据就是OV7670的一个date,这个数据的话是一个巴比特的一个数据。
84:02
啊,是一个巴比特的一个数据,是这样的一个信号,这个信号的话是一个单向的啊,这个信号是一个单向的,它是一个啊,这个是输入啊,对于IP来说,它应该是输入。啊,对于IP来说,它是输入。然后。然后啊,我们呢,还有一些信号啊,还有一些信号就是除了这个数据之外,我们呢,要把这个巴比特数据组合成16比特数据,然后进行输出啊有同学会可能会比较疑惑啊老师,这个地方为什么要组成16比特的啊,这个呢,是因为咱们的像素数据呢,是一个RGB565的一个格式,那也就是说咱们的一个像素点的数据是16比特啊,一个像素点的数据是16比特。
85:09
然后另外咱们SDRAM的一个输入端口,输入数据端口也是16比特的,那这样的话就正好啊,就正好组成了我们这个,呃,一个像素啊,一个像素数据,那么我们接收到从摄像头接收到这个巴比特数据之后,我们所需要做的工作就是把这个巴比特给它组合成16比特,然后输出给SDM,是这样的一个过程,所以呢,在这儿呢,我们还需要有两个信号,两个输出信号。分别是咱们的。Captured.玻的信号啊,这个信号是什么呢?就是咱们采数据的话,如果说你踩到了这个,呃,这个对应的数据,那么组成16比特之后。
86:08
呃,每组成一个,然后输出一次啊,是这样的一个过程。这个呢也可以大家就可以理解为是咱们的一个芯片的一个斜视能啊,芯片的一个斜视能,就是咱们要把这个数据呢,写到这个,呃,存储器里面,那什么时候写呢?就是要看这个信号,这个信号每组成一个16比特就拉高一次啊,是这样的一个信号,然后的话,接下来还有一个capture,嗯,Date这个数据的话,是一个16比特的一个数据啊,16比特数据。啊,是这样的一条数据。这个整个的话就是咱们的一个,呃,这个。
87:01
算是咱们的一个框架吧,啊大概就是这个样子。这个在画的时候,这个。可能这个。嗯。画的不太标准啊,大家这个见谅一下啊。啊,我们给它做一下纵向分布啊,做一下纵纵向分布之后呢,我们这个每条线之间的间距是一样的。
88:13
这样的话看起来更标准一些。好,这样的话,我们这个图式呢,就做好了啊,就做好了。这是我们的一个。整体的一个框架啊,整体的一个框架。
89:03
好,那么。没问题之后啊,这个框架做完之后呢,嗯,我们呢,再回过头啊,再来捋一捋,再捋一捋。呃,刚才呢,给大家去看的这个端口里面。给大家看看这个端口里面,呃是这样的一个过程,就是呃,总共呢是有。是有这么多啊,这么多呃,但是这么多端口里面,它大部分呢,是有这个电源和D的。是有电源和地的。那么电源和D呢,呃,就是有一点就是在咱们的这个摄像头的那个电路板上,呃,它直接设计的时候就可以直接,呃,通过这个电路板上的连线,把这些信号呢,都给它接到一块儿,那就是说不需要我们单独的通过插针去提供了。
90:05
啊,那么呃,我们呢,嗯。既然这些端口不需要了,那么我们需要管的一些端口都有谁呢?就是我们在图上给大家去画的这些端口,那么这些端口我们来数一数啊,呃,从第一个这是一个2个,3个,4个,5个,6个,7个,8个。啊,8个,然后加这个8个是16个,总共是16个管角。然后呢,呃,下边这两个呢,是咱们的内部信号,不是摄像头的端口啊,这是咱们内部的信号这两个,那这16个端口呢。对于我们来说,呃,对于刚才给大家去看那个摄像头的拈,大家会发现这个摄像头上插针总共是18个,但是这个管角呢,总共是16个,那么多的两个管角是谁呢?啊,就是分别是电源和D。
91:00
啊,就多了两个端口,一个是电源,一个是D,啊多了这样两个端口啊,咱们这个不光要给这个驱动信号,还要给咱们的摄像头的芯片去供电啊,需要去供电。所以呢,我们除了这个。呃,驱动端口之外,还要加上电源和D,所以总共是18个端口啊,总共是18个端口。这是咱们的摄像头的一个驱动啊,大概呢,就是这样的一个模式啊,这样的一个模式。啊,大家看一看这个整个的框架,大家有没有什么疑问啊,或者是什么地方不太明白的,大家可以去提问一下啊。
92:17
大家看一下有没有啥疑问啊,有没有啥疑问。没有,如果有疑问的话啊,大家把你们的问题呢,呃说出来,然后呢,我给大家去解答一下,如果没有问题。啊,大家打个1,然后咱们就继续往下。
93:04
大家看一下你们有没有问题啊。没有问题的话,打个1。
94:46
好,那么没啥问题的话,咱们就。继续往下了哈。那么这个模块,呃,接下来的话,咱们还需要去进行一下细分啊,进行一下细分。
95:02
啊,因为呢,咱们这个模块的话,呃,这个里边的话包含了许多的功能,咱们这些功能呢,在做的时候可以给它做一下整体的一个划分,这样的话方便我们去进行设计啊,啊接下来的话,我们。给大家去画一下这个详细的一个框架。框架。首先的话呢,是咱们这个按照咱们的这个步骤啊,一一步一步来写,首先的话,第一个步骤是提供一个24兆的一个叉CLK这样的一个时钟,然后呢,要设置PWDN为正常模式,这两个端口呢,是我们要提前做准备的,那么。
96:18
这两个信号呢,我们其实在给的时候也比较好给啊,也比较好给,怎么做呢?啊,大家可以看一下我的做法啊。嗯,就是我要一开始,我首先的话,先来设置2个信号啊,设置2个信号。第一个信号呢,是咱们的呃,叉CLK是一个24兆的一个叉CLK。所以呢,在这儿我直接给他写上。OV7670的。XCLK.
97:07
OV7670的一个叉CLK,这是咱们的必要的一个系统始终啊,必要的一个系统始终。那这个系统始终有了之后,呃,这个系统始终有了之后呢,呃,我们呢,还有另外的一个信号需要给,就是咱们的呃,上电模式就是PWDN。PWDN这是我们的两个信号啊,这两个信号的话给值啊,怎么去给呢,就是一个呢,是给24兆,24MHz。啊,24MHz。那这个时钟我们哪来的呢?我们是可以通过锁向环来进行生成的。
98:01
啊,通过锁向环来生成的,然后另外一个信号。啊,另外的一个信号,这个信号的话,咱们直接给0就可以了啊,所以直接给上一个0。啊,直接给上一个0,这是我们的驱动的第一步啊,事先要做的一个准备。然后往下啊,往下第二步我们要设置我们的reset,呃,设置我们的reset,这个reset的话要拉低2ms拉,拉高2ms是这样的一个过程,那么接下来呢,第一个模块啊,第一个模块我们来干什么呢?就是来制作我们的复位啊就是。一个。Reset的一个模块啊。Reset.Control啊,就是咱们复位的一个控制模块,这个模块它要输出一个信号,就是咱们的reset o v7670的一个reset。
99:05
啊杠恩啊。这是咱们的这个信号啊,这是咱们的这个信号,那么这个信号在做的时候。啊,这个信号在做的时候呢,呃,它是需要有,它是需要输出一个呃控制信号的啊,这个控制信号是什么呢?就是他在上电了之后就开始进行,当它生成的波形结束之后,它需要呢去输出一个。当信号啊,去输出一个档信号。啊,我们给它画到这儿。这个呢,我们叫做reset的当啊,为什么要输出这样一个信号呢?就是为了方便我们的控制模块去控制咱们的下个模块的一个运行。
100:22
这条线的话,它是有高度差的。嗯。那这个就先这样吧,一会儿我再改吧。看着还是有点别扭啊。我给他重新画一下吧。
101:05
啊是这样的一个信号,这个信号呢,就是为为了我们方便呢去控制啊,方便我们去控制。啊,做这样的一个信号的一个交互,呃,但是呢,这个信号的方向啊,咱们呢,需要给它改一下。啊,就是咱们的信号呢,是通过这个reset control模块产生,然后给到咱们这个OV7670的一个驱动模块。啊,驱动模块。啊,咱们的控制模块。然后呃,接下来这是咱们的recset这个这个模块啊,Reset这个模块做完之后,接下来呢,咱们走到咱们的第二步啊,去做咱们的第二步。
102:04
大家可以看一下咱们的第呃,下一步就是咱们的一个寄存器的一个配置,这个配置的过程呢,要通过SAB协议去进行配置好,那么接下来的话,我再去画一个模块。这个模块呢,是咱们的寄存器的一个配置模块。啊,Config的一个啊。Conflict的一个control这样的一个模块,那这个模块的话,呃,它有一些。控制信号,比如说OA7670的一个SCCB的C啊,这是其中一个,然后呢,还有咱们的OA7670的SCB的一个D,这个信号的话是一个双向信号。
103:06
啊,是一个双向信号。啊,给它画出来,那么这个模块的话,它同样是需要有两个控制信号的,这两个控制信号呢,分别是一个开始信号和一个结束信号。所以呢,它的型号呢,名字咱们给它改成。Config的en。还有config的档型号。啊,这是咱们的两个信号,这两个信号的一个信号方向。啊,是控制模块,呃,发送一个en,让咱们的这个配置模块开始工作,当这个配置模块工作完成之后,发送回一个档信号给到咱们的控制模块,这样的话,呃,这个控制模块收到这个当信号之后,他就知道要开始进行下一项工作了,啊是这样的一个过程。
104:10
好,这个模块结束,然后接下来是第呃第呃第4步了啊,咱们的第4步了,咱们的第4步呢,是等待时针的这样的一个过程啊,等待时针的一个过程。那这个过程的话。是wait时针。啊,Wait时针这个过程的话,需要咱们的一些跟外部的一些端口呢,有什么呢,有咱们的。这个VSYC啊VSYC,为什么要这个VSYC呢?呃,刚才给大家去讲VGA的时候,呃,不知道。不知道大家有没有注意到啊。就是咱们的这个,嗯,波形我给大家呢,看到了一整副图片结束为止啊,一整副图片结束为止,那在一整副图片位置,呃,结束的位置大家会看到呢,咱们的VS呢,又拉低了一次。
105:17
啊,又拉低了一次。那也就是说每次的图片开始咱们的VS呢,就会拉低一次,那么咱们如果说只看这个VS的话,呃,因为是咱们这个模是要等待时帧图片的,所以呢,当这我们只需要去数这个信号拉低的次数,就是拉低一次就是一幅图啊啊然后呢,咱们一直等够10副图片,那么这个等待的过程就结束了啊,就结束了,咱们直接去数这个信号就可以了啊,其他的话就不需要去操作了,这样话对于我们来说会非常的简单啊,会非常的简单。信号方向啊,是这个样子的。
106:02
然后呢,它也是需要有两个控制信号,一个是en,一个是当。这个的话是we的en。然后下边是wait的down。啊,是这样的两个信号,啊,这样的两个信号。好,那么等待这个模块结束之后,就是咱们的最后一步了,就是采样的一个信号,采样的一个模块。那么这个采样的模块呢,它的控制信号呢,只需要有一个en就可以了,不需要去当了啊为什么呢?因为咱们的前面的过程呢,配置完成结束之后,咱们的摄像头呢,就可以正常的进行工作。那么。前面的工作做完,那么咱们就可以一直处于采采样的一个状态,就不需要去重新配置了,所以呢,这个模块它一旦开始就会一直去工作,所以呢不需要去当就是capture的一个en信号,然后外部的一个交互信号。
107:07
啊,外部的一个交互信号,这个的话可能就比较多了,比如说有h ref啊,有咱们的PCK。啊PCK,然后的话还有什么呢?还有咱们的数据。啊,还有OA7670的date的一个数据,这个数据的话是一个巴比特的一个数据,啊,是一个巴比特数据,然后的话呢,他要将这个数据呢,组合成16比特,然后输出,所以这个模块还有两个型号。啊,还有两个信号分别是咱们的的的。
108:05
和咱们的capture的data。啊,这个数据的话是16比特。啊,这个数据是16比特,呃,这个信号的方向啊,是输出。啊,是输出。是这样的一个过程啊,是这样的一个过程,那么咱们的整个的一个,呃,这个摄像头的一个驱动啊,就做完了,就做完了,就大概呢,是划分成这样的一些步骤啊,这样的一些步骤。好,那么然后呢,这个子模块有了之后呢,还得有一个什么呢,就是咱们的顶层模块啊,所以呢,我在这儿呢,给大家去画一下咱们的顶层。
109:39
这个模块的话,嗯,这个颜色呢,给了一样的啊,所以接下来的话,咱们要把颜色呢也给它做一下区分。这个紫拈的颜色咱们可以给的稍微重一些。
110:09
好,这样的话就可以了,咱们的整个的一个设计啊就结束了,当然了咱们的顶层呢,还需要有两个信号啊,分别是咱们的时钟和复位啊,这两个呢是必不可少的。
111:04
第一个第一个端口啊,咱们的时钟。然后另外还有一个复位。啊,这是咱们的顶层的两个必要的两个端口啊。好,大概呢,就是这样的一个一这样的一个规划啊,这是咱们的一个整体的一个框架啊,整体的框架当然了,在这个里面,咱们的这个寄存器的配置,它里面呢,还有一些子模块啊,还有一些子模块,咱们呢还需要呢,给大家去划分一下啊,还需要去划分一下。啊,那么这个图示的话,呃,先给大家呢看一看啊,怎么样的一个联系啊,给大家看一看怎么样一个联系。
112:21
好这样的一个形式啊,好,那么。大家有问题的话啊,可以提一下啊,如果呃,没什么问题的话,咱们先课间休息一下啊,然后。回来之后,咱们把剩下的一个模块,然后呢,给大家去划分一下啊。
我来说两句