AE-ATmegaのあれこれ(その1)

秋月キットのATmega168/328マイコンボードキット AE-ATmegaを組み立てていて疑問に思っていたことを調べたのでまとめておきます。

参照する回路図は2014/03/21現在のものです。
キットの組み立て説明書にある回路図と、基板単体の回路図は同じようです。基板単体のページにある回路図の方が大きいので、そちらがお薦めです。

(1)回路図の誤り

誤りといっても些細なものですが。

(A)電源LED回路が無い。
基板シルク印刷にあるLED「PWR」と抵抗「R5」がありません。

(B)IC1の2,3ピンの信号線に信号名が無い。
信号名が無いのでX4の3,1ピンのM8RXD,M8TXDと接続しているように見えない。
もちろん実際には接続されています。

(2)ジャンパ・コネクタX3の使い道

通常は何も接続しません。

(A)BitBang方でCPUにプログラムする。
このときX4のジャンパはすべて(あるいは少なくとも5-6だけ)ジャンパを外しておいた方が良いでしょう。U1のDTR信号が変化するとICSPからのRESET信号を邪魔します。たぶん問題ないと思いますが念のため。

(B)シリアル制御線コントロール
シリアルの制御線まで含めてコントロールしたいとき、適当なIOピンに接続します。どのように利用するかはRS232C等について勉強ください。

(3)ジャンパ・コネクタX4の使い道

CPUからシリアルを使うなら、1-2,3-4,5-6の組み合わせでジャンパを差せばOKです。Arduinoとして使用し、スケッチを描き込むなら、これは必須です。
逆にジャンパを差さないのは、(a)シリアルを使用しない、(b)IC1の2,3ピンをIOとして使う、(c)シリアルのDTRからRESETを入れない(Arduino等の自動リセット禁止)、のような場合です。
また以下のような使い方もあります。

(A)単なるUSB-シリアル変換器として使用
X4の2,4ピン、それとGNCからジャンパを別ボードへ飛ばします。
Arduino MEGA2560のSerial1,2,3等に便利かも。

(4)コネクタICSPの使い道

通常は何も接続しません。
使用するのは、BitBang方によるプログラム、外部プログラマ/デバッガのケーブルを接続するときです。
ICSPの目的と異なる使い道としては、(a)第2の+5V端子、(b)SPI専用コネクタ、(c)リセット回路の付加などでしょうか。
ブレッドボードを使わずに、ユニバーサルでちょっと拡張するとき、2.54mmピッチ・ヘッダ・ピンというのは使いやすいかと思います。

(5)ジャンパ・コネクタSELと、U1のJ1,J2の使い方

J1,J2の使い方はFT232RL USBシリアル変換モジュールの取扱い説明書にあります。SELも含めたそれぞれの設定は以下の通りです。

ジャンパ名ジャンパ設定説明
J11-2をshortI/O電圧3.3[V]
2-3をshortI/O電圧5[V]
AE-ATmegaなら常にこちらを選択
J2openVCC(つまりDCジャックの5V)から給電
shortAE-UM232RのCN1のVBAS(つまりUSB電源)から給電
SEL1-2をshortAE-UM232Rモジュール(USB-5V)から給電
2-3をshortDCジャック(IC2の出力)から給電

J1は2-3をshortで決まりです。1-2をshortするのは、レギュレータICを変更して、3.3V電源化するときくらいでしょう。
ちなみにAE-UM232Rの初期設定ジャンパ(製品ページの写真と同じ)は1-2をショートしてあるので、そのままでは誤りです。実際には3.3V IOでもCMOSレベル出力されるので、問題なく動作するかもしれませんが、危険は避けるべきです。
一方、電源供給の仕方に着目して、その他についてまとめ直しました。

電源供給方法ジャンパJ2ジャンパSEL備考
USBコネクタshortすべてopenSELの1-2をshortしないのは、AE-UM232RのFB1とC1によるノイズ・フィルタが弱くなるため。(6)参照。
DCジャックopen2-3をshort

「J2をshort」と「SELの2-3をshort」の組み合わせは禁止です。USB電源とDCジャック電源が短絡します。一方のコネクタを差し込んだとき、もう一方の電源は0Vですから...

当然ですが、これらジャンパを切り替えるときは電源が入っていない状態で実施します。組み立て説明書では、拡張基板がU1に干渉する場合、ジャンパ・ピンを切って、半田を盛ってジャンパさせるように指示がありますが、そうすると簡単に電源供給を切り替えられないことになります。

(6)USB電源給電時のループ

USB給電するためにJ2をshort、SELの1-2をshortすると、電源ラインがループします。

f:id:PeripheralPinMap:20140322154718p:plain
f:id:PeripheralPinMap:20140322143653p:plain

AE-UM232RのVCC端子を経由する電源ライン(AE-ATmegaの+5V)と、USB端子を経由する電源ライン(AE-ATmegaのUSB-5V)があり、SELの1-2をshortすることでUSB-5Vが+5Vと接続してループが出来上がります。
結果として、ノイズ・フィルタ(AE-UM232RのFB1とC1)が効きにくくなり、USB-5Vラインを通ってノイズが拡散します。
J2をopenで使用しても、ノイズ・フィルタが無効になり、FT232RLの電源ラインが長くなるだけで、改善とは言い切れません。
根本的な原因は、ノイズの乗りやすいAE-UM232RのUSB端子から電源を引いていることです。多少のノイズくらいでは動作に影響ありませんが、好ましい回路でもありません。
簡単な対処方法は、J2をshortして、SELにジャンパを差さないことです(すべてopen)。USB電源は必ずノイズ・フィルタを通りますし、AE-UM232RのVCC端子は+5Vに接続されるのでボード本体に電源供給されます。

JTAGICE mkIIとICSP変換

AVR関係のプログラム開発にはKEE JTAGICE mkIIを使用しています。しばらくターゲットにAE-ATmegaを使用するので、JTAGからICSPに変換する必要があります。
そこでブレッドボード用のジャンパーワイヤ(オス-メス)を使用して変換ケーブルの代用にしています。
接続するピンの対応は以下の通り。ICSP側で空いているところは結線の必要無し。

JTAGICE mkII probeICSP
signalケーブルの色pinpinsignal
TCKBlack13SCK
GNDWhite26GND
TDOGrey31MISO
VTrefPurple42VTref
TMSBlue5  
nSRSTGreen65RESET
VsupplyYellow7  
nTRSTOrange8  
TDIRed94MOSI
GNDBrown10  

JTAGコネクタのピンは、逆指し防止の出っ張りのある側が奇数列です。
これで正常にJTAGICE mkIIからターゲットへ接続できています。開発中、JTAGケーブルを外す機会が無いのでこれで十分ですが、頻繁に脱着するならきちんと変換ケーブルを作った方がよいです。しかし3x2のピン・ソケットって秋月とかでは売っていません。
案外、このままジャンパーワイヤのメス(ICSP側)をホット・ボンドでまとめて接着した方が早いかもしれません。

Atmel Studio(6.1)からKEE AVR JTAGICE mkIIへ接続できない

とっても久しぶりにAVRのプログラムを書こうとしたら開発環境がAVR StudioからAtmel Studioに変わっていました。AVR32 Studioと統合したみたいですね。浦島太郎状態です。
最新版のAtmel Studio 6.1をダウンロードしましたが、KEE AVR JTAGICE mkIIへ接続できません。

症状

最新版のファームウェア(Atmel Studio 6.1用)もダウンロードして、説明書通り、zipファイルを指定のフォルダに配置してあります。
Windows7からUSBデバイスとして認識しているし、Atmel Studioのメニュー[View]-[Available Atmel Tools]からStatusがConnectedになっていますが、メニュー[Tools]-[Device Programming]からInterfaceを正しく指定した上で、Applyボタンを押してもタイムアウトします。

解決策

Atmel Studio 6.2 betaをインストールしたらKEE AVR JTAGICE mkIIへ接続できました。ファームウェアは6.1用のままです(現在6.2用は存在していません)。
JTAGICEへ接続して、ターゲットCPUのシグネチャも取得できています。
<<注意>>
「Atmel Studio 6.1」と「Atmel Studio 6.2 beta」は別物として扱われるため、同時インストールが可能です。ただしプロジェクト・ファイルの関連付けが6.1の方になっています。6.2を起動してダイアログからプロジェクト/ソリューションを開こうとしても一切指定できません。関連付けのある拡張子のみ選択可能なためです。これはバグと言ってもよいと思います。
そのため6.2betaをインストールするなら、6.1をアンインストールすべきでしょう。

秋月キットAE-ATmegaを組んでArduino化

もちろん問題なく動作しました。基本的には、製品紹介ページにある組み立て説明書通りにすれば仕上がります。
Arduino化するため、16MHzの水晶振動子を選択(20MHzも付属)。USBシリアル変換モジュール(AE-UM232R)もジャンパ・ピンをカットして、半田によりショート(J1とJ2の1-2)しました。
本キットは、ユーザが自分でArduinoブートローダを書き込むことでArduino化します。CPU(ATmega168)とUSB-シリアル変換部分の関係からArduino Diecimila相当になります。

組み立て説明書に書かれているとおり、「bitbang Arduino bootloader
」でインターネット検索すれば、いくつか参考なるページが見つかります。
私が参考にしたのは外付けAVRライタ無しでBootloaderを書き込むで、BitBang法という手法で書き込みます。
ブートローダを書き込めさえすればBitBang法以外でも良いのですが、この方法はUSBケーブルとジャンパ4本だけで書き込み可能です。

以下、私がArduino化したとき、分かりづらかったところ、それと失敗談を挙げておきます。

BitBang法におけるジャンパの接続

ジャンパを飛ばすところにはピン・ヘッダがあるので、ブレッドボード・ジャンパー延長ワイヤ(メス−メス)などを使って接続します。
記事では分かりづらいと思うので、接続を以下にまとめておきます。

X3コネクタICSPコネクタ
信号ピンピン信号
CTS11MISO
DSR23SCK
DCD34MOSI
RI45RESET

ジャンパを飛ばすピン・ヘッダを間違えた。

お間抜け以外の何者でもありませんね。
ジャンパを飛ばすのは、X3(4x1)とICSPの間です。ICSPと、その直ぐ近くにあるX4を間違えないように注意してください。
X4のRESET(ピン5-6)にジャンパを差していると不安だったので、すべて外しておいたら、そっちに繋いじゃったんです。

<余談>書き込みにBitBang法を使わなかった。

BitBang法を使う前に、たまたま目に止まった別のArduinoボードにArduinoISPを書き込んでライタとして利用してしまいました。
もちろん、このやり方でも本来は問題ないのですが、Arduino DiecimilaはCPUがATmega168、AE-ATmegaに付属していたCPUはATmega168Pで別物だったため、シグネチャ・チェックで必ず引っかかります。これは(Arduino IDE(1.0.5)に添付されているavrdude(書き込みソフト)の設定ファイルにATmega168Pに関する定義が無いためです。
それで結局BitBang法を使用することにしました。
BitBang法でもCPUの型番が必要です。組み立て説明書にあるパーツ一覧には「ATmega168(または相当品・上位互換品)」とあるので、実際に添付されているCPUチップを確認してみてください。

Arduino始めました

久しぶりのブログ更新になってしまいました。
私の頭はシングル・タスク処理しかできないようで、忙しくなると他のことが手に付かなくなり、ブログを書いていたことすら忘れてしまいます。
最近、AVR関係でJTAGデバッガを久しぶりに使い出したところ、トラブルが発生しました。解決はしたのですが、そのことを記録しておこうと思ったの同時に、ブログのことも思い出しました。

さて、2ヶ月ほど前からArduinoを使い出しました。
Arduinoのことを以前からある程度知っていましたが、今まで手を出しませんでした。ただお客様の要求するCPU性能は常に高いものばかりでは無く、将来的な入手性、大量生産による低価格、さらには自分で改良してみたいという要望もあり、Arduinoを使用することになりました。

Arduino MEGA2560を使ってみた感想です。
全般的によく出来ていますね。

<<長所>>

(1)要求されるCPUチップの知識が少ない。

データシートを読む必要性が下がるので楽が出来ます。
特にピン配置やレジスタ構成、コネクタとそのピン配置を気にせずにソースを記述できるのは、結構画期的に思えます。これらはハードウェアの都合でしかないので、ソフト開発者からすると足枷です。
しかしArduinoコネクタ・ピンにはボード全体で通し番号が付けられているため、シルク印刷の番号を読み取り、APIの引数に指定すればそれで済みます。

(2)ライブラリが沢山ある。

Aruduinoの標準ライブラリ以外に、有志が作成したライブラリが沢山公開されています。The Arduino Playground

(3)いざとなれば細かいところまでコード記述可能。

GCCやAtmelの開発環境を内部で利用しているので、性能&機能アップのために、直接ポートをたたくようなコードをアセンブラで書くことも可能です。
もちろんArduinoの機能と衝突しないようにする必要があるはずです。

(4)デザインが(ちょっと)良い。

たぶんイタリアで開発されたことも影響しているのでしょう。
デザインは些末なところかもしれませんが、安価なサード・パーティ製互換ボードに埋もれないようにするための対策にもなると思います。若干コストに影響を与えているように思えますが。

<<短所>>

(1)開発環境(Arduino IDE)がイマイチ。

ソフト開発に慣れていないユーザにとってはこれ位が丁度良いのかもしれませんが、私にはちょっと不満。
プログラムを書き込むとき、シリアル・コンソールが閉じてしまい、デバッグするとき毎回開き直す必要がある。
他の開発ツールもあるようですが、純正(?)だし、お客様のご意向もあるので...

(2)基板の穴とピン

基板取り付け用の穴位置は、長方形の四隅の関係になるように配置されていません。専用ケース以外では、特注(or自前)加工するしかないのでは?
穴とソケット、あるいは信号パターンが近過ぎるように思います。ネジの皿と干渉しそうです。
ピンはワイヤ・ラッピング用ピン・ソケットを流用してますが、これは2.54mmピッチではありません。2.54mmピッチ2列のヘッダ・ピンの方が安定するし、ユニバーサル基板が使えるから好きなんですけどね、シールド関係もあるから今更変えるのは難しいでしょうね。

AT32UC3BのPDCA(読んでみただけ2)

前回の続き。
ドキュメント「AT32UC3B Series Preliminary」の「19. Peripheral DMA Controller」部分。



19.4.8 Interrupts
IER(Interrupt Enable Register)に書くことで割込を有効にすることができ、IDR(Interrupt Disable Register)に書くことで割込を無効にすることができる。割込が有効か無効かどうか確認するためIMR(Interrupt Mask Register)を読むことができる。ISR(Interrupt Status Register)を通して割込要因の現在の状態を読むことができる。
PDCAは3つの割込要因持つ:

  • リロード・カウンタがゼロ - TCRRがゼロである。
  • 転送終了 - TCRとTCRRの両方がゼロである。
  • 転送エラー - メモリにアクセスする際にエラーが発生した。



19.4.9 Priority
もし1つ以上のPDCAチャンネルが一時に転送を要求しているなら、PDCAチャンネルはチャンネル番号により優先順位をつける。低い番号のチャンネルが他の高い番号のチャンネルより優先権を持ち、チャンネル0に最優先権が与えられる。

19.4.10 Error Handling
メモリアドレスがメモリの無効の位置を示すように設定されると、PDCAが転送を実行しようとするとき、エラーが発生するだろう。エラーが発生するとき、Interrupt Status RegisterのTERR(Transfer Error)フラグが設定され、エラーを引き起こしたDMA(訳注:PDCAの誤り)チャネルは止められるであろう。チャンネルを再起動するために、ユーザはMemory Address Registerを有効なアドレスにプログラムして、それからControl Register(CR)のError Clearビット(ECLR)に'1'を書かなければならない。Interrupt Enable Register(IER)のTERRビットに'1'を書くことにより、エラーのとき割込を任意に引き起こすことができる。

OLIMEXにFAXが送れない

OLIMEXにオーダーのメールを送った後、返信に付いてきたPURCHASE ORDERをFAXしようとした。
以前に4回ほど経験があるので慣れたものだったのだが、今回FAXが送信できなかった。引っ越しした関係でひかり電話(NTTのIP電話の一種、と言えばいいのかな?)に変わったのだが、これがいけなかったのだろうか?
いろいろFAXの設定を間違えてはいたものの、それらは解決。相手FAXの応答音を確認してから送信開始しても、途中で通信エラーが発生してしまう。FAX機に付いている、通信回線の悪い環境にも対応する安心モードというのを試してもダメ。
最後の手段で近所のコンビニからFAXしようとしたが、海外へのFAXは出来なかった。昔は出来たと思ったんだけどなあ。
結局OLIMUXへの発注は取りやめ。礼儀上キャンセル・メールを出した。
今どきFAXを利用するのは止めて欲しい。OLIMEXは以前メールでクレジット・カード情報が漏洩したのでFAXを使用しているらしいが、FAXなんて画像を簡単に符合化しただけなので盗聴される危険があると思うんだけど。
その様な訳で、FAXを使用しないで発注可能な基板業者を探し始めた。
Silver Circuitsは試作でも4枚以上で発注する必要があり、1枚だけ必要な私には向いていない。PCB CARTを検討中。