步骤1:您需要的条件
螺旋桨。您可以了解更多信息,并在Parallax网站上查看示例电路
编程棒。 USB到串行转换器,Prop Plug或从具有内置USB
计算机的Parallax中获取Protoboard。 PC,Mac或Linux(对不起,Amiga!)
用于示例程序的面包板,电阻器和LED,以及电源(可以使用2倍AA)。我使用了3mm绿色LED和270欧姆电阻。
软件/下载
螺旋桨工具(PC,MAC,Linux)
Propeller手册(pdf)
可以使用多种语言(C,Spin,PropBasic,Assembly等)对Propeller进行编程。我认为大多数人都使用Spin,这是我最喜欢的语言,所以本教程将介绍该语言。
步骤2:硬件设置
在开始编程之前,让我们看一下将要使用的测试电路;
原理图
(完整大小)
我正在使用3mm绿色LED和270欧姆电阻。
面包板
(原尺寸)
第3步:旋转基础
《” div》
“想象一下,如果BASIC和PASCAL在酒吧时间挂了,而9个月后出现了一种新语言-那么这就是您的SPIN。” - Ben Heck
Spin是Prop最常用的高级语言,可能是因为它很容易(1)和(2)存在旋转
为您的第一个程序准备好了吗?我想说一下Spin,因为它是我最了解的语言。在这里是:
将上面的程序放入Propeller工具中,然后按F10。它将快速编译并加载到螺旋桨中。代码将每隔一秒钟(1/2赫兹)使连接到P0的LED永远闪烁一次。让我们分解每一行以了解它的作用;
PUB主功能
旋转被分为多个块;
PUB和PRI
这2个块包含实际代码。如果您熟悉php或BASIC或C,则它们的功能很像函数。它们具有名称(此块的名称为“ main”),您可以向其传递值(函数(passedval))。
对于有效程序,其余块不是必需的;
CON
CON保存程序常数。如果您在整个程序中使用了一个常量,则CON块允许您更改一次,并且每次使用时都会反映出来。这是使用CON块的闪烁程序的示例;
VAR
VAR块保存程序变量。在闪烁灯程序中,我没有使用任何系统变量,但这是使用变量的闪烁灯的版本。
还有2个块,即DAT和OBJ,但我们将暂时跳过这些内容-OBJ在合并其他人的代码时很有用,而DAT是另一个保存变量的地方,它也是您放置汇编代码的地方(如果要使用它)。
无论如何-回到我们的原始程序。下一行是:
dira [0]:= 1
螺旋桨上的每个引脚都可以设置为输入或输出。道具启动时,每个引脚都被设置为输入,因此我们需要将P0设置为输出。
要将P0设置为输出,我们将dira [0]的值更改为1。:=是spin中的赋值运算符。您能猜出如何将P10设置为输出吗? dira [10]:= 1.您还可以通过一个命令更改引脚范围。要更改P0,P1,P2和P3,只需使用dira [0..3]:=1。
repeat
repeat告诉Propeller多次运行一个代码块。您可以指定重复条件(将i从1重复到100),也可以通过不指定其他任何内容来永久重复。此重复块将永远重复。
要重复的代码由标签界定。注意重复块下面的浅灰色线条吗?螺旋桨工具在此处放了灰线,以显示重复循环中的代码。
outa [0]:= 1
outa告诉螺旋桨将引脚接地或连接到V +。 outa的工作方式与dira一样,您可以设置单个引脚(outa [10]:= 1)或一组引脚(outa [0..3]:= 1)的输出。请注意,仅当将引脚切换到具有dira的输出时,outa才有意义。
此外,螺旋桨使用三态逻辑。每个引脚可以接地,V +或设置为高阻抗状态。
高阻抗状态使该引脚可以感测到它是接地还是V +,而无需改变信号。它使多个引脚共享同一数据通道,并执行诸如charlieplexing之类的操作。
使用以下方法将引脚接地:
dira [pin]:= 1
outa [pin]:= 0
引脚连接到V +,其中:
dira [pin]:= 1 outa [pin]:= 1
如果该引脚连接到低或高信号(高阻抗状态),则表示:
dira [pin]:= 0(默认为启动状态)
pinstatus:= ina [pin] ina的工作方式与outa和dira相同,只是它是只读的。如果将引脚设置为输入,ina将保留当前输入值。
步骤4:旋转基础,续
让我们继续执行闪烁灯程序。下一行是:
waitcnt(clkfreq + cnt)
在分解此指令之前,让我先解释一下clkfreq和cnt;
clkfreq
Prop可以在多个时钟频率下运行,从20kHz一直到80MHz。 clkfreq是一个系统变量,等于1秒内有多少个时钟周期(滴答声)。如果Prop以80MHz运行,则clkfreq = 80,000,000。如果Prop以20kHz运行,则它将等于20,000。
cnt
cnt是系统时钟。在启动时,cnt = 0,并且在每个刻度上一直递增至2³²,然后再滚动到0。cnt是只读值,您不能更改系统时钟,只需读取它的值即可。
现在,waitcnt:它将暂停程序执行,直到系统时钟达到括号中的值为止。括号中的值是什么?当前系统时钟(cnt)加上一秒内的滴答数。 waitcnt(clkfreq + cnt)告诉道具在进行下一条指令之前要保持1秒钟。
如果我们要等待半秒钟怎么办? waitcnt(clkfreq/2 + cnt)。 5秒左右如何? waitcnt(clkfreq * 5 + cnt)
因此,在我们的程序中,我们将引脚0翻转到输出,将其连接到V +(将其驱动为高电平)以打开LED,并等待一秒钟。这是下一条指令;
outa [0]:= 0
该指令将引脚0从连接到V +变为接地。它关闭LED。请注意,引脚0仍是输出,但已接地。
waitcnt(clkfreq + cnt)
就像上次一样,它暂停程序执行,直到系统时钟等于括号中的值。在这种情况下,它将暂停执行一秒钟。
将其打包
我们的重复循环中的最后一条指令已完成。因为我们的重复循环没有结束条件,所以它将在第一行再次开始(outa [0]:= 1),并无限期地运行。
步骤5:清理代码
让我们用几个运算符清理代码。请注意,这些运算符将不会更改您的代码,它们只是使您更易于阅读的快捷方式。
这里是代码的清理版本
在许多语言中,您可以使用“ ++”来增加变量(i ++会增加变量i)。还有更多运算符供您使用,以下是我在清理代码中使用过的一些运算符;
~~(双波浪号)
双波浪号将设置前面的变量为TRUE。因此,代替dira [0]:= 1,我们可以使用dira [0] ~~
〜(单波浪号)将前面的变量设置为FALSE。
! (感叹号)
感叹号翻转后继变量的值。如果将其设置为TRUE,它将被翻转为FALSE。通常,它被称为“切换”,因为它就是这样做的。
在Spin,++,-,比较,最大和最小值等中可以使用很多运算符-请查看《螺旋桨手册》从第42页开始查看所有内容。
第6步:基本视频
螺旋桨具有在视频硬件中,制作视频非常简单:
首先,我们需要稍微改变一下电路;
(原尺寸)
我们添加了2件事;在引脚30和31上有一个5MHz的晶体。推进器需要一定的速度和精度才能生成视频数据,Prop会采用该5MHz的输入晶体并将其乘以16,以达到80MHz的时钟速度。
A RCA(复合)视频插孔
您将连接3个引脚以生成视频,
P12通过270欧姆电阻连接到插孔
P13通过560欧姆电阻连接到插孔
P14通过一个1.1k欧姆的电阻器到插孔
现在已经设置了视频插孔和晶体,这是程序;
Runni ng该程序将使该图像显示在电视上:
我将简要介绍该程序,以使您了解正在发生的事情,但我将保存详细的分析为了将来的指导。让我们从CON块开始;
CON
CON保持程序常量。这里有2个特殊常量;
_clkmode
该常量告诉Propeller应该以什么时钟速度运行。如果您未指定任何内容,则道具将使用内部振荡器在20MHz附近运行。此设置(xtal1 + pll16x)告诉Prop获取晶体频率并将其乘以16。请查看《 Propeller手册》以了解其他有效的时钟设置。
_xinfreq
如果您使用的时钟速度为使用水晶时,您需要告诉Prop水晶有多快!将_xinfreq设置为5_000_000可以告诉道具,晶体频率为5MHz。注意:在Spin中,下划线(_)被忽略,因此人们经常使用它们来简化大数字的读取。
OBJ
obj块告诉编译器:“如果我在另一个文件中引用方法(PUB或PRI),则应在此处进行”。我将完整讨论如何将Objects用于另一个可指导的对象,但是现在,仅将Objects视为包含其他代码的一种方式即可。
我们此处使用的代码是Propeller工具随附的。 tv_text是启动电视并在其上显示简单文本信息的代码。 Parallax的对象交换中也有大量其他对象。
PUB main
这是主要的代码块。 text.start指文本对象中的PUB启动方法。它启动电视并为屏幕保留内存。
text.str指文本对象中的str方法,它使用Propellers内置字体显示文本字符串。我们使用spin的string()函数声明要显示的文本字符串。
就是这样!还有其他电视显示对象。图形演示(下载Propeller工具时随附)包括显示文本,颜色和图形的方法,下面是屏幕截图。您还可以在Object Exchange上下载图形演示。
步骤7:后续步骤
我们在Spin中浏览了一个闪烁的灯光程序,我为您提供了生成视频的快速概述,但Propeller可以做的还很多!
多任务处理-我们的闪烁灯程序仅使用了1个核心,但您还拥有其他7个核心
面向对象编程-Spin是一种“ OOP精简”语言,并且代码重用非常简单。已经建立了对象来控制和读取传感器,伺服器,电动机和许多其他设备。
高级图形和音频-MIDI和wav文件播放,图形和游戏。
后续步骤
还有一些其他资源可帮助您入门:
螺旋桨手册,教学工具包,数据表和应用笔记(此处)
螺旋桨论坛
Nuts and Volts杂志上乔恩·威廉姆斯的旋转区专栏
道具的替代编程语言:
12个模块
PropBasic
Imagecraft C
螺旋桨对象交换
-
微控制器
+关注
关注
48文章
6808浏览量
147601 -
编程
+关注
关注
88文章
3439浏览量
92374
发布评论请先 登录
相关推荐
评论