&size(20){''Propellar イントロダクション''};

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

必要なものはこれだけです:
-Propellar搭載ボード(クイックスタートボードがおすすめ)
-PC(OSはWindows か MacOSX か Linux)
-USBケーブル(MiniUSB)
-開発環境(無料です)

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

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

#contents


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

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

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

**PARALLAX社公式ツール群 [#cf16e596]
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」 [#sf2db8bc]
「BST - The multi-platform Propeller Tool Suite」
→http://www.fnarfbargle.com/bst.html
Windows/Linux/Macで動作する開発環境です(バイナリはそれぞれ別に用意されてます)。
公式のツールとの違いは
-Windows以外にも、LinuxとMac用のバイナリが用意されてる
-日本語環境でのソース表示に関するバグがありません(=日本語環境できちんと実行可能)
-GUIがチョット違う
-サンプルソースは付いてません

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

*3.その他必要なものを用意しましょう [#k2ae2af1]
あと必要なのは、PCとMini-USBのケーブルです。

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

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

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

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

**公式開発環境 Propellar Tool [#b4f1ed4f]
まずアーカイブをダウンロードします。

&ref(DL_here.PNG);

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

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

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

&ref(1_start.png);
&ref(2_user_reg.PNG);

特にカスタマイズすることはないと思いますので、Completeでいいと思います。
&ref(3_sel_type.png);

インストールフォルダも特に変更しなくてOKです。してもかまいません。
&ref(4_dest_dir.png);

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

Installというボタンが出てきたら、それを押すとインストールがモリモリ進んでいきます。
&ref(6_install.png);
&ref(7_progress.png);

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

Finishボタンが出てきたら、それを押して終了。
&ref(9_complete.PNG);



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

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

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

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

***MacOSX版のインストール((titoi2さん、宮崎さん、ご協力ありがとうございました)) [#d037697e]
+BSTのアーカイブを取得します。
http://www.fnarfbargle.com/bst/Latest/ にアクセスし、bst-0.19.3.osx.zipを取得します。
&ref(bst_dl_mac.PNG);
+アーカイブをダブルクリックして展開します。
+すると、「bst」という名前のファイルが出てきます。これが本体です。
インストールはbstをアプリケーションフォルダにドロップ。
+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.簡単なプログラムを作成してみましょう [#p56bbe6b]
さて、ここまでで開発環境が起動できて、クイックスタートボードにプログラムをロードできるようになったはずです。
では、実際にプログラムを作れてボードにプログラムをロードできるかどうか、簡単なプログラムで試してみましょう。

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

**Spinでプログラムを作ってみましょう [#i48a6a17]
サンプルとして、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文字が右から左にスクロールされるのが見えます。
&ref(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は他のコードがこれをオブジェクトとして使う場合にその部分を外部からは使えないようにするものです。

**クイックスタートボードにロードして実行してみましょう [#wc985efc]
(書き中)

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