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つもそっくり同じく、開発ツールのエディタに入力してください。

2番目のサンプルとして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)

コードの中で{{ }}で囲まれた複数行、' に続く文字列はコメントと見なされます。
ここではコメントにしていますがOBJブロックで通信プログラムのFullDuplexSerial?をdebug(任意の文字列)と宣言しておけばコード中でdebug.tx(13)のように使うことができます。
フォントは$8000から$BFFFまでにあり、1文字横16bit縦32bitで奇数キャラクタと偶数キャラクタの2文字がが1LONG(32bit) X 32 = 32LONGに収まっています。
mainで奇数キャラクタの横1ライン(1LONG)をロードして奇数bitを取りだして縦方向も順次取り出してHubRAMのバッファLED_dataに保存していき、次に偶数キャラクタでも同様に実行します。
getRowでは横16bitの中の任意のbitの8bitを取り出すように変換しています。
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で設定する定数はこのコード内で使うグローバル変数です。
又PRIは他のコードがこれをオブジェクトとして使う場合にその部分を外部からは使えないようにするものです。

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

(書き中)


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

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