Tag Archive for ATmega128

Arduino Mega・・・MR-C3024が転用できるのでは?



Make: Japanに「Arduino Mega登場!」の記事が載ってます。

http://jp.makezine.com/blog/2009/03/arduino_mega_spotted.html

搭載されているのは、AVRファミリーの「ATmega1280」で若干の違いはあるものの、基板を見る限り、ほぼ同じスペックではないかと思います。
別途書きますが、大量のポートが必要だったため、最近作った組み込み系のある工作モノで「MR-C3024」を使った経緯があり、ボード自体が安いなら「Arduino MEGA」のボードも代替品として組み込み用に使えるし、逆に「Arduino MEGA」が高いなら、5000円ちょっとで購入できる「MR-C3024」も代替品になるのではないかと思います。

・Arduino MEGA

・Arduino MEGA通販(送料込みで7,350円です。)

・ATmega1280

・ATmega128(L)

http://www.atmel.com/dyn/products/product_card.asp?part_id=2018
一番の違いは、SRAMのサイズが 4096ByteとATmega1280の半分なことです。(I/Oもだいぶ違いますが使わなければいいと思うので)
・MR-C3024の通販(安く買うには・・・)

http://www.de-club.net/rbz/shop.htm
週刊ROBOZAKのバックナンバーが一番安いですね。逆にMR-C3024が購入できなくなったらArduino MEGAを使うという手もありますね。
・AVR USBブートローダー128【基板完成品】/デジット

http://eleshop.jp/shop/g/g7CL412/
ATmega128ならデジットのAVR USBブートローダー128の方が安いという話も。3900円です。
デジットには他にもAVR USBブートローダー168【基板完成品】も。
http://eleshop.jp/shop/g/g7CL411/
こちらは、2700円です。

Make: Tokyo Meeting 03開催だそうです。
以下、

http://jp.makezine.com/blog/2009/03/make_tokyo_meeting_03.html
より引用。
日時:2009年5月23日(土)、24日(日)
会場:デジタルハリウッド 八王子制作スタジオ(東京都八王子市松が谷1番地)
入場:無料
交通:多摩都市モノレール「松が谷駅」徒歩1分 京王線・小田急線「多摩センター駅」徒歩10分

主催:株式会社オライリー・ジャパン 
共催:多摩美術大学 情報デザイン学科





★画像&リンク先:Amazon
Arduinoをはじめよう /
Massimo Banzi (著), 船田 巧 (翻訳)

も出ましたねー

ROBOZAK/ROBONOVA-I(roboBASIC)でアナログ出力ジャイロを使ういくつかの方法

このブログにも何度も書いている内容ですが、ROBOZAK(roboBASIC)で使えるジャイロについてきちんとまとめたことがなかったので書いておこうと思います。(これから書く内容は、外部情報からの推定で、きちんと調べたものではありませんのでご注意下さい。正直専門外で、ど素人なので案外ウソばっかしかも(笑))
そんな状況であえて書くのは、この辺について、もしよくご存知の方がいれば何か情報が得られるかもーという期待からです。
 
● 現在使用できるジャイロについて
現在roboBASICで使用できるジャイロは、元々ラジコン(ラジコンは商標なのでRCと書いた方がいいかも)のヘリ等の姿勢制御に使うジャイロで受信機とサーボの間に挟む形のジャイロです。そのことから推定されるMR-C3024の動作は、下図の上段のようにPWM(Pulse Width Modulation:パルス幅変調)を入力しジャイロの位置変化によるPWMの変化をMR-C3024で読み取っているものと思います。あとでロジックアナライザを使って調べてみようと思ってますが恐らく入力は一定で出力のみ変化しているものと思います。もしそうであれば必ずしも入力のPWMは必須ではない様に思います。(MR-C3024の場合、いろいろセンサー類を付けていくとポートの増設をroboBASICがサポートしていないため深刻なポート不足になりますね。)
12
GWS PG-03 ハイテック Hitec HG-R01 近藤科学 kondo KRG-1 双葉 futaba G190  Micro Piezo Gyro
 
● アナログ出力のジャイロを使うには・・・
上記の通りだとするとジャイロのアナログ出力をPWMに変換してあげるだけです。(事前に上記のPWM出力がどの様に変化するのか調べておく必要ありです。)PWMの発生はそもそもMR-C3024で使われているATmega128ではサーボのコントロール等で行ってますし、同じAVRファミリーやPIC等マイコンでは標準的な機能です。またADポートについても分解能(余談ですがroboBASICで扱えるのは8ビットですが、ATmega128の本来の分解能は10ビットです。Byte型にしたかったんでしょうね。)の違いこそあれ、大抵のマイコンには内蔵されているのでこれも難しいことではありません。あとは1つ前の記事に書いたような3.3Vくらいの出力のジャイロを使う場合、OPアンプなどで出力の調整を行わなければならないかも知れません。(もしかすると10ビットの分解能があるので理論上は675まで検知でき、サーボのコントロールは1バイトで足りるので、レベル変換はいらないかも知れませんが。)
13
アナログ出力:村田製作所製のジャイロ(ENC-03R)など
 
● もっとチカラ技
上記方法の場合、アナログ/PWM変換の回路を作るのに恐らく数百円でできるのでコスト的な問題はありませんが、サイズの問題とポートの問題は残ります。IN側で使わなかったとしても、ジャイロ用の命令を使っている限り、ポートからはPWM信号が出力されてしまいます。
次に考えられる方法は、折角アナログポートがあるのだから直結してしまう方法です。この方法の問題点は、前にも書きましたがroboBASICでは、アナログ値のミキシングの様な機能がないことです。(MANOIにはあります) ミキシングというとちょっとわかりにくいですが、サーボ関係の命令に変数、あるいは定数+変数の様な記述ができれば問題ないのです。かなり省略して書きますが、例えば、MOVE G24, ・・・100+GYRO#1*100みたいな記述ができれば、ジャイロ関係の命令を使わなくても記述できます。

ではどうすればいいか?
いくつか方法がありますが、まず1つ目の方法は、MOVEをコンパイル(Pコード変換)した結果を実行時にダイナミックに書き換える方法です。記述がわかりにくくなることと元の値をどこかに控えておかなければならないので、roboBASICを使う限りはあまりいい方法ではありません。しかし、コンパイル時、この機能を盛り込んでオブジェクトを生成すれば、コーディングのみの変更でできるものと思います。 次の方法は、ゼロポイントの設定(テーブル)を書き換える方法です。ダイナミックにゼロポイント設定の値が反映されるかどうかわかりませんが、これはコーディングを変えればできそうな気がします。PEEK/POKEを使うので関係ないところを書き換えるととんでもないことが起こりそうです(笑) もう1つの方法は、roboBASIC自体にパッチを当てて、ADポート値をジャイロの関係の命令に反映させることです。つまり拡張命令を作ってしまうということです。 手順としては、(1)roboBASICを吸い上げるか、アップデート用のモジュールを入手する。・・・後者の方が楽かも。 (2)roboBASIC自体を逆アセンブルする・・・AVRはオブジェクトがわかりやすいので逆アセンブラを作るのも案外簡単かも。逆アセンブラ自体は、昔いくつも作っているので時間さえあればできます。 (3)パッチ作成・・・逆アセンブルしたコードに組み込んでアセンブルするか、文字通りパッチで外だしにするかです。(この手のリバースエンジニアリングが利用規約に照らしてどうかは別にして、前者は著作権の関係で公表できないですが、後者なら該当部分の公表はできそうです。)

14
 
※公開されている逆アセンブルソース(?)もないこともないですが・・・

 
・・・とまぁ やりたいことは沢山あるのですが、時間は有限、本業の会社経営はおろそかにできないし、なので簡単にできそうなことからやっていこうと思います。まだ詳しい案内がありませんが、来月後半には、MANOIアスリートカップもありそうなので、できれば出場し前回(12月に)ボロ負けした雪辱を果たしたいと思ってます。そうするとROBOZAKは少しお休みしなければならないので、少し先になってしまうかも知れません。
 
PS 昨日、クラリネットを購入しました。(この記事は書きかけです。) ライブ関係の記事も途中まで書いてあるのですが、きちんとまとまってないのでアップできずにいます。 時間を見てこっそりとアップしていきます。(笑)

やっぱり AVR・・・かなぁ。

注文してから1週間ほどかかりましたが、AVR関連のマイコン、その他が届きました。 マイコンも今回は色んなバリエーションを購入してます。とりあえず使
えそうなのは2個ずつ買っておこうと。(←かなりアバウトです。(笑))  通常なら秋葉原に行っちゃうところですが、ここ10日くらいは、夜昼なく働いていたのでそんな余裕もなく通販で片っ端から注文したという感じです。 PIC-BASICで作りかけのボードがありますが、あれはあれとして、最終的にはAVRで作ろうかと思ってます。
色んなサイトでPIC vs. AVRみたいな記事がありますが、後発な分、書籍が少なかったり、ラインナップが少なかったり・・・は、確かにありますが、アーキテクチャが洗練されていて(PIC用のコンパイラが何故作りにくいのかが分かります)、同じクロックなら4倍速い(というより平均4クロックかかるPICが遅いんですが)AVRに分があるように思います。
自宅にはLinuxサーバが3台あるので、クロスの開発環境は、gcc-avr でいいかなぁ・・・と。(インラインアセンブラも使えるんですね) ライタはAVRの場合特別な電源はいらないので「100円ライタ」と呼ばれる簡易ライタが使えそうですが、USB直結のライタを買いました。
AVRといえば、ATmel mega128Lを使っている「MR-C3024」の回路図を見ていて思いましたが、これがどちらのモード(シリアル or パラレル)で書かれたものかわかりませんが、サーボ用の信号線で書き込みできちゃいますね。
 
■しばらく更新してなかったので最新パッケージ適用中のLinuxサーバ
46
 
■AVR関連のパッケージを検索してみると・・・
# apt-cache search  avr
ava – Algebraical Virtual Assembler for Atmel’s AVR MCUs
avarice – use GDB with Atmel’s JTAG ICE for the AVR
avr-libc – Standard C library for Atmel AVR development
avra – Assembler for Atmel AVR microcontrollers
avrdude – software for programming Atmel AVR microcontrollers
avrdude-doc – documentation for avrdude
avrp – Programmer for Atmel AVR microcontrollers
binutils-avr – Binary utilities that support Atmel’s AVR targets.
gcc-avr – The GNU C compiler (cross compiler for avr)
gdb-avr – The GNU Debugger for avr
libgringotts2 – encapsulate data in an encrypted and compressed file
sdcc – Small Device C Compiler
sdcc-doc – Small Device C Compiler (documentation)
sdcc-libraries – Small Device C Compiler (libraries)
simulavr – Atmel AVR simulator
traceroute-nanog – Determine route of packets in TCP/IP networks (NANOG variant)
uisp – Micro In-System Programmer for Atmel’s AVR MCUs
 
■Debianのパッケージ

■インラインアセンブラ関連

・・・使う必要があるかどうかはまだわからないけどあれば安心
 http://ww2.tiki.ne.jp/~maro/AVR/programing/AvrGccInLineAsm.html

■秋月電子通商

・PIC関連 ・・・187件ヒット(3/1現在)

・AVR関連

・・・25件ヒット(3/1現在)件数は少ないけど必要なものはある
http://akizukidenshi.com/catalog/items2.php?q=AVR&submit=%B8%A1%BA%F7

・ATMEL AVRスタータキット [STK-500]

■共立エレショップ

■AVR vs. PIC 関連サイト

・ATMEL AVRで遊ぶ – PICを捨ててAVRを使おう
 http://www.mtl.t.u-tokyo.ac.jp/~iizuka/avr/
・いますぐPICをやめてAVRに移行すべき10の理由
 http://d.hatena.ne.jp/yaneurao/20080228

 
■gcc-avrのインストール・・・適当に必要そうなものを(笑)
# apt-get install gcc-avr
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
以下の特別パッケージがインストールされます:
  binutils-avr
提案パッケージ:
  task-c-devel gcc-doc
以下のパッケージが新たにインストールされます:
  binutils-avr gcc-avr
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
6794kB のアーカイブを取得する必要があります。
展開後に追加で 16.0MB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 ftp://ftp.dti.ad.jp stable/main binutils-avr 2.16.1-1 [2713kB]
取得:2 ftp://ftp.dti.ad.jp stable/main gcc-avr 1:4.1.0.dfsg.1-1 [4081kB]
6794kB を 41s で取得しました (165kB/s)
未選択パッケージ binutils-avr を選択しています。
(データベースを読み込んでいます … 現在 69695 個のファイルとディレクトリがインストールされています。)
(…/binutils-avr_2.16.1-1_powerpc.deb から) binutils-avr を展開しています…
未選択パッケージ gcc-avr を選択しています。
(…/gcc-avr_1%3a4.1.0.dfsg.1-1_powerpc.deb から) gcc-avr を展開しています…
binutils-avr (2.16.1-1) を設定しています …
gcc-avr (4.1.0.dfsg.1-1) を設定しています …

# apt-get install avr-libc avra gdb-avr simulavr binutils-avr
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています… 完了
binutils-avr はすでに最新バージョンです。
提案パッケージ:
  avrp gdb-doc toolchain-source
以下のパッケージが新たにインストールされます:
  avr-libc avra gdb-avr simulavr
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 0 個。
4503kB のアーカイブを取得する必要があります。
展開後に追加で 14.5MB のディスク容量が消費されます。
取得:1 ftp://ftp.dti.ad.jp stable/main simulavr 0.1.2.2-5 [89.2kB]
取得:2 ftp://ftp.dti.ad.jp stable/main avr-libc 1:1.4.5-2 [2302kB]
取得:3 ftp://ftp.dti.ad.jp stable/main avra 1.0.1-0.1 [51.0kB]
取得:4 ftp://ftp.dti.ad.jp stable/main gdb-avr 6.4.90.dfsg-1 [2061kB]
4503kB を 29s で取得しました (153kB/s)
未選択パッケージ simulavr を選択しています。
(データベースを読み込んでいます … 現在 69835 個のファイルとディレクトリがインストールされています。)
(…/simulavr_0.1.2.2-5_powerpc.deb から) simulavr を展開しています…
未選択パッケージ avr-libc を選択しています。
(…/avr-libc_1%3a1.4.5-2_all.deb から) avr-libc を展開しています…
未選択パッケージ avra を選択しています。
(…/avra_1.0.1-0.1_powerpc.deb から) avra を展開しています…
未選択パッケージ gdb-avr を選択しています。
(…/gdb-avr_6.4.90.dfsg-1_powerpc.deb から) gdb-avr を展開しています…
simulavr (0.1.2.2-5) を設定しています …
avr-libc (1.4.5-2) を設定しています …
avra (1.0.1-0.1) を設定しています …
gdb-avr (6.4.90.dfsg-1) を設定しています …

 
■コンパイルのテスト
<Cのソース>
# more main.c
main( ) { int a; a=1; }  ・・・超短っ!

<Cのコンパイル>
# /usr/libexec/gcc/avr/4.1.0/cc1 main.c

<コンパイル結果>
# more main.s
        .file   "main.c"
        .arch avr2
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
        .global __do_copy_data
        .global __do_clear_bss
        .text
.global main
        .type   main, @function
main:
/* prologue: frame size=2 */
        ldi r28,lo8(__stack – 2)
        ldi r29,hi8(__stack – 2)
        out __SP_H__,r29
        out __SP_L__,r28
/* prologue end (size=4) */
        ldi r24,lo8(1)
        ldi r25,hi8(1)
        std Y+2,r25
        std Y+1,r24
/* epilogue: frame size=2 */
        rjmp exit
/* epilogue end (size=1) */
/* function main size 9 (4) */
        .size   main, .-main
/* File "main.c": code    9 = 0x0009 (   4), prologues   4, epilogues   1 */

 
■AVRのライタやらマイコンやら。
R0011456

※追記

■FTDI BitBang AVR-Writer


http://www.geocities.jp/arduino_diecimila/avr-writer/index.html


USBシリアル変換モジュール AE-UM232R 950円(秋月)でできちゃうAVRライタです。