lcytms
发表于 2017-1-17 22:21:14
1424
现在是上升沿,改成跟刚才一样的下降沿,只需要把pos改成neg即可。
好,这个呢,就是今天课程的内容。
等会我会把我做的代码以及课件都发给大家。
现在我说一下,我们今天下午做什么。
今天下午呢,我们就用数据流、行为、结构化,我们写一个七段数码管的驱动。
我来说一下,我们下午,需要用到开发板,稍后发下来。
lcytms
发表于 2017-1-17 22:29:48
1425
下午呢,我们就做这个七段数码管的驱动。
七段数码管呢,嵌入式、单片机、ARM,我们都会用到它的驱动。
现在呢,我们用逻辑来写,用电路建模。
我们先来说一下这个七段数码管,嵌入式有些同学做过的,了解它的结构,可能也有同学完全没有做过,我先来说一下它的电路构成。
lcytms
发表于 2017-1-17 22:31:11
1426
就像我们现在看到的这个数码管。
每个数码管有一个8字,8字下面还有小数点。
在每一个白色的字的后面,有一个灯,或者说一个发光二极管,当发光二极管亮的时候,对应这个段位它是亮的。
如果我们要显示0,这边亮。显示1。显示3。
所以说不同的段位亮起来,它就显示不同的字样。
lcytms
发表于 2017-1-17 22:32:44
1427
那么这种段位显示字,可以显示多少呢?
这个8字可以显示从0到F。这是4个bit的,0000到1111,它都能显示,虽然有些字段看起来怪怪的。
比如说,4少一截,b是个小写,A是这样的,有些奇怪,但总归还是能够看清。
十六进制,一个8字可以显示4位的二进制,从0000到1111。
那么它的这种编码的方式是这样的,段位这是a、b、c、d、e、f,中间这个是g,小数点是p。
然后呢有八个二极管,每个下面都有一个,实际上呢段位是有7个,加上小数点是8位。
通常我们说称之为七段码,seven segment display,就是这样一个结构。
lcytms
发表于 2017-1-17 22:34:35
本帖最后由 lcytms 于 2017-1-17 22:37 编辑
1428
所以说,用到的发光二极管也有8位,加上小数点。
加上小数点以后的8位线呢,分别是a、b,然后呢一直到p。
这个发光二极管的构成很有意思。
我们要让发光二极管亮起来,有两种方法。
一种方法,我们把它的阳极接在一起,称之为共阳。
我们的共阳电路的这一端,接一个开关管,开关管的上游接Vcc,馈电。
然后通过必要的串联限流电阻引入了FPGA的驱动端,我们控制的驱动端。
lcytms
发表于 2017-1-17 22:39:37
1429
如果是一个共阳电路的话,我们驱动它,从a线到p线,这个时候呢,我们的编码,在开发板上的编码,我们称之为SEG线。
Segment。
SEG的a是最低位,小数点是最高位,seg。
总共8根线, 所以说seg这是7:0的一根线。
是这样驱动的,而且是负逻辑。
对,共阳电路是负逻辑。
共阴电路正好是正逻辑。
共阴电路反过来,是在这边驱动的。
共阳电路是它的阴极驱动的。
阴极驱动当然是低电平它才亮的。
lcytms
发表于 2017-1-17 22:41:16
1430
我们用的开发板上就是共阳电路。
但是下午呢,我们给大家的头文件,是个共阴电路的头文件。
我们的开发板上总共有6盏灯,6个8字。
D0,D1,D5。
D0这盏灯,是最高位,个十百千万,十万位的,D5是各位的。
如果每一个8字,我们都把它的控制逻辑接出来,每一个8字都有seg信号8位的线接出来。
lcytms
发表于 2017-1-17 22:43:07
1431
每一个灯有一个seg线,并且每一个灯都有一个共阳电路的控制逻辑。
我们称之为选择线,sel0,sel1,sel5。
那么如果我们用我们的逻辑来驱动的话呢,理论上说,我们把所有的灯控制线都接到我们的FPGA的控制逻辑上面,是可以驱动的。
但是这些线总共加起来有多少呢?
6盏灯,六九五十四,总共要54根线,这样我们印制板布线就会布得密密麻麻的。
为了驱动这6个灯,要54根线。
由于它是低速信号,通常低速信号我们会让它时分,从通道上时分。
lcytms
发表于 2017-1-17 22:44:41
1432
这是怎么做的呢?
现在呢,我会把所有的段位线接在一起,所有的段位码接在一起。
这是SEG线,总的就是seg,这个7:0会连到FPGA的输入端。
Sel的这根线,从sel0到sel5。
我们在这边呢,会做一个译码器decoder,给出一个地址,地址呢,能够从0数到5,三根线够了,2:0。
lcytms
发表于 2017-1-17 22:46:11
1433
也就是说,这个地址线,指向0的时候,sel0有效,其它的都没有效。
指向1的时候,sel1有效,其它的都没有效。
或者说,这个decoder就是一个独热码的译码器。
就是把2:0的二进制,译成由6个bit组成的独热码,所以说这边输出的就是SEL的6根线,5:0。
这个Decoder我们已经做到开发板上去了,不需要同时工作,我们FPGA驱动地址即可。
当驱动为0的时候,我们把它的七段码送到总线上。