作者:Steve Leibson, 赛灵思战略营销与业务规划总监
6个月前,在我开始写这个连载博客的时候,我就通过提供一些好的、简单易用的例子,来阐述Zynq All Programmable SoC的PS(处理器系统)和PL(可编程逻辑)的若干细节知识,并在以前的章节中介绍了MicroZed I/O载体卡,现在,我们可以尝试把之前介绍过的这些方面都组合到一起,来看看让它们协同工作是多么容易的事情。
这个例子,我们主要考虑用PS来控制PL去驱动一个Adafruit NeoPixel数字RGB LED阵列。我们会通过下面的方法来实现:
1.开发一个PL外设来驱动NeoPixels;
2.在PS和PL之间通信;
3.使用Zynq I/O载体卡和卡上的PMOD扩展端口;
4.开发一个PS应用来使上面这些项协同工作;
我不认为这个工作在一篇博文中就能描述完,可能会需要写几篇,但是不用担心,所有的事情都已经实现了,并且可以正常工作,所以在方法上不会有任何问题,我将花点时间来详细说明这个工作。
有些人也许会问,NeoPixel是什么?它们是独立编址的LED,每一个NeoPixel都包括一个红色、绿色和蓝色LED,这些LED通过一个数字控制器来控制。它们被安装成条状,就象你在这张AdaFruit照片中看到的那样:
AdaFruit NeoPixel数字RGB LED防水条
AdaFruit NeoPixel条采用的是一个非常简单的3线接口,包括电源、电源回复和Din(数据输入)。三个NeoPixe LED(红、绿或者蓝)输出的光都用一个8-bit值来表示,因此,每一个单色LED都可以提供256个亮度级,当和另外两个LED组合到一起的时候,就可以得到24位色(16777216个颜色)。丰富的色彩以及简单的串行接口,使得这些LED器件在许多场合中都得到广泛使用。
更好的地方在于,NeoPixel之间可以通过菊花链连接在一起。每一个NeoPixel都有一个缓冲的Dout(数据输出)接口,当命令字一个接一个的传输过来时, NeoPixel就把数据从Din接口直接传送到Dout接口,这样,仅用一根I/O线,就可以把这些独立编址的NeoPixel组合成一个大的条状或者其它的排列方式。想要组合成多大都行,只要你能把它们都点亮。
两个NeoPixel通过菊花链组合在一起
NeoPixel采用Worldsemi WS2812智能型LED集成光源(数据手册这里)。这些器件通常采用5V供电,但是,数据手册中建议可以采用3.3V供电,其中的限制因素就是蓝色LED需要的供电电压是3.2V~3.4V。因此,应该(的确是)可以采用MicroZed I/O载体卡的3V3来给这些器件供电,我会在后面的博文中进行更详细的说明。
我需要一个PMOD扩展模块来确保能够把NeoPixel同MicroZed I/O载体卡连接起来。PmodCON1扩展模块连接器把PMOD接口上的4根信号线和电源/电源回复线输出到6个螺丝接线端。
PmodCON1与NeoPixel条之间的连接
我们要有一个良好的工程习惯,就是在一头扑进去开发一个方案之前,先定义好一些需求。下面整理了这个应用的一些主要需求:
1、要能够驱动可变数量的NeoPixel;
2、在工作过程中,用户可以进行升级;
3、每一个NeoPixel都要能单独进行编址;
4、每一个NeoPixel在工作过程中要能够进行升级;
这些需求都非常简单,但是,满足这些需求的应用能够以多种方式灵活地进行使用。
在下一篇博文中,我们将要着眼于通过什么样的架构和方法来实现这些需求。下面的图片展示了这个方案最初的测试结果,测试中只控制了一个LED。
第一个用Zynq控制的NeoPixel
原文链接:
http://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-Chro...
© Copyright 2014 Xilinx Inc.
如需转载,请注明出处