0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何对螺旋桨微控制器进行编程

454398 来源:wv 2019-10-11 10:10 次阅读

步骤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)存在旋转

YOURFIRSTPROGRAM

为您的第一个程序准备好了吗?我想说一下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
收藏 人收藏

    评论

    相关推荐

    CH32X035 的可编程协议 I/O 微控制器(PIOC)资料更新了

    之前试用CH32X035 是就对可编程协议 I/O 微控制器(PIOC)很感兴趣,想知道它是怎么用的,但无奈当时时间比较紧,再加上当时厂家也没给出说明文档,只给了部分例程,看了下,发现还挺复杂,主要
    发表于 12-31 22:53

    如何理解微控制器的PWM模块分辨率和精度?

    不同微控制器的PWM功能在硬件设计和软件编程方面可能会有所不同。具体的差异取决于微控制器的型号、架构和功能配置。
    的头像 发表于 12-13 10:06 636次阅读

    微控制器基础】——从历史切入,了解微控制器的五个要素(上)

    微控制器基础】——从历史切入,了解微控制器的五个要素(上)
    的头像 发表于 12-07 10:55 197次阅读
    【<b class='flag-5'>微控制器</b>基础】——从历史切入,了解<b class='flag-5'>微控制器</b>的五个要素(上)

    微控制器基础】—— 从历史切入,了解微控制器的五个要素(下)

    微控制器基础】—— 从历史切入,了解微控制器的五个要素(下)
    的头像 发表于 12-06 17:23 270次阅读
    【<b class='flag-5'>微控制器</b>基础】—— 从历史切入,了解<b class='flag-5'>微控制器</b>的五个要素(下)

    STM8S微控制器参考手册

    导言本参考手册为应用开发人员提供了关于如何使用STM8S微控制器的存储和外设的完整信息。STM8S是一个拥有不同存储大小,封装和外设的微控制器家族。■ STM8S针对通用应用而设计
    发表于 09-25 07:33

    如何选择微控制器

    干货 | 如何选择微控制器
    的头像 发表于 09-21 17:23 341次阅读

    嵌入式编程微控制器应用

    欢迎进入嵌入式编程微控制器应用的世界!使用日益流行且价格适宜的AtmelAVR嵌入式控制器作为学习平台。本书是目前可以获得的最佳书籍之一。对于初学者,本书将会是极好的选择。随着
    发表于 09-20 07:52

    【昉·星光 2 高性能RISC-V单板计算机体验】原创3 控制螺旋桨电路的升力大小

    螺旋桨电路的升力大小,昉·星光 2 高性能RISC-V单板计算机反应敏捷,控制到位,值得上手! GPIO接口也非常多,非常全。如下图: 谢谢!
    发表于 08-31 16:45

    使用M480系列微控制器输出4 PWM波形以控制半桥DC/DC电路

    应用:本样本代码使用M480系列微控制器(MCU)输出4 PWM波形以控制半桥DC/DC电路。 BSP 版本: M480 BSP CMSIS V3.05.001 硬件
    发表于 08-29 07:48

    【Milk-V Duo 开发板免费体验】2控制螺旋桨电路

    /export echo out > /sys/class/gpio/gpio504/direction echo 1 > /sys/class/gpio/gpio504/value 硬件连线: Linux控制螺旋桨如视频所示。 谢谢 算能公司 ! 谢谢
    发表于 08-18 23:28

    微控制器的工作原理和基本结构 微控制器引脚功能和应用电路

    微控制器是一种集成电路芯片,内部集成了微处理器、存储器、输入输出接口和各种系统控制逻辑电路。它可以通过编程实现各种控制任务,并通过输入输出接口进行
    发表于 08-16 17:09 3116次阅读

    汽车微控制器的供电电压

    微控制器供电 微控制器的供电电压可以分为以下几种: ·5V:5V是最常见的微控制器供电电压,包括许多传统的8位微控制器和一些较老的16位微控制器
    的头像 发表于 07-19 10:45 818次阅读
    汽车<b class='flag-5'>微控制器</b>的供电电压

    LPC54606J512BD100微控制器无法连接到目标怎么解决?

    我正在使用LPC54606J512BD100微控制器并面临一个非常严重的问题。 问题是,在成功对控制器进行编程并随机工作后,我无法再次上传代码并出现错误。 关于
    发表于 05-31 07:48

    00006 动画演示同轴反向旋转螺旋桨 #机械动画 #3D动画 #机械科技 #科技 #飞机 #螺旋桨

    电工技术经验分享
    学习电子知识
    发布于 :2023年05月09日 20:44:15

    如何在esp8266和avr微控制器之间进行串行通信?

    我是使用 nodemcu 和 lua 脚本进行 uart 编程的新手。我正在尝试在 esp8266 和 avr 微控制器之间进行串行通信。为此,我在 nodemcu 中使用 UART
    发表于 04-27 07:54