夢色☆あんどろいど

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

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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使いたさにライタ買って...という後の展開が少し違ったものになっていたかも?... 遅ればせながら、これから愛用させていただきたいと思います。



ArduinoをBASCOM-AVRで使う

うちではBASCOM-AVR(デモ版)を、ATtony13AとかATMega8のようなArduino IDEでは扱いにくいチップ用に使っています。無料のデモ版なので4KB以内の制限がありますが、どうせそんなに大きなプログラムが組める技量もありませんし学習用としてはこれでも十分すぎるぐらいです。

そもそもBASCOM-AVRには対応したライタが必須と思い込んでいて、だから何の疑いもなくUSBaspを使っていますが、ある時[Option]の[programmer]のリストを見ていて「ARDUINO」という選択肢があることに気付きました。実のところ、ArduinoでBASCOM-AVRを使いたい切実さは今のところないのですが、使えるにこしたことはないし、特別なライタなしで使えるのはBASCOM-AVRの敷居を大きく下げることになると思いますので、ちょっと調べてみることにしました。

まずはネット上での事例調査。日本語の情報は極めて少ないですが海外での「やってみた」的な事例紹介はけっこうあります。BASCOM-AVR開発元のMCSの解説記事↓も見つけました。
https://avrhelp.mcselec.com/index.html?arduino.htm

ただ、率直に言わせて貰うと「よ~判らん!」という感じてあんまり要領を得ません。搭載しているブートローダによって可否があるようなんですが、具体的にどの機種がどうだ…というのがよく判りません。

続いて、手持ちのArduinoで実際に試してみました。すべて互換機か自作機で純正品がないのは情けない限りですが、結論を先に言うと、Duemilanove、NANO、ProMini用内蔵RC8MHzブートローダを積んだ自作機は下記の手順でプログラマを「ARDUINO」に変更すればごく普通に使えました。
UNOについてはこのままではダメで、avrdude.exeを外部プログラマに使う方法で使えました。UNO、NANOは複数種類で確認しています。自作機で168P版も試してみましたがそちらはダメでした。
以上のことから、328Pを搭載したUNO、Duemilanove、NANO、ProMiniはBASCOM-AVRから直接プログラムの書き込みが可能であると推定されます。

とりあえず使えることが判りましたので簡単に設定方法をまとめておききます。

■Duemilanove、NANO、ProMiniの場合

(1) Arduimoボードを接続し、Arduimo IDE等を起動して、使用しているCOMポートを調べておきます。

(2) BASCOM-AVRを起動して、[Option]>[programmer]を開き、「programmer」を「ARDUINO」に設定して、COMポート番号を事前に調べておいた番号に、ボーレートを57600に設定します。

a2018030401.jpg

(3) プログラムをコンパイルしてから、[Program]>[Send to chip]を開き[Chip]>[Identify]とした時にチップ名等が正確に表示されれば書き込み可能です。あとは通常通りに[Auto program]で書き込み完了です、

a2018030402.jpg

■UNOの場合

(1) Arduimoボードを接続し、Arduimo IDE等を起動して、使用しているCOMポートを調べておきます。

(2) BASCOM-AVRを起動して、[Option]>[programmer]を開き、「programmer」を「External programmer」に設定して、
avrdude.exeの場所を指定、ユーザーパラメータを入力、「Use HEXfike」をオンにします。
ユーザーパラメータは
-v -F -C [avrdude.confのある場所のドライブ:\フォルダ]\avrdude.conf -p m328p -P com00(COMポート番号) -c arduino -b 115200 -Uflash:w:{FILE}:a

avrdude.exeとavrdude.confはArduino IDEをインストールしたフォルダ下のhardware\tool\avr\binとetcにそれぞれありますが、上記MCSのサイトの例にあるようにどこか単純なパスの位置にひとつにまとめた方が扱いやすいと思います。

a2018030403.jpg

(3) プログラムをコンパイルしてから、[Program]>[Send to chip]をクリックすると黒い別画面が出てavrdudeが動作してボードに書き込みを行います。

実際に書き込んでみましたがブートローダを上書きするようなこともなく、Arduino IDEと交互に使って大丈夫でした。ただし、デモ版の範囲を超えるような大きなプログラムでは試せていませんので、その辺はまだよく判らない部分として残ります。あと、MEGA2560系が不明なのですが、MCSの説明ではプログラマを「ARDUINO STK500v2」にしたら行けそうなことが書かれています。

BASCOM-AVRと言えば、特別なプログラムライタ必須のイメージが強くて初心者には手を出しにくい雰囲気があります。しかしそれがライタなしで直接Arduinoも使えるとなると話は違ってくると思います。ユーザの裾野が広がって情報がもっと増えてくれると有り難いです。
まあ、私としてはArduinoのボードのハードウェアがそのまま使えるのが嬉しいです。UNOだったらACアダブタを使えば3電圧電源にもなりますので模型の制御とかには便利です。
「ArduinoはArduino IDEとBASCOM-AVRとの併用で」が定石になってくれると良いですね!

Arduino上で動くTimyBASICでサーボモータを回してみる

生チップ版のテレビ出力も解決したところで、本家サイトのカリキュラムにしたがってお勉強を進めています。
いやぁ~、変数の宣言やピンアサインをしなくていいのは気楽ですね~! まあ、この辺はIchigoJamでも同じですけど、こちらは5Vも3.3Vもボードから取れるのでテスト回路を作りやすい点がより初心者向けだと思います。ただ、テレビ、キーボードが使えるシステムだと使えるポートが限定され、そのポートがサンプルプログラムで使われていたりしますので、通常はタイプ0のシステムを使った方がより簡単です。

このTinyBASICはHalfByte TinyBasicをベースにより電子工作に適した独自拡張を施したもので、いくつかの専用命令が追加されていますが、その中でもモータ制御に関する命令の簡便さは目を見張るものがあります。残念ながらDRV8830モジュールは持っていないので、今回はサーボモータで実験してみました。

使用したサーボモータはTowerPro SG90という製品でラジコンのヘリコプターとかに使用する重量僅か9グラム、駆動電圧は4.8Vとのことです。ただし、これは1.65ドルと妙に安く、商品ラベルが歪んでいたりするので本物かどうかは定かではありません。まあ、動作自体は普通に動きます。

A2018021901.jpg

A2018021903.jpg

サーボモータの制御は Servo 出力ポート番号.角度(0~180) とするだけ! ゆっくり動かしたい時は、For文とかで1度ずつ動かしながらDelayで間を入れればいい。ライブラリも定義文も一切不要で、非常に直感的です。あのIchigoJamでももう少し手間がかかりますから、私の知る限り最も簡単!ではないかと思います。

↓せっかくなので動画を撮ってみました。ゆっくり30度刻みで往復~1.8秒で半回転、逆回転~全力で半回転、逆回転・・・という他愛のないものですが、角度ばかりか所要時間までもが簡単に設定できるのが良いでする!


DCモーターの制御も画期的に簡単そうで、DRV8830モジュールが欲しくなりました! 実は目下の研究開発テーマを鉄道模型の制御としているのですが、この辺の機能を組み合わせるとちょっとした自動運転が至極簡単に出来そうな矧がします。


« 新しい記に行く  | ホーム |  古い記に行く »

文字サイズの変更

プロフィール

よっしい

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

最新記事

カテゴリ

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

月別アーカイブ

最新コメント

リンク

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

検索フォーム

RSSリンクの表示

ブロとも申請フォーム

この人とブロともになる

QRコード

QR

FC2Ad

Template by たけやん

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。