夢色☆あんどろいど

中華パッド&スティック、Raspberry Pi、Arduinoなど、怪しいデジタルガジェット探偵団!!

Great Cow BASICを使ってATTiny13Aでサーボモータを回す

前回のエントリでご紹介したGreat Cow BASIC(以下GCBASICと略す)のチュートリアルにサーボモータを使うものがありましたので試してみました。

このチュートリアルでは、Arduino IDEのと同様に可変抵抗器で制御するようになっていますが、コトを単純にするためにまずはプログラムたけで回してみることに...

サーボモータには「PulseOut」と言う命令を使います。「任意の単位、長さのパルスを任意のポートに出力する」というものですが、GCBASICにはハードウェア/ソフトウェアPWM命令が別にありますので、事実上サーボモータ専用命令のような感じです。ライフラリの呼び出しも事前のコンフィグレーションも不要で、いきなり使えるので扱いやすいです。
試してはいませんが、出力先ポートの条件が特にないのでソフトウェア的にやってるのではないか?と勘ぐっています。

最初はRingoAme(拡張版HalfByte TinyBASIC)で稼働実績のあるUNO互換機を使ってみましたが、90度→90度→180度反転のプログラムで200バイト足らずと至ってコンパクトなので、途中からATTiny13Aで実験を続けることにしました。

鉄道模型のターンテーブルをイメージして、ボタンを押すたびに180度回転するプログラムを作ってみました。転回中はランプが点灯して警告するようにしてあります。



回転の単位が角度ではなくパルス長なのがちょっとややこしいところです。純正SG90の動作範囲が0.5~2.4msということなのでそれに合わせてありますが、コピー品らしいのでかなり怪しいです。個体差もけっこうありますし、何か180度に達していないような・・・? そもそもラジコンのステアリングや方向舵の操作用ですからきっちり180度回す必要はありませんし、正確さもそれほど要求されていないでしょうからね~ 現物合わせが前提のようです。

参考までにプログラム↓をあげておきます。

**********************************************
'サーボモータテスト for ATTiny13A
'スイッチON/OFFで180度回転

'Chip model
#chip tiny13a, 9.6

#define D1 portB.0 'サーボ信号
#define D3 portB.2 '押ボタン
#define D4 portB.3 'LED

dir D3 in
D3 = 1 'スイッチ入力ポートをプルアップ
dim count as Byte '省略可
count = 50

main:

if D3 = 0 then
D4 = on
if count = 50 then
goto Kaiten1
end if
if count = 240 then
goto Kaiten2
end if

end if

if D3 = 1 then
D4 = off
end if

goto main

Kaiten1:
For count = 50 to 240
pulseout D1,count 10us
wait 20 ms
Next count
wait 500 ms
goto main

Kaiten2:
For count = 240 to 50
pulseout D1,count 10us
wait 20 ms
Next count
wait 500 ms
goto main

**********************************************

これでバイナリのサイズは200バイトちょっと。RAMについては僅か1バイトのみ。あの小さなATTiny13Aでも余裕!です。
ネットを見る限り、特に日本国内ではATTiny13Aでサーボモータを回してる事例は非常に少ないですが、何でもArduinoとArduino IDEでやろうとすることがかえって難易度を高めているのではないかと思います。本来、安くてシンプルなATTiny13Aは入門用に相応しいマイコンチップだと思いますが、現状は完全に上級者向けですからね~ まあ、あんまり人気が出すぎてLPC1114みたいにバカ上がりされると困りますが。
なお、上記プログラムをヒューズビットを変更していない工場出荷状態のATTiny13Aで使う際は#chipのところのクロックを9.6から1.2に変更すると正常に動作します。


スポンサーサイト

Great Cow BASICのチュートリアル

ここ半月ほど、ずっとGreat Cow BASICをさわっていて、何~んとなく少し慣れてきた感じです。実際に使ってみると「これホンマにタダなん?」と感動することしきりで、当初の想像以上に使い勝手が良く、また実際使える開発環境だな~と実感しています。例えば、ピンモードや変数定義を省略出来たり、ライブラリが使えたり、エディタでは日本語表示に加えて、スニペットやズーム機能、フォント、カラーの設定など、まだまだ出てくるとは思いますが、感心させられることが多いです。当面はこれをメインに使っていこうかな~と考えています。なお、ピンモードや変数は調子に乗っていると時々意図に反した結果をもたらすこともあるようですので、大きなプログラムではちゃんと定義した方が結果的に楽?!だとは思いますが...

当初、PIC中心のサンプルプログラムでどこまで理解できるか心配でしたが、PIC用ながら目的の電子部品だけに絞り込んだ超シンプルなプログラムを集めたチュートリアル↓を見つけました。
http://www.greatcowbasic.com/sample-projects.html

「Chioino」という、名前からも容易に想像出来る、PIC使用のArduino風マイコンボードのためのものですが、お約束のLチカからはじまってスイッチ、可変抵抗、PWM、光センサ、LCD、キーボード、7セグ、シリアル通信など、基本的なことがサクっと学べるようになっていて、すべて試したわけではありませんが、LCDを使ったもの以外はAVRでも気軽に対応出来ると思います。

このChipinoと言うマイコンボードに搭載されているPIC(16F886)は、AVRで言うとATMega8辺りに相当するようですので、ATMega328pや168Pを積んだArduinoであれば余裕で対応出来ると思います。
一部、"chipino.h"と言うライブラリを使用するプログラムがありますが、これは入出力ポート名を「D1」とか判りやすく定義するものですのでこの部分を削除して、プログラム中に出てくるD8とかAN0と言ったポート名をportB.3とか、AVRで使用可能なポートに変更してやれば原則使えます。
なお、Arduino用には"duemilanove.h"や"UNO_mega328p.h"というポート名定義ライブラリが用意されていますので、それを利用するのもアリです。私はDegital_1とかAnalog_1とか長ったらしいポート名は面倒なのでD1~D13、AN0~AN5にLED(B.5)とRESET(C.6)、Rx(D.0/IN)、Tx(D.1/OUT)を加えた自作ライブラリを使っています。ポートの少ないATTiny13Aとかはわざわざライブラリにするのもなんですし、プログラム中にあっても邪魔にもならないので、スニペットに登録して使い回すと便利です。

このチュートリアルで唯一事態をややこしくしているのは配線図が存在しないこと! これは、Demo-Shieldと言うこのマイコンボード専用のシールドの利用を前提としているためですが、ある程度はプログラム内のREM文を見れば想像が付くものの、抵抗値なんかの具体的な数値が判らないのが困りものです。まあ、勝手に流用している身としては、Arduino IDEなどを対象にした他のチュートリアルの配線図を参考にして、ありがたく使わせていただきましょう。

当面の研究対象を鉄道模型の制御に置いている関係で、そちら方面に関連する分野に行きがちですが、PWM関連は非常に扱いやすいように思います。サーボモータの制御もRingoAme(拡張版HalfByte TinyBASIC)ほどてはないにせよ、コンパイラとしては画期的にシンプルで、しかも生成されたバイナリはコンパクト! これならATTiny13A辺りでも十分に「意味のある物」が作れそうに思います。


Arduinoに直接HEXファイルを書き込むツール(その2)

前回のエントリで「Great Cow BASIC」をインストールすると通常自動的にインストールされる「avrdudess」と言うAVR向け書き込みソフトのことにふれましたが、このソフトでもArduinoに別のプログラムライタや特別な配線なしで直接、任意のHEXファイルの書き込みが可能です。

方法は、Arduinoを接続後、avrdudessを起動して右上の方にある[Presets]から対象のArduinoを選択し、COMポートを合わせて、HEXファイルを選び、「Go」ボタンを押すだけ。以前ご紹介した「guidude」とほぼ同じです。
Presetsには今のところ、UNO、NANO(328版/168版)、MEGAが登録済みで、自分でも登録可能なようですがそちらはまだ試していません。

A2018032601.jpg

ソフトは、Great Cow BASICをインストールしなくても、単体で↓から入手出来ます。
http://blog.zakkemble.co.uk/avrdudess-a-gui-for-avrdude/

guidudeの方が見た目はより簡単そうに見えます。Arduinoだけ、あるいはArduino中心であればguidude。AVR併用ならこちらが便利だと思います。


オープンソースのPIC/AVR向けBASICコンパイラ=Great Cow BASIC

このところずっとマイコン+BASIC(昔そんなタイトルの雑誌があったような...)の組み合わせがテーマになっていますが、今回もこの線の話題です。

今まで全く聞いたこともないので、てっきり個人で開発してる限定的なシステムかと思いきや、予想を完全に裏切る完成度と規模! 一見したところBASCOM-AVRとさほど遜色を感じません。こんな大物が未だに埋まっているのですから、マイコンの世界はまだまだフロンティアの時代なんでしょうね~
海外では参考書も出てるみたいですが、国内(日本語)の情報は極端に少ないです。私で多分5番目位かな?

↓本家サイト
http://gcbasic.sourceforge.net/Typesetter/index.php/Home

↓現状最も詳しいと考えられる日本語による紹介ページ
http://okgnz.web.fc2.com/picz/index.htm

↓言語仕様についてはこちらも参考になります
http://mpu.seesaa.net/article/399685697.html

早速インストールして、↑を参考に日本語化をしてから、お約束?のLチカをやってみました。対応チップは怖いぐらいあって、定義文も #chip mega328p,16 とかと書くだけなので楽ちんです。あと、Arduino IDEでおなじみの #define が使えるので、D13 とかArduinoのポート番号に合わせておくとわかりやすくて良いです。

a2018031501.jpg

なお、プログラマ(書き込みソフト)は内蔵していませんので外部の適当なソフトを使うことになりますが、AVR用の標準は「avrdudess」というGUI版avrdudeで、インストール時にチェックを入れておけば自動的にこちらもインストールされます。yuki-labさんのavrdude-GUIを改良したようなソフトで、プリセット機能があったりと使い勝手が非常に良いです。

a2018031303.jpg

コンパイルはツールアイコンの「牛」の3つ右隣の「hex」アイコンをクリックするか、編集画面の任意の場所で右クリックして出てくるコンテキストメニューの「Make HEX」を選択するか、あるいはツールバーの[ツール]>[外部ツール]>「Make HEX」で行えます。
コンパイルが完了するとエディタ下部の「出力」の所に保存先やファイルサイズ等の情報が表示されます。コンパイルと同時に書き込みも出来るみたいですが、ウチではワンクッション置くことにしていますので試していません。

a2018031304.jpg

と、ここまでの説明では、別にプログラムライタが必須で難しそうなソフトを操らないといけない印象が否めませんが、ここで真価を発揮するのが前回のエントリでご紹介した「guidude」! これを使えばばArduinoに直接作成したHEXファイルを簡単に書き込むことが可能になります。

ちなみに保存先フォルダにはHEXファイルの他、アセンブルリストやコンパイルレポートが出力されています。コンパイル時の出力欄に表示されるサイズとレポートに表記されているサイズが異なるのが不思議ですが、Lチカで100バイト前後とBASCOM-AVR以上にコンパクトで、これはピンモードの設定を省略していることによる差かな?と思いますが、それでもちゃんとチカチカするのには感心してしまいました。ATTiny13Aなんかには最適かも知れませんね! 

情報量は少ないですが、立派なリファレンス(英文ですけどね…)と大量のサンプルコード↓がありますので、フツ~の用途なら何とかなりそうな気がします。

↓リファレンス(PDF 648p)
http://gcbasic.sourceforge.net/help/output/pdf/gcbasic.pdf

↓サンプルコード(インストールしたフェルダにもかなりある)
https://github.com/Anobium/Great-Cow-BASIC-Demonstration-Sources

ひとつ問題なのは、これらが基本的にPIC向けに記述されていること。私はPICの知識が皆無なためポート番号の書き換え程度で対応出来るものやら見当が付かないのが困りものです。動作の点でもAVRはまだまだ発展途上のようですが、今のところ更新頻度は速いようなので、こちらはやがて収束していくものと思います。


Arduinoに直接HEXファイルを書き込める簡単ツール

私が勝手に「RingoAme」と名付けている拡張版HalfByte TinyBASIC。その易しさと気軽さとは裏腹に準備作業はちょっと面倒で、誰かに勧めるのもなかなかシンドい。コンパイル済みのバイナリを突っ込めば楽そうですが、Arduino1台だけではそう簡単には行きません。

そんな時にまさにぴったりなのがこのツール「guidude」!
Arduinoボードに直接、任意のHEXファイルを書き込めるもので、特に配線が必要なわけでもなく、ごく普通にボードを接続してCOMポートを合わせ、書き込むHEXファイルとボードの種類を選べば後は書き込みボタンをクリックするだけ。これならマイコンの知識がなくても扱えると思います。

元々、yuki-labさんのavrdude-GUIのソースを参考に開発されたそうで、「Arduino簡単HEX書き込みモード」のチェックを外せば普通にGUI版avrdudeとしても使用出来ます。

詳しい使い方、DLは開発元の「マイコン風雲録」さんのページ↓をご覧ください。
http://mpu.seesaa.net/article/399685603.html

実際に使ってみましたが、本当に手軽で便利なツールだと思います。BASCOM-AVRから直接Arduinoに書き込む際(前回エントリ参照)も、特別な呪文?が必要なUNOなら、ワンクッション必要でもこちらを使った方が簡単かな?と思います。COMポートが頻繁に変わる環境ではいちいち調べる必要がありますので。

a2018030601.jpg

a2018030602.jpg

なお、NANOがリスにありませんが、Duemilanoveを選べば書き込めました。
「任意のHEXファイル」と言うとブートローダも書き込めそうな気がしますが、さすがにそれは無理ですし、もちろんArduinoIDEから出力したブートローダ込みのHEXファイルも書き込めません。これをやってしまうとブートローダの修復が必要な事態になって面倒臭いことになりますのでご注意ください。

あと、何故かウチではver.0.2.3.32が2回目以降起動不能になる現象が起きていて、ver.0.1.2.31の方を使っています。起動しなくなった時は、C:\Users\[ユーザ名]\AppData\Local\guidude以下にあるファイル(フォルダ)を削除すれば起動出来るようになります。

このツール、公開日を見ると何と2012年12月と、私がマイコン学習をはじめた時期よりも前で、その時期に出会っていたら、UNO買ってLチカやって後が行き詰まり、BASCOM使いたさにライタ買って...という後の展開が少し違ったものになっていたかも?... 遅ればせながら、これから愛用させていただきたいと思います。



 | ホーム |  古い記に行く »

文字サイズの変更

プロフィール

よっしい

Author:よっしい
FC2ブログへようこそ!

最新記事

カテゴリ

未分類 (0)
ニュース (10)
スマートフォン (34)
中華パッド/タブレットPC (104)
ミニPC (25)
マイコン (77)
CNC機器 (16)
アクセサリ (14)
アプリ (9)
実験 (7)
工作 (13)
その他 (12)

月別アーカイブ

最新コメント

リンク

このブログをリンクに追加する

検索フォーム

RSSリンクの表示

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

FC2Ad

Template by たけやん