新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > PSoC Express和简单游戏机开发应用

PSoC Express和简单游戏机开发应用

作者:赛普拉斯半导体资深主任应用工程师 翁小平时间:2008-04-15来源:电子产品世界收藏

  PSoC(可编程片上系统)是Cypress半导体公司生产的包含有8位微处理器核和数字与模拟混合的信号阵列芯片,其应用领域与8位的MCU相同。与8位的MCU的区别在于PSoC的数字周边资源(如定时器、PWM、UART等等)和模拟周边资源(放大器、比较器、滤波器等等)以数字模块和模拟模块的方式给出。不同型号的PSoC芯片的差异,主要是拥有数字模块和模拟模块的数量不同,用户可以根据自己的需要来定义这些模块。所有这些预定义的模块称为用户模块。在出现以前,开发PSoC的应用项目与MCU的应用开发相似,使用PSoC Designer集成开发环境,根据项目的需要调用和配置资源(用户模块),然后编写代码(C或汇编)、编译、调试等步骤,制成目标芯片。

本文引用地址:http://www.eepw.com.cn/article/81551.htm

  现在由于可以在更高的抽象概念水平上运行,且无需汇编或C语言的软件开发,因此设计人员只需要数小时或数天时间即可完成对PSoC器件的新设计开发、仿真及编程,而不再耗时数周乃至数月。

  的开发过程

  使用PSoC Express的开发过程主要有四个步骤,它们是:

  1. 选择输入和输出

  运行PSoC Express,选择 Design选项夹,根据设计的需要选择相应的输入、输出和接口驱动器,并根据要求设定驱动器的参数。

  2. 定义输出的行为

  根据不同的输入变化来定义系统的输出行为。输入/输出关系比较简单时,输出驱动器提供三种传输函数:优先编码器、状态编码器和表格对应器,直接使用这三种传输函数建立起输入和输出的关系。输入/输出的关系比较复杂时,需要使用评估器(Valuator),评估器包含6个传输函数,除了输出驱动器的三种传输函数以外,评估器还有环路延时、状态机和阈值三种传输函数。

  3. 仿真和验证

  仿真为软仿真,它主要通过交互方式来改变输入值或状态,输出驱动器和评估器的状态或数值图形块中的参数值随即发生相应的变化,通过观察这个变化,用户可以评估和验证设计结果的正确性。

  4. 生成系统文件和下载十六进制编程文件到PSoC芯片。至此,可以在实验板上验证设计功能是否达到了设计的要求。

  优先编码器传递函数和状态机传递函数

  1.优先编码器传递函数

  优先编码器传递函数是最常用的传递函数。它是基于表达式的实施一系列IF(…)Then(…)、Else IF(…) Then(…)…的操作,进而得到一个可以用作输出的值。括号里的表达式类似C语言里的表达式。表达式里的变量来自输入驱动器的输出或其他评估器的输出。对于实施一系列

  IF(…)Then(…)
  Else IF(…) Then(…)
  …

  的操作,从上到下,只要一遇到IF(…)里面的表达式为真,下面的语句将不再执行。由此可知,只有一个IF(…) Then(…)语句真正被执行,越是前面的语句优先级越高。

  2.状态机传递函数

  通常一个系统中会有多个状态,当满足一定的条件或被某个事件触发时,系统会从一个状态转变到另一个状态。在PSoC Express中,仅有评估器的状态机传递函数才能实施这一功能,而输出驱动器是没有状态机传递函数的。

  为了实施这一功能,用鼠标右键点击评估器图标,选择状态机传递函数。首先要为所有可能的状态定义状态名,然后设置触发条件,并选择该触发条件之前和之后的状态,给每个触发条件命名。通常触发条件用表达式来表示。每设置一个触发条件,就有一条带箭头的蓝线将两个转换之前和之后的状态连接起来。所有的触发条件都设置好了以后,我们在屏幕上可以看到所熟悉的状态转换图。状态机传递函数的输出就是某一个用状态名表示的状态,在所有的状态中必须定义一个状态为初始状态,它以绿色表示,如图1所示。

  简单游戏机设计

  石头、剪刀、布游戏机包括三个输入驱动器、四个输出驱动器和四个评估器。三个输入驱动器就是三个轻触按键,分别代表石头、剪刀、布用于用户作竞猜选择。四个输出驱动器都是LCD,分别是一个16X2字符点阵LCD的四个部分,用于显示每次竞猜的输赢和状态以及玩家的分数。四个评估器中的两个用于产生随机数1或2或3,分别代表石头、剪刀、布参与和用户的竞猜。一个评估器用于测试三个轻触按钮是否处于空闲等待状态,以便LCD的显示从竞猜结果状态返回到竞猜前的等待状态。另一个评估器实施各种状态的转换,以便在不同的时刻给出一个正确的状态,如图2所示。

  输入驱动器 Rock(石头)、Scissor(剪刀)和Paper(布)三个轻触按钮分别有四个可能的输出状态:上升沿、下降沿、ON、OFF,连接AllOff和m评估器。Roll和Pick两个评估器的传递函数产生随机数1或2或3。Roll的传递函数如下:

  if(m_state==m_state__ WaitForYouToPlay)&&(Roll==0)  then Roll = 1
  else if(m_state==m_state__ WaitForYouToPlay)&&(Roll<128)  then Roll = Roll*2
  else if(m_state==m_state__ WaitForYouToPlay)  then Roll = ((Roll-128)*2^0x71

  Pick的传递函数仅有一条语句:

  If(1)  then Pick = (Roll%3)+1

  AllOff也使用传递函数测试三个轻触按钮是否处于空闲等待状态:

  if(Rock==Rock__On)  then AllOff = 0
  else if(Paper==Paper__On)  then AllOff = 0
  else if(Scissors==Scissors__On)  then AllOff = 0
  else if(1)  then AllOff = 1

  m评估器用状态机传递函数实现9个状态的转换如图3所示。Start为初始状态用绿颜色表示,如果任意一个按扭被按,触发条件变为:

  (Rock==Rock__Rising_Edge)||(Paper== Paper__Rising_Edge)||(Scissors== Scissors__Rising_Edge)

  产生触发从初始状态进入等待状态 WaitForYouToPlay,等待用户竞猜。一旦再有按键被按,就进入Rock、Scissors、Paper的三个选择状态之一。

  接下来马上实施三个判断:Pick等于1(Rock)或2(Paper)或3(Scissors)?由于Pick评估器的输出就是这三个值之一,所以必然有一个条件满足。无论是Iwin或Draw或YouWin状态,都无条件地进入到Converge状态,因为这三个状态转换到Converge的触发条件rrr、ddd、sss都是1。当按键被释放以后,Converge状态便返回到等待状态 WaitForYouToPlay,因为它的触发条件是All Off。

  对于普遍使用的16X2字符点阵LCD模块(如S01602芯片),针对不同显示方式,PSoC Express有多个LCD的输出驱动器。这里用这个LCD模块的四个四分之一(第一排左边和右边,第二排左边和右边)以字符和数字来显示不同的内容。它们都是用优先编码器传递函数来实现状态和结果显示。第一个LCD驱动器My Pick在第一排左边显示PSoC竞猜选择项目(Rock或Scissor或Paper),在开始状态显示Any Key,在等待状态显示Please。它的传递函数:

  if(m_state==m_state__Start)  then LCDMyPick=LCDMyPick __Label_4
  else if(m_state==m_state__ WaitForYouToPlay)  then LCDMyPick=LCDMyPick__Label_5
  else if(m_state==m_state__ YouSelectedRock)  then LCDMyPick = Pick
  else if(m_state==m_state__ YouSelectedPaper)  then LCDMyPick =Pick
  else if(m_state==m_state__ YouSelectedScissor)  then LCDMyPick = Pick
  Label_4是Any Key, Label_5 是Please在驱动器的参数中设定。第二个至第四个LCD驱动器的传递函数从略。

  结语

  在 PSoC Expess的开发环境下用三个输入驱动器、四个输出驱动器和四个评估器实现石头、剪刀、布的游戏,其中四个输出驱动器和四个评估器中的三个使用了优先编码器传递函数,而仅一个评估器使用了状态机传递函数。可以看到,使用无代码的图形化的PSoC芯片的集成开发环境PSoC Expess开发项目简单而易行,快捷而有趣。



关键词: PSoC Express 开发应用

评论


相关推荐

技术专区

关闭