Counter: 5932,
today: 2,
yesterday: 9
教材作成に有用な情報や組込み技術の情報が共有できればと考えています.
※ 本サイトの掲載内容を利用して発生した損害,障害の責は負いませんので悪しからず.
「掲示板」(マイコンおよびコンピュータ全般) †
新規の記事は、新掲示板 をご利用ください。
このページはPICマイコン(18F14k50)用に開設しました。このマイコンに関する情報交換に
ご活用ください。
ATtiny2313による Arduinoを考える †
senshu (2009-10-12 (月) 20:40:28)
dude-wrapで実用的に使えるようになった Arduino(ATtiny2313)ですが、現状では情報が
不十分です。そこで、ここに整理したいと思います。
追記(2009-1013 17:35)
dude-wrapを改定しました。ファイル名を指定しなかった時に表示されるメッセージを
適正に処理し、機能強化や説明の追加を行っています。ぜひ、1013版以降で評価して
ください。
■ 回路図(WSN216の場合の接続例、ISPコネクタの配線時に参考のこと)
ATtiny2313
___ ___
RESET [1 |__| 20] Vcc
PD0(RxD) [2 19] PB7(SCK)
PD1(TxD) [3 18] PB6(MISO)
XTAL2 [4 17] PB5(MOSI)
XTAL1 [5 16] PB4
PD2(BOOT JUMPER) [6 15] PB3(BUSY LED)
PD3(D+) [7 14] PB2(READY LED)
PD4(D-) [8 13] PB1
PD5(USB pullup) [9 12] PB0
GND [10 11] PD6
~~~~~~~~~~~
※ Vcc-GND間に0.1uFのパスコンを実装し、RESETピンを10kΩ程度でプルアップします。
RC発振で動作させるので、XTAL1,2(PA0,1)はI/Oとして利用できます。
ATtiny2313用ライブラリ(ダウンロード)
入手した「attiny2313_core.zip」を展開して得られたファイル群を、
Arduino-00**\hardware\coresにattiny2313というディレクトリを用意し、
コピーします。I/Oピンの割り当てやFUSE設定は以下のとおりです。
■ ピン割り当て
// ATMEL ATTINY2313(このマイコンにはA/D入力ピンはありません)
// +-\/-+
// RESET PA2 1| |20 VCC
// RX (D 0) PD0 2| |19 PB7 (D 16)(SCK)
// TX (D 1) PD1 3| |18 PB6 (D 15)(MISO)
// (D 2) PA1 4| |17 PB5 (D 14)(MOSI)
// (D 3) PA0 5| |16 PB4 (D 13)
// INT0 (D 4) PD2 6| |15 PB3 (D 12)(BUSY LED)
// INT1 (D 5) PD3 7| |14 PB2 (D 11)(READY LED)
// (D 6) PD4 8| |13 PB1 (D 10)
// *(D 7) PD5 9| |12 PB0 (D 9)
// GND 10| |11 PD6 (D 8)
// +----+
■ サンプルプログラム
// LED (PB1)の点滅
int led0Pin = 10; // LED ATtiny2313 PB1
void setup() // run once, when the sketch starts
{
pinMode(led0Pin, OUTPUT); // sets the digital pin as output
}
void loop() // run over and over again
{
digitalWrite(led0Pin, HIGH); // sets the LED on
delay(500); // waits for a second
digitalWrite(led0Pin, LOW); // sets the LED off
delay(500); // waits for a second
}
■ Fuse設定
Low: 11100100 (0xe4)
||||++++-- CKSEL[3:0] システムクロック選択
||++-- SUT[1:0] 起動時間
|+-- CKOUT (0:PD2にシステムクロックを出力)
+-- CKDIV8 クロック分周初期値 (1:1/1, 0:1/8)
High:10-11101 (0x9d)
|||||||+-- RSTDISBL (RESETピン 1:有効, 0:無効(PA2))
||||+++-- BODLEVEL[2:0] (111:Off, 110:1.8, 101:2.7, 100:4.3)
|||+-- WDTON (WDT 0:常時ON, 1:通常)
||+-- SPIEN (1:ISP禁止, 0:ISP許可) ※Parallel時のみ
|+-- EESAVE (消去でEEPROMを 1:消去, 0:保持)
+-- DWEN (On-Chipデバッグ 1:無効, 0:有効)
Ext: -------1 (0xff)
+-- SPMEN (SPM命令 1:無効, 0:有効)
■ programmers.txtに追加するデータ(工場出荷時のAVRに対応)
hidspx.name=hidpsx
hidspx.protocol=hidspx,-d4
■ boards.txtに追加するデータ
##############################################################
attiny2313.name=My Arduino w/ ATTINY2313
attiny2313.upload.protocol=hidspx,-d1
attiny2313.upload.maximum_size=2048
attiny2313.upload.speed=19200
attiny2313.bootloader.low_fuses=0xe4
attiny2313.bootloader.high_fuses=0x9d
attiny2313.bootloader.extended_fuses=0xff
attiny2313.bootloader.path=attiny2313
attiny2313.bootloader.unlock_bits=0xFF
attiny2313.bootloader.lock_bits=0xCF
attiny2313.build.mcu=attiny2313
attiny2313.build.f_cpu=8000000L
attiny2313.build.core=attiny2313
■ FUSEの設定方法
上記の修正(Arduino IDEが起動していない時に作業すること)を行った後に、
「ツール」⇒「ブートローダを書き込む」⇒「w/hidspx」でFUSE設定を書き込むことが
できます。設定ミスが懸念されるFUSE設定も、このシンプルな操作で完了します。
FUSE設定は、RC発振、8MHz動作です。これによりI/Oピンが2本増加し、配線の手間も減り
コストも下がります。
この設定により、HIDaspxでの書き込みも高速なモード(-d1)を指定できます。(一度だけ
実行すればOKです)
またデータをEEPROMに蓄えることを想定し、スケッチ書き込み時にも変化しないのがよいと
考えました。なお、UART通信を利用時は、AVRマイコンの動作電圧と発振周波数の依存
性を考慮する必要があります。
■ 「ブートローダを書き込む」を選択した時の表示
#=> hidspx -d4 -ph --new-mode -d4 -e -l0xFF -fX0xff -fH0x9d -fL0xe4
Detected device is ATtiny2313.
Erased.
Fuse Low byte was programmed (0xE4).
Fuse High byte was programmed (0x9D).
Fuse Extend byte was programmed (0x01).
Lock bits are programmed (0xFF).
#=> hidspx -d4 -ph --new-mode -d4 -l0xCF
Detected device is ATtiny2313.
Lock bits are programmed (0xCF).
■ boards.txt設定時の留意点
(1)「.name=My Arduino w/ ATTINY2313」の右辺は、自分にとってわかり易い文字列
を書いてください。記号や特殊文字は使わないでください。
(2) 「upload.protocol=hidspx,-d4」の「-d4」は8MHzで動作時は「-d1」が最適値で
すが不適切なFUSE設定(例えば工場出荷時のFUSE設定)では書き込みエラーになり
ますので、「ブートローダを書き込む」を選択し、FUSE情報を設定してください。
なお、「-d1=8M, -d2=4M, -d3=2M, -d4=1M, -d5=500kHz」に対応します。
(3) ブートローダは不要なので「upload.maximum_size=2048」とし、全領域を
スケッチに利用します。
(4)「.upload.speed=19200」 も不要ですが、気休めで残しています。
(5) hidspxで書き込む場合にはブートローダは不要なので、ブートローダファイル
指定は不要です。ATmega168などでもファイル指定を省略可能ですが、その際も
空のHEXファイルを割り当てるのが無難です。
(6)「bootloader.***= 〜」は、ブートローダを書き込む場合にのみ参照されます。
(7) UploadではFUSEを操作することはありませんので、購入したAVRマイコンを利用す
前に、最低でも一回はブートローダの書込み操作でFUSEを設定してください。
(8) 「bootloader.unlock_bits」、「bootloader.lock_bits」は、hidspxが初期化を
行う関係で、Tiny2313では意識する必要はありません。
(9) 「build.f_cpu=8000000L」は実行時間の特定に使われます。FUSE設定に合わせ、
的確に設定してください。
2009年9月以降のhidspxでは、FUSE設定チェックし不適切なFUSE設定を拒否します。
その為、何度でも(安心して?)試行錯誤ができます。(外部発振への切り替え時は、
ハード構成に注意し、完全に配線されていることを確認の上、FUSEを設定してください)
AVRマイコンは、適切なFUSE設定を行うことで希望の動作をするようになります。
工場出荷時の値では、最小限の動作であることを理解し、最適なFUSE設定で動作させ
てください。
その他、お気づきの点があれば、コメントをお寄せください。
senshu
dude-wrapの機能強化も一段落です。
dude-wrapによって、Arduinoとhidspxの連携が可能になりました。ATtiny2313ですら、
hidspxが利用できる環境であれば、Arduino IDEから通常とおり利用できます。USBコネ
クタを挿すだけの本家に比べると若干接続は面倒ですが、ISPコネクタを備えたボードな
ら、ほとんど変わらずに利用できます。
dude-wrap使用上の注意点 †
senshu
dude-wrapは、ATtiny2313専用ではありません。hidspxがサポートするAVRマイコンを
利用できます(Arduinoがサポートするかは不明ですが)。利用に先立ち、適合するボード
を正しく選択してください。boards.txtに自分でパラメータを追加すれば、該当がない場
合でも利用可能になります。
dude-wrapによりArduinoの利用範囲が拡大し、その成果が公開されることを願っています。
senshu
現在公開中の dude-wrapは、ATtiny2313用のライブラリ(GPL)を同梱しています
ので、公開中のdude-wrapのみで利用を開始できます。
kawana?
ピン割り当てのVCC 20の誤記と思います。
面白い記事有難うございます。ATtiny2313でも可能か不安に思っていました。
製作して、勉強して見ようと思います。
senshu
Vccのピン番号は修正しました。Arduinoは、以前から指摘してるように、WinAVRを
丸ごと含んだ開発環境です。ブートローダ部の完成度が低いので、このような
方式のほうが使い勝手は上だと思います。
製作するほどのものではなく、必要なのは、ブレッドボードにAVRマイコンを
挿しこみ、ISPの配線を行うだけです。
手軽に試すことができます。
OGURAMさんも書いていますが、Arduono-018を利用すれば、アップデートの
手間はかなり、少なくなります。お試しください。
ポータブルなAVRマイコン開発環境を実現する(案) †
senshu (2009-10-12 (月) 12:10:45)
Arduino IDEにhidspx, dude-wrapをシームレスに組み込めるように、dude-wrap
のコードを修正を検討しています。
これが完成すれば、USBメモリに展開するだけで実行できるようなります。
単にUSBメモリコピーするだけで動作可能な開発環境を提供できるわけです。
ATtiny2313用のライブラリもGPLで公開されているので、若干の手直し程度でパッケージ
ングすれば、目的を達成できます。PCとの通信機能が不要なら、入門者には十分な教材
になると思います。
ATtiny2313やATmega88,168,328,644などに対応し、多くのライブラリが使え、さらに
HIDaspxを利用すればドライバのインストール不要で利用できます。高品質なコードを
生成するメモリサイズの制限がない開発環境が無償で利用できるのです。
幸い、Arduinoのメニューも日本語化が行われており、シンプルな操作画面と相まって
入門者用の開発環境として推薦できます。
ただし、大量の解説書が英文であり、HIDaspxではPCとの通信が実現できず、現状では
PCとの通信には別のUSB-シリアル変換モジュールが必要です。
この解決にはHIDaspxの機能強化版 が必要です。残念なことにATtiny2313ではメモリ
に全く空きが無く機能強化の余地はありませんが、PIC18F14k50などを採用すれば実現
可能と考えています。必要を感じた方が作るべきなのですが、私は今のところ時間が確保
できません。
既にirukaさんは、数ヶ月前に18F14k50とAVRマイコンでArduino400を実現されています。
「Arduino400」↓
http://hp.vector.co.jp/authors/VA000177/html/Arduino400.html
この18F14k50にHIDaspx機能を持たせることができれば、目標は達成できるわけです。
irukaさんがArduino400を構成した時に比べれば情報は整っており、やる気だけの問題
だと思います。HIDaspxが現在のレベルに仕上げるのに一年掛かっていますが、C言語で
書いた実績のあるコードがあるので一・二週間、集中すれば実現可能と考えます。
私的な考えですが、モード切替により、AVRライタ/PICライタ/USB-シリアル/USB-MIDI/
USB-I2Cなどの万能アダプタを実現したいと思っています。
「PIC 18f14k50 based USB WISP programmer」↓
http://jallib.blogspot.com/2009/08/pic-18f14k50-based-usb-wisp-programmer.html
最初は欲張らず、段階的に進めるべきですが、18F14k50はこれらを組み込める潜在能力
があります。irukaさんのBootLoaderを組み込めば、更に可能性は広がります。
やる気のある方、挑戦してみませんか?、成果を楽しみにしております。
senshu
dude-wrapを修正し、hidspx.exe , hidspx.ini をavrdude.exe(dude-wrapの別名)
コピーしておけば、そのhidspxを起動できるようにコードを修正しました。
これにより、Arduino-0017のフォルダをUSBメモリにコピーするだけで動作するAVR
マイコンの開発環境として利用できます。
通常は、fuse.txtなども参照しますが、dude-wrapからはこのファイルにアクセス
することはありません。
お名前:
「NXT」に自作の電光掲示板を接続 †
senshu (2009-10-10 (土) 00:57:32)
PICやAVRの巧みな製作本で有名な松原さんの作品です。
「ドットマトリックスLEDをインテリジェントブロックNXTに接続する」
http://d.hatena.ne.jp/nicotakuya/20090830/1251652206
かなり電力を消費しそうですが、表示効果もあり、興味深いです。
お名前:
18F14k50採用の「Beauto Racer」の回路図 †
senshu (2009-10-09 (金) 22:58:03)
秋月電子からも購入可能PIC18F14k50を採用したライントレースカー「Beauto Racer」の
回路図を解析して作成しました、という記事を見つけました。
「Beauto Racerの簡単回路図」 ↓
http://plaza.rakuten.co.jp/acnxt/diary/200907210000/
回路図を拝見すると標準的な回路に近い構成ですが、VUSB周りが気になります。この回路だ
と上手く動作しないような気がします。
このマイコンカーは、USB経由でのプログラム書込みができ、走行時は単三電池一本で動作
する優れものです。
もしかすると、電池動作時はクロックを落としているのかもしれません。
さらに詳しい調査が望まれます(可能ならメーカーに回路図を公開して欲しい)。
お名前:
ArduinoとWinAVRの関係 †
senshu (2009-10-08 (木) 10:17:14)
ArduinoにはWinAVRが丸ごと含まれていますが、その存在が希薄です。
内部でひっそりと呼び出しているため、WinAVRを使っている、という印象が
ないのです。
ちょっとだけ閃きましたが、同じような仕組みを用意すれば、AVRマイコン用の
簡易言語(BASICなど) ==> C言語 のトランスレータを用意すれば各種の
言語を実現できると思われます。
エラー処理が面倒なので、直接C言語で書く方が良いのですが、それが困難な
場合もあるかもしれません。
特定の機能のみを用意したBASICモドキの言語の変換ならperlやawk、rubyなど
でも数十行程度で実現可能だと思います。
思ったらやればという声は敢えて無視します。楽しみを奪うのは避けたいのです。
お名前:
hidspxが利用できるArduinoの魅力とは何か †
senshu (2009-10-08 (木) 10:02:14)
dude-wrapにより、Arduinoから、hidspxを使った書き込みが可能になりました。
これは大きな進歩ですが、ArduinoとAVR studioとの違いは何かなど新たな疑問が
出てきます。
Arduinoにはデバッグ機能がなく、AVR studioではデバッグが可能です。
総合的に考えると開発ツールとしての機能はAVR studioの方が格段に上です。
一方、Arduinoの優れている点は、各種のライブラリが利用できる点にあります。
そして、既に多くのサンプルが公開されています。また、シールドと呼ばれる各種
拡張基板も入手できます。
これらの点を総合すると、AVRマイコンを意識することなく、Arduinoがカバー
する範囲内でスケッチする場合に有効に利用できるのだと考えます。
Arduinoは、C言語の標準ライブラリ以外は自分で書ける人には必要性は
あまりありませんが、豊富なライブラリを利用できる点が魅力です。
hidspxを併用すれば、AVRマイコンチップとブレッドボードを使って
Adruino類似の利用が可能になるのです。
自作時のトラブルの多くはブートローダにあったと思いますが、工場出荷状態の
AVRチップをさせば利用可能なのですから、自作の敷居はグンと下がります。
ここは試してみる価値があると思います。
そして、不満が生じたら、AVR studioに移行することも可能です。本格的な開発
のトレーニング用と考えれば、かなりのものだと思います。
OGURAMさんの追試記事 †
お名前:
MPASMWINをwine(Linux)で動作させる †
senshu (2009-10-04 (日) 20:52:58)
irukaさんがLinux上でmcc18を動作させる試み(wineを利用)を紹介しています。
しかし、mpasmwinが窓を開くため、上手く動作しないとも書いています。
「mcc18をLinux上で動かす」↓
http://hp.vector.co.jp/authors/VA000177/html/2009-09.html#v0d65843
mpasmwinのオプションは以下のようになっているので、「/s- 」を指定すれば窓表示無し
で動作するように思います。
MPASM 5.33 (c)1993-2009 Microchip Technology Inc./Byte Craft Limited
MPASMWIN sourcename [options]
Syntax: MPASMWIN [[/options[+|-|argument]] source_file[.asm]]
(+ Enables option - Disables option)
Options: Default
/? or /h Display help menu none
/a<format> Generate absolute hex file of type format, INHX32
where format is: INHX8S, INHX8M, or INHX32
/c Enable or disable case sensitivity to symbols on
/d<define> Defines assembly run time variable (/dvar[=value])
/e<path> Enable or disable error file on
/l<path> Enable or disable listing file on
/m Enable or disable macro expansion on
/o<path> Specify path for object files (/oc:\temp) off
/p<procsr> Specify processor type, where procsr like 16C54 none
/q Enable or disable quiet mode (suppresses screen output) off
/r<radix> Specify default radix where radix is: hex, dec or oct hex
/s Show progress window while assembling on
/t<size> Specify tab size
/w<level> Specify level of warnings to appear in listing, where 0
level is: 0 (all), 1 (warnings & errors), or 2 (errors only)
/x<path> Enable or disable cross reference file off
試していないのですが、いかがでしょうか。>irukaさんへ
残念な結果 †
senshu
telnet(SSH?)で使えると便利なことも多いと思うのですが、単なる進捗表示の窓の為に
こうした制約が生じるのはどうしたものでしょうね。
/sオプションは、Window表示を抑止できるので、こうした制約を回避できると考えました
が、違ったようで残念です。また、以前はmpasm.exeという窓を表示しないものもあったの
ですが、今では保守されていないようです。
お名前:
「PIC18F4550 USBマイコンボード 完成品」 †
senshu (2009-09-30 (水) 18:06:47)
irukaさんが、秋月電子で販売が開始された「PIC18F4550 USBマイコンボード 完成品」
を話題にしています。実は、入手不可能なら私がボードを用意したいと思っていた
ものに近いモジュールです。
http://hp.vector.co.jp/authors/VA000177/html/2009-09.html
この価格なら、ArduinoやGainerよりも実用性は高いと思います。
今では、irukaさんが改良を加えたHID BootLoaderが利用できますので、
書き換えも容易です。RESETスイッチさえ追加すれば、Arduinoライクな
環境を用意できるわけです。
これは、要注目ですね。(2ヶ月前に18F4550 DIPを30個ほど購入したばかりなのですが、、、)
お名前:
PICGAMES.ORG が回復しました †
senshu (2009-09-29 (火) 20:59:33)
UBWなどの解説ページがある http://www.picgames.org/ が接続できるように
なりました。
不通の原因はわかりませんが、回復はめでたいことです。
お名前:
hidspxの更新に関するメモ †
senshu (2009-09-29 (火) 20:17:48)
hidspxの公開、一周年を記念?して、Arduino対応などの拡張を行ってみました。
ArduinoはBootLoaderでフラッシュメモリが更新できる点が大きな利点ですが、
XBeeなどを接続した場合のフラッシュ更新は面倒なものでした。今回の更新でこの
問題を解決することができました。また、ATtiny2313なども、Arduino IDEから
利用することもできます。
Arduinoは、avrdudeを内部で呼び出していますが、avrdudeに換えて hidspxも
利用可能にしてみました。若干の仕様の違いは、hidspxを修正して解決しました。
これによって、Arduinoで、BootLoaderやHEXファイルのアップロードが可能に
なりました。
今回の改訂(--show-specオプションの追加)で、hidspx.iniが無い場合の読み書きが遅い
のは -phの時に限ることがわかり、デフォルト値を適正に反映するように修正しました。
更新を繰り返すとバグを埋め込んでしまうことも多いのですが、機能の強化は段階的に
行っているため、今回の一連の更新により「信頼性は向上した」と考えています。
追記(2009/09/30 18:35:03)「hidspx-2009-0929.zipのDL状況」
登録日時:2009/09/29 10:38:14
アクセス数:22
10件/日を超えるアクセスがあるようです。使用しての感想をお待ちしています。
お名前:
Arduino-tiny2313でも多くのサンプルが使えます †
senshu (2009-09-29 (火) 10:57:12)
先に悲観的なことを書きましたが、ATtiny2313でもコンパイル可能なサンプルは
少なからずあります。10種類のサンプルを試したところ、8個はコンパイル可能で
した。
ということで、実用性は別として、入門者用には使える可能性があります。
hidspxもavrdudeとの挙動を近づける努力を行ない、Arduinoでも支障なく
(というよりも、より快適に)使えるようになっています。
Arduinoに興味を持っている方も、ライタベースの通常のIDEに類似した
使い方にも着目してください。
アイディアの実現には時間が必要 †
senshu
irukaさんも、似たような使い方を提案されています。
http://hp.vector.co.jp/authors/VA000177/html/Arduino2313.html
廉価なライタがあれば、可能性はグンと拡大しますね。Free Scale用の廉価な
ライタも話題になっているようです。デバッグも可能なのは良いですね。
http://strawberry-linux.com/catalog/items?code=16002
せめて、HIDaspxにシリアル通信機能が追加できれば、Arduino的な使い方ができるのです
が、今のところ通信機能は別モジュール頼りです。
ATtiny2313ではメモリに空きがないので実現不可能だと思います。ではmega88あたりでは
どうか、と考えたこともありますが、V-USBでがcdcクラスの実装がイレギュラーなので、
今ひとつ、やる気がでません。そこで、USB I/Fを内蔵しているマイコンが候補となります。
価格と製作の手間を勘案すると、PIC18F14k50がベストかもしれません。
でも、かなりの時間とやる気 が必要ですね。
PCとマイコン(UBW/Arduino/Gainerのどれも共通)の通信は、それぞれに通信機能はある
ものの、何らかのソフトウェアが必要になるため、簡単に繋がるとは限らないのです。
しかし考えてみると、HIDクラスはキーボードやマウスに利用されているクラスですから、
双方向の通信も可能です。
これを上手く使えば、RS232Cによるシリアル通信の代替もできるハズです。avrdudeをラップ
する部分に、専用のターミナルを起動する仕組みを追加するのは可能なので、picmonのように
USB通信部分がBIOSとして実装されていると、簡単に利用でき便利です。
実際には、USB接続方式のArduinoは利用できるまでにはドライバの組込みには、数ページの
説明書が必要です。ドライバの組込み不要で同様の使い方ができれば裾野が拡がる気がします。
お名前:
hidspxを利用して激安Arduino環境を実現する(追記あり) †
senshu (2009-09-25 (金) 17:54:33)
irukaさんの考察 ⇒ http://hp.vector.co.jp/authors/VA000177/html/2009-09.html
senshuさんが、Avrdudeのかわりにhidspxが使えるようにしてくれているので、
ローダーなしで16kB (もしかしたら32kB) のフルスケッチが書けるかも。
ただし、常時HIDaspxを接続して使うならISP端子がふさがってしまう。
適当にライブラリをでっちあげればATtiny2313の激安(90円!)Arduinoも
作れてしまう
HIDaspxは、待機中はHi-Z状態なので、必ずしもISP用のピンを占有するわけでは
ありません。当然、周辺I/Oとの競合を考慮した回路構成にするのが前提です。
ローダ無しで、フルにコードを書くのも可能だと思います。
ATtiny2313用のライブラリを用意すれば、Arduino IDEでtiny2313の開発も可能です。
参考:
[1] http://hci.rwth-aachen.de/luminet
[2] 「激安Arduinoの作り方」⇒ http://www15.atwiki.jp/arduino/pages/35.html
「ATtiny2313 Arduino core with interrupt support (attiny2313_core.zip)」↓
http://hci.rwth-aachen.de/tiki-download_wiki_attachment.php?attId=769&page=luminet
求む!協力者、ですね。
なおWindows用のhidspxは、HIDaspxに限らず、多くのライタをサポートしています。
したがって、COM-SPIブリッジやCOMライタでも同様の使い方が可能です。ただし、効率的
な利用には書き込み時のスイッチ操作が不要なものをお勧めします。
senshu
「hidspx で作る 激安Arduino環境」は刺激的なキャッチコピーです。電源が安定していれば
RC発振でもシリアル通信は使えるので、用途によっては使える場合もあると思います。
ブレッドボードにATtiny2313を挿し、ISP用の配線(6本)を行えば、90円Arduinoの
完成です。(パスコンも必要です)ROMが2kBが最大の制約ですが、ブートローダが不要な
のでそれなりに使えるはずです。多くのライブラリ機能が利用でき、コンパイルサイズの制限
もないので(WinAVRそのもの)、もう少しメモリに余裕のあるものを用意すれば、実用性が
増します。
微妙な結果 †
senshu
以下のコードをTiny2313用にコンパイルすると、200バイト程度の空きです。これでは、
あまり有効なコードを書くのは難しいかもしれません。
Binary sketch size: 1808 bytes (of a 2048 byte maximum)
アスキーコード表の表示
// ASCII Table
// by Nicholas Zambetti <http://www.zambetti.com>
void setup()
{
Serial.begin(38400);
// prints title with ending line break
Serial.println("ASCII Table Character Map");
// wait for the long string to be sent
delay(100);
}
int number = 33; // first visible character '!' is #33
void loop()
{
Serial.print(number, BYTE); // prints value unaltered, first will be '!'
Serial.print(", dec: ");
Serial.print(number); // prints value as string in decimal (base 10)
// Serial.print(number, DEC); // this also works
Serial.print(", hex: ");
Serial.print(number, HEX); // prints value as string in hexadecimal (base 16)
Serial.print(", oct: ");
Serial.print(number, OCT); // prints value as string in octal (base 8)
Serial.print(", bin: ");
Serial.println(number, BIN); // prints value as string in binary (base 2)
// also prints ending line break
// if printed last visible character '' #126 ...
if(number == 126) {
// loop forever
while(true) {
continue;
}
}
number++; // to the next character
delay(100); // allow some time for the Serial data to be sent
}
LCDのライブラリも試しましたが、"Hello Arduino World"を表示すると、200バイト
程度しか空きが残りません。Arduinoでは、ある程度のcoreライブラリが必要なので、
ATtiny2313のメモリ不足の度合いは、かなり深刻です。
iruka?
senshuさん、こんばんは。
やはり厳しいですね。そもそもserial.printが出来るとは思っていませんでしたが。
現在のArduinoにはわりと新しめのWinAVRが含まれていますので、これをgcc-3ベースに
戻して、crt0.Sをカスタマイズしてメモリー節約するしかなさそうです。
senshu
avrdudeとhidspxのには、わずかですが振る舞いに違いがあるので、この違いを最小限に
する取り組みを行っています。(今日は、2回、公開ファイルを更新しました)
Lock bitの未定義ビットの扱いを修正してみましたので、ご確認ください。
なお、hidspxでは書込み前に、-e と同等のデバイス初期化を行うので、
デバイスエラーになることは少ないのですが、-l0x00 のようにLockすれば、
-rph でも読み出し出来なくなることが確認できます。
AT90SシリーズのLock bitの特殊性 †
senshu
Lock bitのベリファイについて確認してみましたが、AT90sシリーズでは、書き込んだ内容と
異なるビット位置で読み出しが行われます。単純な照合ではエラーを検出できず、正常書き込み
でもエラーになるわけです(こうした奇妙な仕様 は90Sシリーズに限るようです)。
この不具合は今までにも抱えていたのですが、90Sシリーズの利用者が限られることや
Lock bitを積極的に使いっている人が少ないためか、報告はありませんでした。
90Sシリーズでは、Lock bitの照合機能を無効化で対応したいと思っていますが、
「それでは困る」という方がいれば、コメントをお書きください。
手間が少なければ、実装も考えて見ます。コメントがなければ、前述のとおりです。
AT90SシリーズのLock bit書き換え時の照合を省略 †
senshu
複数の90Sシリーズのデータシートを確認しましたが、Lock bitの扱いには細かな違いがあり、
コーディングの複雑化は避けられないようです。
90Sに限り「Lock bit書き換え時のベリファイは行わない」仕様に変更しました。
お名前:
avrdude wrapperを Eclipseで試してみました †
senshu
Eclipseにこのavrdude.exe を組込み、使ってみました。
EcliplseのAVRプラグインは、avrdudeをよく理解していて、AVR studio がインストール
されていると、XMLで記述されたAVRマイコンのFUSEビットも解釈し、FUSE設定も設定できる
ようです。その意味では素晴らしいのですが、自動化に力点が置かれているので、手動での
設定が却って苦手です。
avrdude -c? でリストされないプログラマは設定対象にならない、ということを確認し
ました。
そこで、ダミーですがavrdude.conf に数行の記述を追加したところ、hidspxが候補と
してリストでき、hidspxを使ったプログラムが可能なところまでは確認しました。
しかし、この操作が簡便なのかは大いに疑問のあるところです。Makefileでmakeする
よりも、私の場合ですが数倍の時間が必要でした。あちこちのメニューを開く必要が
あり、イライラも極限に達したところで、ようやく目的の動作にたどり着きました。
一方、Eclipseではコマンドプロンプトを開くのが簡単なので、hidspx *.hexでも
十分、という気がしてきました。
また、hidspxでは、拡張子がeepのファイルをEEPROM用と理解しますが、AVRプラグイン
では、_eeprom.hexを追加するようです。このファイル名をEEPROM用としてhidspxに
理解させるには、ちょっと細工が必要です。
…ということで、色々面倒な修正が必要なことがわかりました。私がこのための修正を
行うことを考えると、気が重いです。Windowsユーザなら、迷わずAVR studioを使った方が
デバッグ機能も強力で、ヘルプも親切で使い勝手も優れていると感じます。
例によって、今までの使い方で十分、、という感じ(デジャブゥ)です。ここは、
必要に感じた方の頑張りに期待します。
senshu
Arduino IDEよりも、Eclipse plugin の方が詳細な設定が可能です。これは、対象にしている
利用者層が全く異なるのだと思います。Eclipse pluginを初心者が使い始めるなら数分間で
固まることを保障します。
メニューの書き込みを指定するのは簡単なのですが、それを有効にするまでの道のりが遠く、
コマンドを直打ちする方がはるかに面倒がないことを実感します。
お名前:
Arduino IDEはavrdudeに何を渡すのか †
senshu (2009-09-22 (火) 18:31:23)
Arduino IDEが、avrdudeがアップロードする場合、avrdudeに何を渡して起動するのかを
調べてみました(stderrに出力させると、テキストボックスに赤字で表示できました)。
0 C:\Programs\arduino-0013\hardware/tools/avr/bin/avrdude
1 -CC:\Programs\arduino-0013\hardware/tools/avr/etc/avrdude.conf
2 -q
3 -q
4 -pm168
5 -cstk500v1
6 -P\\.\COM1
7 -b19200
8 -D
9 -Uflash:w:HEXファイル.hex:i
ほぼ予想通りです。この結果から、-U〜で指定されるHEXファイル名を抜き出して、
hidspxを呼び出せば、Arduinoに組み込むことができます。なお、ブートローダも消えて
しまうので、多少の工夫を行った方が確実ですね。(自作の場合には不要だとは思いますが)
使い終わったら、以下のようにBootLoaderを書き戻す、という使い方で対処しましょう。
BootLoaderを書き込む場合には、以下のようなコマンド列です。Lockビットを解除し、
2段階で書き込んでいることが確認できました。
cur_dir = C:\Programs\arduino-0013
exe_fname = C:\Programs\arduino-0013\hardware\tools\avr\bin\avrdude.exe
argv[ 0] C:\Programs\arduino-0013\hardware/tools/avr/bin/avrdude
argv[ 1] -CC:\Programs\arduino-0013\hardware/tools/avr/etc/avrdude.conf
argv[ 2] -q
argv[ 3] -q
argv[ 4] -pm168
argv[ 5] -chidspx
argv[ 6] -e
argv[ 7] -Ulock:w:0x3F:m
argv[ 8] -Uefuse:w:0x00:m
argv[ 9] -Uhfuse:w:0xdd:m
argv[10] -Ulfuse:w:0xff:m
cur_dir = C:\Programs\arduino-0013
exe_fname = C:\Programs\arduino-0013\hardware\tools\avr\bin\avrdude.exe
argv[ 0] C:\Programs\arduino-0013\hardware/tools/avr/bin/avrdude
argv[ 1] -CC:\Programs\arduino-0013\hardware/tools/avr/etc/avrdude.conf
argv[ 2] -q
argv[ 3] -q
argv[ 4] -pm168
argv[ 5] -chidspx
argv[ 6] -Uflash:w:hardware\bootloaders\atmega168\ATmegaBOOT_168_ng.hex:i
argv[ 7] -Ulock:w:0x0F:m
- と引数がペアで指定されているので、比較的parseは容易です。カレントディレクトリ
も適宜、指定しています。hardware\programmers.txt に以下の記述を追加すれば
メニューにhidspxが現れます。(この部分には柔軟性があります)
hidspx.name=hidpsx
hidspx.protocol=hidspx
avrdude.exeが-chidspxオプション指定 でhidspxに対応していれば、このメニューで
ブートローダの書込みが可能になるわけです。
□ 参考URL
Arduino Tiny2313 ⇒ http://hp.vector.co.jp/authors/VA000177/html/2009-06.html
hidspx対応のavrdude wrapperを公開 †
Arduino-IDEで動作確認を完了 †
senshu
今回の公開版は、CMDに渡す文字列長を2048までとしました。Windowsでは、PATH名の
最大長が260文字なので、複数のファイル名を指定すれば、512バイトを超える可能性は
極めて高いと思います。
sprintfやstrcatを使うとバッファオーバーフローを起こす可能性が高いので、これ
を防ぐコーディングが必要です。(当初のソースでは不完全です)
そこで、エラーチェックを強化した版を公開しました。
実際にArduinoに組込み(その方法は、同梱のReadme.txtを参照ください)、動作を確認
しました。通常の開発環境に近い操作環境が得られ(リセットスイッチ操作も不要、書き込み
も速い)、快適に使えます。以下は、[⇒]をクリックし、m168にアップロードした図です。
ArduinoはAVRライタ無しで機能するのが最大の特徴ですが、ライタが安価なら、この方式が
柔軟性があります。
hidspxとArduinoの両方をお持ちの方は、ぜひお試しいただきたいと思います。
(XBeeのようなアダプタをつけている方には朗報だと思います)
日本語化されたアーカイブは、スイッチサイエンスさんの「Arduino統合環境の日本語化」の
ページから入手できます。
http://www.switch-science.com/trac/wiki/Arduino-ja-jp
Arduinoのブートローダは無くともOK?! †
iruka?
senshuさん、こんばんは。
avrdudeの置き換え成功おめでとうございます。
私もArduinoのブートローダーにはイライラさせられていましたので
いっそのことブートローダーなしのほうが良いのではないかと思っています。
これだと安価なATmega88のflash領域8kB全部が使えますし、tiny2313への応用
も効きますね。それに、出来上がったスケッチをそのまま機器に移すときにも
ローダーの起動待ち時間の6秒が無くなるのでなお良しだと思います。
senshu
irukaさん、こんばんは。
少ピン、少メモリのマイコンでは、ブートローダの占有するメモリも無視できません。
2kB しかないマイコンでは、可能ならブートローダは使いたくはないですね。
4kW(1W=16ビット)のミニコンで20W程度のブートローダを暗記していた身には、もう少し
何とかならないかと思ったこともありますが、やや空しい努力になりそうなので、この
Wrapperで我慢することにします。
不具合の洗い出しにご協力をお願いいたします。
wrapperからオプション文字列を指定可能にしました †
senshu
-d1 が指定できると書込みが更に高速になるので、-chidspx,-d2 のように、',' で
区切ることでオプション指定を可能にしました。
お名前:
「思考の遷移図I」、考察が素晴らしい †
senshu (2009-09-17 (木) 21:35:41)
「思考の遷移図I」カテゴリー「ハードウェア」を拝見しました。
Adruono, PasS, Gainer など、話題は豊富です。
http://daisukeh.cocolog-nifty.com/blog/cat6446517/index.html
色々な角度からの考察が素晴らしいです。
お名前:
Arduino-IDEに独自のライタを組み込む方法 †
senshu (2009-09-16 (水) 22:10:15)
Kimio Kosaka氏の「Arduino-IDE から FTDI Bitbang method を実行する」を
拝見しました。
http://www.geocities.jp/arduino_diecimila/bootloader/bitbang_w_ide.html
avrdudeをラップして実装しています。ということは、工夫次第でhidspxの組み込み
も可能なわけです。Arduinoの注目度を考慮し、早期に実現したいところです。
senshu
このプログラムでは、argv[5] を必ず参照するので、起動方法によっては、内部エラーに
なります。また起動するコマンドも特定の場所に限定されています。
この内容を参考に、私なりに書いてみたいと思います。
kuman?
18F14k50はMCLRピンプルアップ(10kΩ)無しでも特別な問題はなかったのですが、
18F2550ではこれが無いと、動作が不安定で困りました。ピンの近くに手を持って
行くとLEDの点滅が変わります。10kで安定しました。14K50では動いたので2550では
発見が遅れました。
違いの原因はわかっていません。
senshu
kumanさん、irukaさん、どうもありがとうございました。
18F14k50でも不安定、といった報告があったように記憶していましたが、私の記憶
ちがいだったようです。何れにしても、MCLRはプルアップしておくのが無難です。
内蔵の抵抗値は、やや高めであり、SWの接点の皮膜を飛ばすには不適切だと思います。
teensyduinoではlib/pde.jarを差し替え †
iruka?
teensyduinoのほうはlib/pde.jar(src/AvrdudeUploader.java)を差し替えていました。
力技も止むなし(実装に工夫を望みます) †
senshu
>teensyduinoのほうはlib/pde.jar(src/AvrdudeUploader.java)を差し替えていました。
やはりそうでしたか。それなら、長大なjavaのソースに手を加えるよりも、avrdude.exeを
wrapした方が楽ですね。
hidspxをavrdudeもどきにするのは、hidspxがシンプルなオプション体系なので、それほど手間
でもありません。しかし、Arduino-IDEを書いている方には、もっとスマートな実装をお願いした
いです。avrdudeとベッタリの実装ではなく、汎用性を持たせるべきです。そうすれば、種々の
ライタを利用できるようになります。(ソースを読まずに書いているので、誤解している点がある
かもしれません)
senshu
dude-wrapngでは、avrdudeを置き換える方式と、javaのソースに手を加える方式の
両方を実施しています。
どちらでも同じ結果が得られるのですが、オプション指定などが柔軟に行えるように
なりました。
BootLoaderの書き込みを実行する場合には、従来の置き換え方式の方が混乱は少ない
ようです。(java側のコードを書き換えて対処は行いました)
無謀な試み? †
お名前:
Swordfish Compilerの解説ページの紹介 †
senshu (2009-09-16 (水) 16:01:09)
Swordfish COmpiler とUBW関する丁寧な解説ページ(ほぼそのまま picbootにも活用可能)
なWillさんのSwordfish Compilerの解説ページ が、ここ一週間ほどアクセス不能になっています。
Googleのキャッシュには残っているようですが、それもいつまで残っているかは不明です。
早期の回復を願っていますが、回復までの間、暫定的にPDF化したものを置いておきます。
Swordfish_UBW.pdf
不都合があれば、ご指摘ください。
なお、picbootはHIDクラスで動作し、ブートローダの利用時もドライバのインストール
は不要であり、Windows 2000/XP/Vistaで利用可能です。
お名前:
PIC18F14k50で作るUSB WISP プログラマ †
senshu (2009-09-13 (日) 21:31:42)
このサイトで紹介しているWisp628 PICプログラマ を18F14k50で置き換えたものを
見つけました。
PIC 18f14k50 based USB WISP programmer
シンプルな回路で高電圧プログラミングをサポートしています。
時間がある方は、18F14k50の応用例の一つとして、挑戦してみませんか?
実際に作ってみました †
チラ裏?
興味があったので作ってみました。USB-CDC.infをインストール後、
win7 x64環境からxwisp2wの操作で、wisp648 ver1.29と認識しました。
ターゲットを繋げていないのでそれ以降の動作確認はしていませんが、
既存のwisp648+USBシリアル変換と同等かと思われます。
あと、現時点ではファイルのDLが消えているようでできないですね
(ご要望があればupしますけど)
senshu
チラ裏さん、こんばんは。
製作報告をありがとうございます。なお、紹介したURLには、wispのソースとHEXファイル
が見つかりますが、これでは動作しない、ということでしょうか。
チラ裏?
senshuさん、おはようございます。
こちらの環境でファイルをDLしようとすると、「移動先のページは存在しません」と出る
ので、消えていると思いますけど、もしDLできるのあれば動きます。ただ、HEXはPICに
書き込んだだけでは一切動作しなかったのでおかしいと思い、コンフィグ設定を確認した
ら、クロック源の設定がされていないのでここだけ修正が必要でした。
senshu
了解しました。「ファイル名はリストされているが該当するファイルは無い」と
いうことですね。私の手元には実体があるので、ライセンスを確認し、可能なら
ここに置くことにします。
有益な情報をありがとうございました。
jalv2-2.4nでコンパイルエラー †
senshu
wisp_usb_blog.jalというファイルは今も入手可能ですが、現行のjalv2では
エラーになります。FUSE関係を現在の仕様に修正してコンパイルすると、
コード生成時にハングアップします。
jalv2の流動的な仕様には目をつぶるとしても、ハングアップは避けて欲し
いです。上手くコンパイルできた方はいらっしゃいますか?
wisp_usbのソースとHEXファイルを暫定公開 †
senshu
2010-0602に公開されたjalv2 ver 2.4nでは、 -no-variable-reuse を指定する
必要がありました。これを指定すればHEXファイルを生成できます。
BUGSに書いてありましたので、明らかな不具合です。わかっているなら、直して
もらいたいです。
参考までに私の作成したものを回路図と共にまとめました ⇒ wisp_usb-2010-0617.zip
コードは、jalv2-2.14nでコンパイルできるようにする修正のみを行い、それ以外の
変更は、インデントのみです。コンパイル済のHEXファイルが入手でいない、という
ことでしたので、暫定的に公開します。試用結果を教えてもらえると幸いです。
お名前:
PIC18F14k50の内蔵基準電圧=1.024V †
senshu (2009-09-12 (土) 08:25:25)
PIC18F14k50の内蔵基準電圧は、1.024Vです(手元にモノが無いので真剣に調べ
ていませんでした)。VDDの電圧次第ですが、1.024Vを×2, ×4にも指定できます。
10ビットのADCのVrefとしては理想的であり、ADで変換した値は誤差なく電圧を
得ることができます。整数演算が主な制御用途では無駄がありません。ただし、こ
の基準電圧は -5%〜+4%程度の誤差があるようなので、校正は不可欠です。
実際にバラつきを検証したいところです(大人買いが必要?)。
PIC18F2550には基準内蔵されていませんが、ピン数に余裕があるので、高精度な
モノを外付けは可能です。少ピンマイコンに待ち望まれた嬉しい機能です。
また、この電圧を分圧して16段階の電圧として出力することもでき、4ビットDA変換
の学習もできます。PIC18F14k50は安価ですが、面白い使い方ができそうです。
お名前:
HIDmon統合パッケージの提案 †
senshu (2009-09-10 (木) 12:44:06)
irukaさん作の、picmon, hidmon を一式にしたアーカイブを提案していま
すが、これにPICspxを加えたオールインワンパッケージも有意義と考えて
います。
HIDaspxの利用者が、USB対応のPICマイコンを使ってみようと考えた時に必要
なツール群一式を提供してはいかが、という提案です。
これらは、相互に関連性があり、ドキュメントを多少修正すれば混乱も少なく、利用
者には便利だと思います。まとめて提供できると、アイコンの比較ができ、結果として
統一感が生まれると思います。(異なるパッケージでは管理が難しいと思います。)
アーカイブの肥大化が懸念されますが、全てをまとめても500kB未満であり、
回路図などの画像データを含めても、現在のhidspxのアーカイブを越えることは
無いと思います。
アーカイブ名は、〜GOLDやSEなど、それとわかるものがいいですね。
3in1なども考えましたが、これはirukaさんの考え次第です。
irukaさんの考えをお聞かせください。
kuman?
irukaさんの前にごめんなさい。
hidmon-2009-0909.zipのbinフォルダにPICspx.exeをコピーしました。
(ドラッグアンドドロップ派ですのですみません)
コマンドプロンプトを開いて、ドラッグアンドドロップで2種のチップに
bootladerを書き込みhidmonを実行してみました。
一度立ち上げたコマンドプロンプトで連続して作業ができます。
入門者にはすっきりします。
iruka?
senshuさん、kumanさん、こんにちは。
混乱を防ぐ意味でもアーカイブとドキュメントを1つにまとめたほうが
よさそうですね。
また、14K50と他のPICも統合したいところではあります。14K50対応にする
ための書き換え箇所が予想以上に多かったので今は別々にしています。
あとはbootloaderを焼いた後のフォローですね。何から手を付けたらいいのやら
初心者には難しいです。Arduinoのように簡単になるといいんでしょうけれど。
お名前: