Propellar イントロダクション

「Propellarをいじってみたいんだけど、どう始めればいいの?」そんな疑問へのソリューションをご提供!

必要なものはこれだけです:

Propellar搭載ボードは何種類か入手可能ですが、ここではQuickStartBoard?(以下クイックスタートボードと表記)を使うことを前提として説明します。
何でかというとですね、クイックスタートボードが一番用意するものが少なく、かつお手軽にプロペラCPUを体験できるからなのです!

では、以下で解説をしていきます。

1.プロペラを体験するためのハードウェアを入手しましょう

日本マイクロボット教育社さんで、クイックスタートボードを入手しましょう。
コチラで購入できます→http://www.microbot-ed.com/j_quickstart.html
安くて手早くプロペラを体験できる、オイシイボードです:-)

ちなみに、日本マイクロボット教育社さんは、PARALLAX社さんの日本での代理店です。
http://www.microbot-ed.com/
各種キット・ボードなどを購入できます。

2.開発環境を手に入れましょう

開発環境は無償で入手できます。
2種類ありまして、一つはPARALLAX社公式開発環境、もう一つはBradさんという方が作っている開発環境です。

PARALLAX社公式ツール群

PARALLAX社公式Spin言語開発環境「Propeller Tool」
http://www.parallaxsemiconductor.com/support/software
PropellarTool?以外にも、いくつかのツールがダウンロードできます。
最低限必要なのは、「Propeller Tool v.1.3」です。

クイックスタートボードにはUSBシリアル変換チップが搭載されていますが、これのドライバ(USBシリアルドライバ)は、公式開発環境のインストール中に一緒にインストールされます(インストールするかどうかは選択できます)。

PropellarTool?には、Spin言語(後で解説します)のサンプルソースもいっぱい入ってます。すごく勉強になりますので、一読の価値ありです。

Bradさん謹製ナイスツール群「Brad's Spin Tool」

「BST - The multi-platform Propeller Tool Suite」
http://www.fnarfbargle.com/bst.html
Windows/Linux/Macで動作する開発環境です(バイナリはそれぞれ別に用意されてます)。
公式のツールとの違いは

BSTを使うときには、Windows環境ではUSBシリアルデバイスドライバのインストールが必要です。
USBシリアルドライバはPARALLAX公式ページの「Off-site software」の欄にある「Parallax USB Drivers」を見て下さい。

3.その他必要なものを用意しましょう

あと必要なのは、PCとMini-USBのケーブルです。

PC

開発環境でプロペラのプログラムを書いてプログラムをプロペラクイックスタートボードに書き込むために、PCが必要です。
PARALLAX公式開発環境を使う場合ですと、Windowsが動作しているPCが必要です。
Brad's Spin Toolを使うなら、Windows、MacOSX、Linux(x86)の3種のOS向けに開発環境が用意されています。
Linuxをお使いの場合、ディストリビューションは何でもいいです。*1

Mini-USBケーブル

プロペラクイックスタートボードとPCは、USB A〜Mini-USBのケーブルで接続します。
このケーブルは付属してません。なので、適当なのを用意してください。
長さとか適当でいいですが、通信できることが確認されたものを使うようにしましょう。

4.開発環境を準備しましょう

上記のものが用意できましたら、開発環境をインストールしましょう。
インストールは、公式開発環境とBrad's Spin Toolとでだいぶ違います。

どちらがおすすめ、とは言えません、が!Windowsを使う方はどちらもインストールするのをおすすめしたいです。
サンプルソースがすごく役に立ちますので。
LinuxかMacをお使いの方でも、アーカイブ内のサンプルをなんとかして見ていただきたいです。ゼヒ!

公式開発環境 Propellar Tool

まずアーカイブをダウンロードします。

DL_here.PNG(画像をクリックすると拡大)

Setup-Propeller-Tool-v1.3.zipがダウンロードされます。

次に、これを展開します。
Setup-Propeller-Tool-v1.3.exeが出てきます。

そのSetup-Propeller-Tool-v1.3.exeを実行します。
ウィンドウに表示されている内容をお好みかつ適切に設定し、進めていきます。

1_start.png(画像をクリックすると拡大)
2_user_reg.PNG(画像をクリックすると拡大)

特にカスタマイズすることはないと思いますので、Completeでいいと思います。
3_sel_type.png(画像をクリックすると拡大)

インストールフォルダも特に変更しなくてOKです。してもかまいません。
4_dest_dir.png(画像をクリックすると拡大)

途中でUSBドライバのインストールをするかどうかのチェックボックスが出てきます。
すでにFTDI USBシリアル変換デバイスのドライバをインストールしてあるなら、このチェックボックスはオフにしてください。
インストールしてないなら、チェックボックスはオンにしておくのがいいですね。
5_usb_drv.png(画像をクリックすると拡大)

Installというボタンが出てきたら、それを押すとインストールがモリモリ進んでいきます。
6_install.png(画像をクリックすると拡大)
7_progress.png(画像をクリックすると拡大)

USBドライバのインストールのところで、チェック印をつけた場合は、USBドライバのインストールがここで入り、進行状況が表示されます。すぐ終わりますが。
8_usb_progress.png(画像をクリックすると拡大)

Finishボタンが出てきたら、それを押して終了。
9_complete.PNG(画像をクリックすると拡大)

Brad's Spin Tool

こちらは簡単です。
BradさんのWebページからアーカイブをダウンロードします。
そのアーカイブを展開します。
展開して出てくる実行ファイルがBST本体です。それを実行すると開発環境が起動します。

一つ注意しないといけないのは、実行するOSの環境によっては、USBシリアルドライバをインストールしなければならないところです。

Windows版のインストール

  1. BSTのアーカイブを取得します。
    http://www.fnarfbargle.com/bst/Latest/ にアクセスし、bst-0.19.3.exe.zipを取得します。
    bst_dl_win.PNG(画像をクリックすると拡大)
  2. アーカイブを展開します。
    bst.exeというファイルが出てきます。これが本体。
  3. FTDI VCPドライバを別途入手してインストールします。
    ドライバはPARALLAX公式ページの「Off-site software」の欄にある「Parallax USB Drivers」からダウンロードできます。

Linux版のインストール

  1. BSTのアーカイブを取得します。
    http://www.fnarfbargle.com/bst/Latest/ にアクセスし、bst-0.19.3.linux.zipを取得します。
    bst_dl_linux.PNG(画像をクリックすると拡大)
  2. アーカイブを展開します。
    bst.linuxという実行ファイルが出てきます。これが本体です。
  3. USBシリアルドライバについて。
    大抵のディストリビューションでFTDI USBシリアルドライバは既に入っていると思いますので、ドライバに関しては何もすることはありません。
    もしクイックスタートボードを認識しなかった場合は、お使いのディストリビューションで提供されているFTDI USBシリアルドライバをインストールしてください。

MacOSX版のインストール*2

  1. BSTのアーカイブを取得します。
    http://www.fnarfbargle.com/bst/Latest/ にアクセスし、bst-0.19.3.osx.zipを取得します。
    bst_dl_mac.PNG(画像をクリックすると拡大)
  2. アーカイブをダブルクリックして展開します。
  3. すると、「bst」という名前のファイルが出てきます。これが本体です。
    インストールはbstをアプリケーションフォルダにドロップ。
  4. FTDI VCPドライバを別途入手してインストールします。
    プロペラブMLにて参加者の方がドライバのインストールレポートを書いてくださったので転載します。
    ちなみに、OSは Mac OS X 10.6.8 snow Lepard です。
    FTDI USB-シリアル変換ドライバを入れてみまたらプログラムのがロードできました。
    
    入手元
    http://www.ftdichip.com/Drivers/VCP.htm
    
    以下、私が試した手順です。
    
    1.MacOSX (32bit) 2.2.16 を選択。
    →ダウンロードされるファイル:FTDIUSBSerialDriver_v2_2_16.dmg
    
    2.ダウンロードされたFTDIUSBSerialDriver_v2_2_16.dmgをダブルクリック。
    →イメージがマウント?されるのでFTDIUSBSerialDriver_10_4_10_5_10_6
     をダブルクリック。
    ※ディレクトリ内にはFTDIUSBSerialDriver_10_3というファイルも存在するがおそらくMacOSX 10.3はこちらですね。
    
    3.インストーラの指示に従ってインストール
    
    4.再起動の必要無し。
     →bsからプログラムがロードできました。(ひゃっは〜)

5.簡単なプログラムを作成してみましょう

さて、ここまでで開発環境が起動できて、クイックスタートボードにプログラムをロードできるようになったはずです。
では、実際にプログラムを作れてボードにプログラムをロードできるかどうか、簡単なプログラムで試してみましょう。

プロペラ用プログラミング言語「Spin」

プロペラに標準で用意されているプログラミング言語として、「Spin」というのがあります。
コンパイラ型の言語なので、入力→コンパイル→ボードにロードして実行、という手順でプログラムを作ります。

Spin言語で書いたプログラムを入力してみましょう

サンプルとして、LEDがナイトライダーのアレ(ネタ古くてごめんなさい)みたいに光るプログラムを入力してみましょう。

'LED Demo
'
CON
 _clkmode = xtal1 + pll16x
 _xinfreq = 5_000_000

VAR
 byte LED

PUB LedDemo
    dira[16..23] := %1111_1111

    repeat
        repeat LED from 16 to 23
            outa[LED] := 1
            waitcnt(clkfreq/4 + cnt)
            outa[LED] := 0

        repeat LED from 23 to 16
            outa[LED] := 1
            waitcnt(clkfreq/4 + cnt)
            outa[LED] := 0

段下げ(インデント)は大事です。
Pythonを使ったことがある人は、Pythonと同じくインデントでブロックを表現する、と言えば分かっていただけるでしょうか。(Python使ったことない人ごめんなさい)
とにかく、スペースの1つもそっくり同じく、開発ツールのエディタに入力してください。

各開発環境の起動直後はこのようになってます:

見かけが割と違いますが、今の段階では無視してて問題ないです。
特に、左側に表示されているファイル一覧やディレクトリツリーの表示内容は、みなさんのPCの中身次第で変わりますので、画像のは一例にすぎません。

これの、右側の一番広いとこにさっきのプログラムを入力してください。
単に動作を体験するだけですし、コピペでオッケーです。

クイックスタートボードにロードして実行してみましょう

サンプルプログラムができましたので、いよいよクイックスタートボードにプログラムを突っ込んでみましょう!

使ってる開発環境が公式Propellar ToolかBSTかで、GUIが少々違います。
以下、それぞれの場合について解説をしていきます。

公式開発環境 Propellar Toolの場合

まず、プログラムが以下のように入力されています・・・よね?
make_prog_.JPG(画像クリックで拡大)

これをコンパイルして、クイックスタートボードへ突っ込みます。
メニューバーから、[Run]-[Compile Current]-[Load RAM]、と辿って、Load RAMを実行してください。
exe1_menu1.JPG(画像クリックで拡大)
exe2_menu2.JPG(画像クリックで拡大)
exe3_menu3.JPG(画像クリックで拡大)

コンパイルが行われ、チェック・ロード・ベリファイが続けて実行されます。
exe4_chk.JPG(画像クリックで拡大)
exe5_verify.JPG(画像クリックで拡大)

何事もなく「Verifying RAM」のウィンドウが消えたら、何事もなかったかのように戻ります。
exe6_compiled.JPG(画像クリックで拡大)

そしてクイックスタートボードを見ると!
LEDが左右にピコピコ光ったり消えたりしてますよね?ね?
LEDexec.jpg(画像クリックで拡大)

Brad's Spin Tool(BST)の場合

BSTでは、GUIが公式環境と違うので、少々戸惑うかもしれませんが、できることは同じです。少なくとも今の段階では。

さて、プログラムを入力して、このような状態になってると思います。
・・・なってますよね?
bst1_make_prog.JPG(画像クリックで拡大)

メニューバーから[Compile]-[Compile and Load Ram]、と辿ってコンパイルとロードを実行します。
bst2_menu1.JPG(画像クリックで拡大)
bst3_menu2.JPG(画像クリックで拡大)

すると、コンパイル進行表示がでて、そのあとRAMに書き込んだデータのベリファイ進行表示が出てきます。
bst4_trans.JPG(画像クリックで拡大)
bst5_verify.JPG(画像クリックで拡大)

そして進行表示が消えたらボードを見てみましょう。
どうでしょうか?LEDがピコピコしてますか?
LEDexec.jpg(画像クリックで拡大)

うまくできましたでしょうか?

さて、LEDを光らせることができました?
うまく光ったようでしたら、おめでとうございます。Spinプログラム第1弾を実行できましたね。

ではこのあとは、Spinプログラミングにちょっと踏み込んでみましょう。

6. Spin言語入門

さっきのLEDチカチカプログラムは、まあそんなに長いプログラムではありませんでしたし、やってることも単純でした。
簡単で短いですが、さっきのプログラムに含まれていた命令だけではたいしたプログラムは作れません。

ということで、ここでは、ちょっと踏み込んだプログラムを見てみましょう。

POVを作ろう

POVってご存知でしょうか?
POVとは、残像を利用して一列のLEDで文字が見えるようにするというものです。
・・・と、これだけではよく分からないと思いますので、http://portal.nifty.com/2009/08/18/a/ を見てください。
どんなものかすぐに分かると思います。

POVのコード

以下のプログラムを入力し、QuickStart?ボードにロードします。
そして手でボードを持って左右に振ると、PropellerのROMにあるフォント256文字が右から左にスクロールされるのが見えます。
pa0_0002.jpg

CON
 _clkmode = xtal1 + pll16x
 _xinfreq = 5_000_000          
{{
OBJ
 debug : "FullDuplexSerial"
}}
VAR
 byte  LED_data[48]
 long  Stack[10]
 
PUB main | t, dT, char, next_char, odd, col, col_data, tmp_char, row, row_data, n
 waitcnt(clkfreq*3 + cnt)
'   debug.start(31,30,0,57600)
'   debug.tx(0)                                   
 cognew(Drive_LED(@LED_data), @Stack)
 t := cnt
 dT := clkfreq/10
 char := $7f94
 repeat
   char += $80
   if char > $c000
     char := $8014
   next_char := char
   
   repeat odd from 0 to 1                                  ' even/odd character
'      debug.hex(char,4)
'      debug.tx(13)
     
     repeat row from 0 to 10                                ' row from 0 to 8
       if row < 8 
'                      debug.str(string("column data"))
'                      debug.tx(13) 
         repeat col from 0 to 7                            ' column from 0 to 7
           tmp_char := col * 12 + char                     ' address for column data
           col_data := long[tmp_char]                     ' get LONG data
'                      debug.hex(col_data,8)
'                      debug.tx(13)
           row_data <<= 1
           row_data += getRow(col_data,odd,row)
           
'          debug.tx(13)                                    
       else
           row_data := $0                        
       waitcnt(t += dT)                  
'        debug.bin(row_data,8)
'        debug.tx(13)     
       repeat n from 0 to 46
         LED_data[n] := LED_data[n+1]
       LED_data[47] := row_data
'        debug.bin(LED_data[47],8)
'        debug.tx(13)        
   char := next_char
 
PRI getRow(col_data,odd,row): bit | x
   if odd == 1
     x := lookupz(row:$20, $200, $800, $8000, $80000, $800000,$2000000, $20000000)   ' odd character
   else
     x := lookupz(row:$10, $100, $400, $4000, $40000, $400000,$1000000, $10000000)   ' even character 
   if x & col_data
     bit := 1
   else
     bit := 0
 
PRI Drive_LED(addr) | index
 dira[16..23]~~  
 repeat
   repeat index from 0 to 47
     outa[16..23] := byte[addr][index]
     waitcnt(clkfreq/1000 + cnt)

では解説。

コメント

コードの中で{{ }}で囲まれた複数行、' に続く文字列はコメントと見なされます。

サブルーチン

Spin言語でも他の大抵の言語と同じく、サブルーチンが定義できます。
Spin言語では、ソースファイルを1つのオブジェクトとして、他のソースファイルのコードを取り込み、そのソースファイルに含まれるサブルーチンを呼び出すことができます。

PRI getRowでは横16bitの中の任意のbitの8bitを取り出すように変換しています。

PRI Drive_LEDはLED_dataというデータバッファをただLEDに出力しているだけです。これはcognew(Drive_LED(@LED_data), @Stack)によって別のCogで実行させています。

PRI getRow(col_data,odd,row): bit | x のcol_data,odd,rowは呼び出し側が渡す引数でbitはgetRowがCall側に返す値でxはgetRow内で使用するローカル変数です。
CONで設定する定数はこのコード内で使うグローバル変数です。

サブルーチンのスコープ指定

サブルーチンですが、そのファイル内でのみ呼び出せるサブルーチン、もしくはファイルの外からも呼び出せるサブルーチンとして定義できます。

サブルーチン定義のとき、名前の前にPUBをつけると、他のファイルからもそのサブルーチンを呼び出せるようになります。

PRIをつけると、他のコードがこれをオブジェクトとして使う場合にその部分を外部からは使えないようになります。

そのほか

ここではコメントにしていますがOBJブロックで通信プログラムのFullDuplexSerial?(一つのCogを占有していてオブジェクトと呼ばれる)をdebug(任意の文字列)と宣言しておけばコード中debug.tx(13)のように使ってPCと通信ができ、QuickStart?とPC間でデータのやりとりが出来ます。オブジェクトが何番目のCogを使っているかを知りたい場合は大抵startメソッドでCog番号を取得出来るようになっています(そういうコードが推奨されてるらしい)。

フォントは$8000から$BFFFまでにあり、1文字横16bit縦32bitで奇数キャラクタと偶数キャラクタの2文字がが1LONG(32bit) X 32 = 32LONGに収まっています。
mainで奇数キャラクタの横1ライン(1LONG)をロードして奇数bitを取りだして縦方向も順次取り出してHubRAMのバッファLED_dataに保存していき、次に偶数キャラクタでも同様に実行します。


*1 BSTのインストール作業とかは特にありません、アーカイブを展開したら完了ですので。
*2 titoi2さん、宮崎さん、ご協力ありがとうございました

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS