步驟1:您需要的條件
硬件
螺旋槳。您可以了解更多信息,并在Parallax網(wǎng)站上查看示例電路
編程棒。 USB到串行轉(zhuǎn)換器,Prop Plug或從具有內(nèi)置USB
計算機的Parallax中獲取Protoboard。 PC,Mac或Linux(對不起,Amiga!)
用于示例程序的面包板,電阻器和LED,以及電源(可以使用2倍AA)。我使用了3mm綠色LED和270歐姆電阻。
軟件/下載
螺旋槳工具(PC,MAC,Linux)
Propeller手冊(pdf)
可以使用多種語言(C,Spin,PropBasic,Assembly等)對Propeller進行編程。我認為大多數(shù)人都使用Spin,這是我最喜歡的語言,所以本教程將介紹該語言。
步驟2:硬件設(shè)置
在開始編程之前,讓我們看一下將要使用的測試電路;
原理圖
(完整大?。?/p>
我正在使用3mm綠色LED和270歐姆電阻。
面包板
(原尺寸)
第3步:旋轉(zhuǎn)基礎(chǔ)
《” div》
“想象一下,如果BASIC和PASCAL在酒吧時間掛了,而9個月后出現(xiàn)了一種新語言-那么這就是您的SPIN。” - Ben Heck
Spin是Prop最常用的高級語言,可能是因為它很容易(1)和(2)存在旋轉(zhuǎn)
為您的第一個程序準備好了嗎?我想說一下Spin,因為它是我最了解的語言。在這里是:
將上面的程序放入Propeller工具中,然后按F10。它將快速編譯并加載到螺旋槳中。代碼將每隔一秒鐘(1/2赫茲)使連接到P0的LED永遠閃爍一次。讓我們分解每一行以了解它的作用;
PUB主功能
旋轉(zhuǎn)被分為多個塊;
PUB和PRI
這2個塊包含實際代碼。如果您熟悉php或BASIC或C,則它們的功能很像函數(shù)。它們具有名稱(此塊的名稱為“ main”),您可以向其傳遞值(函數(shù)(passedval))。
對于有效程序,其余塊不是必需的;
CON
CON保存程序常數(shù)。如果您在整個程序中使用了一個常量,則CON塊允許您更改一次,并且每次使用時都會反映出來。這是使用CON塊的閃爍程序的示例;
VAR
VAR塊保存程序變量。在閃爍燈程序中,我沒有使用任何系統(tǒng)變量,但這是使用變量的閃爍燈的版本。
還有2個塊,即DAT和OBJ,但我們將暫時跳過這些內(nèi)容-OBJ在合并其他人的代碼時很有用,而DAT是另一個保存變量的地方,它也是您放置匯編代碼的地方(如果要使用它)。
無論如何-回到我們的原始程序。下一行是:
dira [0]:= 1
螺旋槳上的每個引腳都可以設(shè)置為輸入或輸出。道具啟動時,每個引腳都被設(shè)置為輸入,因此我們需要將P0設(shè)置為輸出。
要將P0設(shè)置為輸出,我們將dira [0]的值更改為1。:=是spin中的賦值運算符。您能猜出如何將P10設(shè)置為輸出嗎? dira [10]:= 1.您還可以通過一個命令更改引腳范圍。要更改P0,P1,P2和P3,只需使用dira [0..3]:=1。
repeat
repeat告訴Propeller多次運行一個代碼塊。您可以指定重復(fù)條件(將i從1重復(fù)到100),也可以通過不指定其他任何內(nèi)容來永久重復(fù)。此重復(fù)塊將永遠重復(fù)。
要重復(fù)的代碼由標簽界定。注意重復(fù)塊下面的淺灰色線條嗎?螺旋槳工具在此處放了灰線,以顯示重復(fù)循環(huán)中的代碼。
outa [0]:= 1
outa告訴螺旋槳將引腳接地或連接到V +。 outa的工作方式與dira一樣,您可以設(shè)置單個引腳(outa [10]:= 1)或一組引腳(outa [0..3]:= 1)的輸出。請注意,僅當(dāng)將引腳切換到具有dira的輸出時,outa才有意義。
此外,螺旋槳使用三態(tài)邏輯。每個引腳可以接地,V +或設(shè)置為高阻抗?fàn)顟B(tài)。
高阻抗?fàn)顟B(tài)使該引腳可以感測到它是接地還是V +,而無需改變信號。它使多個引腳共享同一數(shù)據(jù)通道,并執(zhí)行諸如charlieplexing之類的操作。
使用以下方法將引腳接地:
dira [pin]:= 1
outa [pin]:= 0
引腳連接到V +,其中:
dira [pin]:= 1 outa [pin]:= 1
如果該引腳連接到低或高信號(高阻抗?fàn)顟B(tài)),則表示:
dira [pin]:= 0(默認為啟動狀態(tài))
pinstatus:= ina [pin] ina的工作方式與outa和dira相同,只是它是只讀的。如果將引腳設(shè)置為輸入,ina將保留當(dāng)前輸入值。
步驟4:旋轉(zhuǎn)基礎(chǔ),續(xù)
讓我們繼續(xù)執(zhí)行閃爍燈程序。下一行是:
waitcnt(clkfreq + cnt)
在分解此指令之前,讓我先解釋一下clkfreq和cnt;
clkfreq
Prop可以在多個時鐘頻率下運行,從20kHz一直到80MHz。 clkfreq是一個系統(tǒng)變量,等于1秒內(nèi)有多少個時鐘周期(滴答聲)。如果Prop以80MHz運行,則clkfreq = 80,000,000。如果Prop以20kHz運行,則它將等于20,000。
cnt
cnt是系統(tǒng)時鐘。在啟動時,cnt = 0,并且在每個刻度上一直遞增至232,然后再滾動到0。cnt是只讀值,您不能更改系統(tǒng)時鐘,只需讀取它的值即可。
現(xiàn)在,waitcnt:它將暫停程序執(zhí)行,直到系統(tǒng)時鐘達到括號中的值為止。括號中的值是什么?當(dāng)前系統(tǒng)時鐘(cnt)加上一秒內(nèi)的滴答數(shù)。 waitcnt(clkfreq + cnt)告訴道具在進行下一條指令之前要保持1秒鐘。
如果我們要等待半秒鐘怎么辦? waitcnt(clkfreq/2 + cnt)。 5秒左右如何? waitcnt(clkfreq * 5 + cnt)
因此,在我們的程序中,我們將引腳0翻轉(zhuǎn)到輸出,將其連接到V +(將其驅(qū)動為高電平)以打開LED,并等待一秒鐘。這是下一條指令;
outa [0]:= 0
該指令將引腳0從連接到V +變?yōu)榻拥亍KP(guān)閉LED。請注意,引腳0仍是輸出,但已接地。
waitcnt(clkfreq + cnt)
就像上次一樣,它暫停程序執(zhí)行,直到系統(tǒng)時鐘等于括號中的值。在這種情況下,它將暫停執(zhí)行一秒鐘。
將其打包
我們的重復(fù)循環(huán)中的最后一條指令已完成。因為我們的重復(fù)循環(huán)沒有結(jié)束條件,所以它將在第一行再次開始(outa [0]:= 1),并無限期地運行。
步驟5:清理代碼
讓我們用幾個運算符清理代碼。請注意,這些運算符將不會更改您的代碼,它們只是使您更易于閱讀的快捷方式。
這里是代碼的清理版本
在許多語言中,您可以使用“ ++”來增加變量(i ++會增加變量i)。還有更多運算符供您使用,以下是我在清理代碼中使用過的一些運算符;
~~(雙波浪號)
雙波浪號將設(shè)置前面的變量為TRUE。因此,代替dira [0]:= 1,我們可以使用dira [0] ~~
?(單波浪號)將前面的變量設(shè)置為FALSE。
! (感嘆號)
感嘆號翻轉(zhuǎn)后繼變量的值。如果將其設(shè)置為TRUE,它將被翻轉(zhuǎn)為FALSE。通常,它被稱為“切換”,因為它就是這樣做的。
在Spin,++,-,比較,最大和最小值等中可以使用很多運算符-請查看《螺旋槳手冊》從第42頁開始查看所有內(nèi)容。
第6步:基本視頻
螺旋槳具有在視頻硬件中,制作視頻非常簡單:
首先,我們需要稍微改變一下電路;
(原尺寸)
我們添加了2件事;在引腳30和31上有一個5MHz的晶體。推進器需要一定的速度和精度才能生成視頻數(shù)據(jù),Prop會采用該5MHz的輸入晶體并將其乘以16,以達到80MHz的時鐘速度。
A RCA(復(fù)合)視頻插孔
您將連接3個引腳以生成視頻,
P12通過270歐姆電阻連接到插孔
P13通過560歐姆電阻連接到插孔
P14通過一個1.1k歐姆的電阻器到插孔
現(xiàn)在已經(jīng)設(shè)置了視頻插孔和晶體,這是程序;
Runni ng該程序?qū)⑹乖搱D像顯示在電視上:
我將簡要介紹該程序,以使您了解正在發(fā)生的事情,但我將保存詳細的分析為了將來的指導(dǎo)。讓我們從CON塊開始;
CON
CON保持程序常量。這里有2個特殊常量;
_clkmode
該常量告訴Propeller應(yīng)該以什么時鐘速度運行。如果您未指定任何內(nèi)容,則道具將使用內(nèi)部振蕩器在20MHz附近運行。此設(shè)置(xtal1 + pll16x)告訴Prop獲取晶體頻率并將其乘以16。請查看《 Propeller手冊》以了解其他有效的時鐘設(shè)置。
_xinfreq
如果您使用的時鐘速度為使用水晶時,您需要告訴Prop水晶有多快!將_xinfreq設(shè)置為5_000_000可以告訴道具,晶體頻率為5MHz。注意:在Spin中,下劃線(_)被忽略,因此人們經(jīng)常使用它們來簡化大數(shù)字的讀取。
OBJ
obj塊告訴編譯器:“如果我在另一個文件中引用方法(PUB或PRI),則應(yīng)在此處進行”。我將完整討論如何將Objects用于另一個可指導(dǎo)的對象,但是現(xiàn)在,僅將Objects視為包含其他代碼的一種方式即可。
我們此處使用的代碼是Propeller工具隨附的。 tv_text是啟動電視并在其上顯示簡單文本信息的代碼。 Parallax的對象交換中也有大量其他對象。
PUB main
這是主要的代碼塊。 text.start指文本對象中的PUB啟動方法。它啟動電視并為屏幕保留內(nèi)存。
text.str指文本對象中的str方法,它使用Propellers內(nèi)置字體顯示文本字符串。我們使用spin的string()函數(shù)聲明要顯示的文本字符串。
就是這樣!還有其他電視顯示對象。圖形演示(下載Propeller工具時隨附)包括顯示文本,顏色和圖形的方法,下面是屏幕截圖。您還可以在Object Exchange上下載圖形演示。
步驟7:后續(xù)步驟
我們在Spin中瀏覽了一個閃爍的燈光程序,我為您提供了生成視頻的快速概述,但Propeller可以做的還很多!
多任務(wù)處理-我們的閃爍燈程序僅使用了1個核心,但您還擁有其他7個核心
面向?qū)ο缶幊?Spin是一種“ OOP精簡”語言,并且代碼重用非常簡單。已經(jīng)建立了對象來控制和讀取傳感器,伺服器,電動機和許多其他設(shè)備。
高級圖形和音頻-MIDI和wav文件播放,圖形和游戲。
后續(xù)步驟
還有一些其他資源可幫助您入門:
螺旋槳手冊,教學(xué)工具包,數(shù)據(jù)表和應(yīng)用筆記(此處)
螺旋槳論壇
Nuts and Volts雜志上喬恩·威廉姆斯的旋轉(zhuǎn)區(qū)專欄
道具的替代編程語言:
12個模塊
PropBasic
Imagecraft C
螺旋槳對象交換
-
微控制器
+關(guān)注
關(guān)注
48文章
7949瀏覽量
154937 -
編程
+關(guān)注
關(guān)注
88文章
3689瀏覽量
95237
發(fā)布評論請先 登錄
家用電器開發(fā)中微控制器的選型要點

請問ST無刷電機控制器-最高控制可調(diào)節(jié)轉(zhuǎn)速是多少?
CASAIM助力ABB完成螺旋槳推進器三維掃描及檢測
圖文動畫深度解析:航空發(fā)動機的類型及其工作原理

Toshiba推出七款A(yù)rm Cortex-M4電機控制微控制器
dsPIC33EP32MC204無人機螺旋槳參考設(shè)計用戶指南

MSP430微控制器串行編程適配器用戶指南

FPGA 與微控制器優(yōu)缺點比較
ESP32 微控制器系列指南


評論