SNSへはこちら

Propellerマイコンを回す(2) – 開発環境編

このマイコンには開発環境が複数用意されていて、どれも個性的です。それらについて紹介して、2種類のLチカを示そうと思います。

開発環境の紹介

Propeller GCC

基本の gcc です。一番スタンダードなものですね。全OS対応。これをインストールすることでプログラムを書くことが可能です。どうやら結構コマンドラインオプション指定が簡単なようで助かります。今回は触れずに行きます。

PropWare

Propeller マイコンのための C++ ビルドシステム及びライブラリです。公式では Windows と Linux のみ対応。作者は「よく分からんけど、Mac でもできんじゃね?」と言っています。なので今回はパス。非常に興味があるので後日やってみたいところ。

PropellerIDE

BASIC 風の独自言語 spin を利用する IDE です。全OS対応。結構サクッと開発できるのが特徴ですが、まだ使用感はよく分かっていません。どうやらオブジェクト指向だと言っているようです。少なくとも、C言語のライブラリを使わなくても簡単にペリフェラルを用いることのできるように設計された言語であるということはよく分かります。

SimpleIDE

C および C++ を用いて開発する IDE です。全OS対応。ライブラリを内蔵していますので、こちらもサクッと開発できるという特徴がありつつ、僕みたいなライブラリを全力で使いたくないマンにも対応してくれる優しい設計です。もちろんC言語に造詣の深い方にはよく向いている環境です。

また、この IDE では SimpleTools というライブラリを使っているようで、これによってサクッと開発ができるようになっています。その他同梱されているライブラリもあり、すべてを含めて以下にリファレンスがあります。

また、Mac で試したところ、現行の最新バージョンでは書き込みができませんでした。なので、RC 版を使用してください

Lチカコード

それでは、PropellerIDESimpleIDE でLチカを行っていきましょう。LED は P.0 に接続します。

PropellerIDEでのLチカ

spin でのコードです。外部にクリスタル(5MHz)を接続した場合の動作です。PLL x16 も通すので結果 80MHz で動作します。
なお、本 IDE 起動中はシリアルポートが Busy 状態になりますので、screen 等、他のプログラムでポートを開けませんので注意。というか、もし他のプログラムで開く場合は DTR# を抜いてから実行してください。通信開始時にリセットがかかってしまいますから。EEPROM に書き込む際には問題ないですが。

CON
    _CLKMODE = XTAL1 + PLL16X ' clock source: XTAL1 & multiplied x16 by PLL
    _CLKFREQ = 80_000_000 ' As a result, 80MHz clock

PUB main
    dira[0] := 1
    repeat
        outa[0] := !outa[0]
        waitcnt(_CLKFREQ + cnt) ' wait for 1sec

CON とは定数宣言部です。ここではクロックソースと周波数を指定しています。
PUB ではパブリックなオブジェクトを表すらしいです。ここでは main といかにもそれらしい名前をつけていますが、名前は何でも構いません。

内部 RC オシレーターのみで動かす場合は CON ブロックを以下のように置き換えてください。

CON
    _CLKMODE = RCFAST
    _CLKFREQ = 12_000_000 ' 12MHz internal fast RC clock

コードが書けたら書き込みをしましょう。配線を確認し、適切なポートを選択して書き込みです。

1秒ごとにオンオフが切り替わっていたら正しく動作しています。

SimpleIDEでのLチカ

C言語で、ライブラリを使ったものです。調子に乗って UART での文字列送信も行ってしまいましょう。

#include "simpletools.h"

int main() {
  set_direction(0, 1); // P.0, OUTPUT
  while(1) {
    toggle(0);
    pause(1000);
    print("Hello\n");
  }
}

他のサイトではこの set_direction を使わず、チカチカ処理を以下のようにしています。動作は同様です。

#include "simpletools.h"

int main() {
  while(1) {
    high(0);
    pause(1000);
    print("Hi\n");
    high(1);
    pause(1000);
    print("Hello\n");
  }
}

リファレンスによると、high() はポートを出力に設定して、High にするという動作をして、一方でtoggle() はポート方向を設定せずにデータをトグルするだけです。ですので toggle を使いたい場合は事前に set_direction をする必要があるということなんですね。

書き込み時の注意

使用クロックによって設定が異なります。おそらくコンパイル時に初期化ルーチンを生成している関係なんでしょう。
ウィンドウ下、左側のボタンを押すと設定画面がでます。

この画面で Board Type の選択が異なってくるのですが、その詳しい内容について SimpleIDE のユーザーガイドを見てみましょう。

外部クリスタルを繋がない場合は RCFAST にすればよいです。しかしながら、クロックの精度は悪いため、UART のボーレートがうまく設定されていない可能性があります。
一方、5MHz の外部クリスタルを接続した場合は QUICKSTART を選択すれば良いです。例えばこんな感じ。

そうしたら、書き込みをしましょう。それぞれのボタンはこんな意味です(何故か PropellerIDE とは並びが違います)↓

ターミナルはツールバーのボタンをつかうよりも、書き込み後にメニューバーの Program -> Open Terminal を利用したほうが便利です。
どうやら print を用いた UART はボーレートが 115200 のよう。

その他参考サイト

この記事では上記のサイトの他に、以下を参考にしました。

こんな感じで一応Lチカができました。今度は割り込みですかね?(多分) 今後は SimpleIDE (C言語) を中心にやっていきたいと思います。
割り込み処理は PropellerIDE(Spin) でも特殊かなと思うので、必要に応じて Spin のほうも取り上げていきます。

コメント

  1. 通りすがり より:

    P8X32Aの後継のベータ版チップが出たとかで懐かしく調べていたら見つけました。最後に触ったのは2014年?2019年になって導入記事が見れるとは思わず。大昔に作った開発ボードを触りたくなりますね。
    記念カキコ