マイコン工作実験日記

Microcontroller を用いての工作、実験記録

使い回し

2013-06-28 22:09:12 | SAM4
これまでに何度も使っている1.8インチSPI LCDを接続。以前製作したBlueSAMでも使っていたLCDです。BlueSAMではCODECとしてTLV32AIC3254を使っていましたが、今回はこれを使わないでほとんどの処理をSAM4Lだけで実行させるつもりでいます。



BlueSAMではスペクトル表示をおこなうのに、TLV32AIC32が内蔵するMiniDSPを使って計算させていたので、CPUは表示処理をしていただけでした。計算もSAM4Lで処理するとなると、クロック24MHzでは苦しくなるかもしれませんが、まずはどこまでいけるか試してみたいと思います。

Phasor

2013-06-24 22:27:15 | Weblog
いつものようにATMELのEmbedded Design Blogをチャックしていたところ、とっても懐かしい名前を発見、そしてその後の動画に驚愕。

Embedded Design BlogはATMELのAVR/ARM関連製品の紹介や、関連製品の記事が掲載されるのでちょくちょくチェックしにいっています。今回はAVRネタなんですが、何よりも "Future Crew", "Unreal" という懐かしい名前に吸い寄せられ、そして釘付けにされてしまいました。何しろ、Future Crewというグループが活躍したのは20年も前のことなので、若い人はご存知ないかもしれません。自作PCに Sound Blasterとビデオカードを挿して、デモソフトの入ったフロッピーからブートしてデモを楽しんでいた頃を懐かしく思い出します。相性の良いビデオカードとかあったような記憶があります。この記事で紹介されているLinusさんは、いまだにコモドール64用の新作デモを発表しているようで、Demosceneの息の長さに驚かされます。

さてそんなDemosceneを愛して止まぬLinusさんが、2010年にATMEGA88で動作するデモを作っていたようです。なんでも前作のCraftではビデオ信号としてVGA信号を出力していたのに対し、本作ではより出力が難しいPAL信号に挑戦してみたとのこと。これだけでも、充分にスゴイんですが、デモ作品そのものもクオリティー高すぎ。



どうして、こんなのがフラッシュ容量8.5KBのATMEGA88で動くんでしょう??? ソースコードも公開されているんで、誰かAVRに詳しい方解説してもらえませんでしょうか?ストーリーを圧縮しておき、それを展開しながら動いているらしいのですが。。

ATMEGA88でのデモに驚いたので、他の動画を見てみたら。さらに制限のキツイのがありました。ATtiny15(1KB Flash+32byte RAM)だそうです。こちらは、音楽データに対応づけた画像イメージを表示させる方式をとっているとのこと。しかし、こんなことができるなんてわたしには信じられません。



PropellerとかFPGA、Linux環境のデモ作品もあるので、そのうちにゆっくり見てみよう。

FREQMを使ってCPU使用率を調べる

2013-06-21 00:47:14 | SAM4
ABDACBの44.1KHzクロック用にクリスタルを交換するつもりでいましたが、数字を読み間違えていたことに気付いて挫折感に浸っています。しばらくは、交換しないでこのまま作業を続けることにします。

さて、先週の記事で示したように、現在のクロック系統ではPLL出力の192MHzを8分周した24MHzをmain clockとして選択し、これをCPUクロックとしています。

SAM4Lは48MHzでの動作が可能なのですが、36MHzを超える場合にはPower Scalingの機能を使ってPS2のモードに遷移する必要があります。また、フラッシュの読み出しにもウェイトを加えねばなりません。こんな理由で、いまのところはCPUクロックを24MHzとしています。FREQMでのクロック測定の結果も次のようになっていました。

この出力は、JTAGを使ってファームを書き込み/実行した際に取得したものです。ところが、いったんボードをリセットしたり、JTAG無しで動作させると、次のような出力になってしまいました。

CPUクロックの数値が激減してしまいました。それどころか、ゼロになってしまうことすらあります。FREQMの使い方をどこか間違っているのかとも思いましたが、他のクロックの数値は問題なく出ているので、FREQMの使い方に問題があるわけではありません。しばらく考えてみて、これはちゃんと正しくCPUクロック数を計測した結果なのだということに気がつきしまた。

以前の記事にも書いたように、FREQMによる周波数の計測には32KHzクリスタルを参照基準クロックとしてつかっています。今回の計測では、この参照基準クロックが250回カウントする間に、測定対象クロックが何回刻まれたかを数えることにより、測定対象クロックの周波数を算出しています。上記の出力とクロック系統図を見るとわかるように、GCLK0の出力は参照基準クロックの32KHzそのものです。そのため、GCLK0の測定クロック数も250となり、算出した周波数が32768Hzとなっているわけです。ちなみに、250クロックは7.62msに相当します。

続いて、CPUクロックの測定結果の意味を考えてみます。2回の測定結果は、7.62msの間にCPUクロックがそれぞれ285回と0回しか入らなかったことを意味します。CPUクロックが入らなければ、当然CPUは動いていないことになります。つまり、スリープしているということです。

FREQMによる周波数計測では、割り込みにより計測終了待ちをしており、割り込みが入るまではWFI命令を使ってスリープする作りになっています。そのため、計測が終わるまではCPUクロックが止まっていると考えることができます。1回目の計測のように0ではない計測結果が得られることもあります。これはどういうことかというと、7.62msの計測期間の間に、タスク制御に使用している10msに1回のsystick割り込みが発生した場合であると考えることができます。JTAGを使っていた時にはクロック源の周波数が出ていましたが、これはJTAGデバック時にはCPUのデバック機能を動かすためにCPUクロックが供給され続けるためのようです。

このようにCPUクロックの計測結果は、クロック生成部の出力を計っているのではなく、省電力機能によるクロック・ゲーティングが働いて実際にCPUに入っているクロック数を数えているのだと推測すると、つじつまが合うのです。試しに、割り込み待ちではなくポーリングにより計測終了待ちをしてみると....

ちゃんと24MHz相当の値になりました。CPUクロックは、実際にCPUが動いた割合を反映することが確認できました。したがって、実行すべきタスクが無い場合にはちゃんとスリープするようにソフトウェアが組まれていれば、この値からCPU使用率を導出できることになります。今度は、IISCとABDACBを動かして受信した音楽データの再生処理をしてみましょう。

再生処理が動いていない期間では、実効クロック速度が37KHz程度であったのが、再生中は146KHz程度に増えていますが、それでも24MHzの0.6%程度に過ぎません。再生処理といっても、その実態はDMA割り込み処理にしか過ぎないので、CPUの負荷は小さいことが良くわかります。

SAM D20

2013-06-18 12:29:55 | Weblog
ATMELがCortex-M0+製品群SAM D20を発表しました。先週のセミナーで、M0+製品が近日中に発表されるとは聞いていましたが、こんなに早く出てくるとは思ってもいませんでした。後は、実際に買えるのに、どの程度時間がかかるんでしょうか。



このSAM D20ですが、SAM4Lと同じようにAVR製品群のノウハウが導入されているようです。クロック系やEvent systemなんかがそうです。DFLLもありますね。SERCOMという周辺デバイスが目新しいところですが、USART, SPI, I2Cを統合したもののようです。個人的にはUSBが含まれていないのが、残念なところ。趣味で使うには、100円程度高くてもUSBがあるほうがデバックとかには都合がいいんですが。。

データシートも図表に色がついて、ちょっと雰囲気が変わりました。そしてAPノートとして、ASF用に用意された一連のデバイスドライバの説明が用意されています。なんか、これまでとはちょっと違う意気込みが感じられます。

これまでの製品系列でも、SAM4Nも資料が公開されてしばらくたちました。こちらも、SAM4SのUSB機能無し版です。SAM4SはフラッシュとSRAM容量が大きいものを出して、特色を出そうとしている印象を受けます。次々と出てきても全てに手をだすわけにもいかず、しばらくはSAM4Lで遊ぶつもりです。小物を作る機会があれば、SAM D20のQFN 32ピンを使ってみたいものです。

32KクリスタルでUSBを動かす

2013-06-17 00:22:10 | SAM4
ABDACBからサイン波を出力した際のノイズが気になるので、クリスタルを変更してみようと思います。しかし、現在使用している12MHzのクリスタルはPLLを通してUSBの48MHzを作るのにも使っています。これまでのクロックの使い方はこんな感じです。

このままでクリスタルを24.576MHzに変更してしまうと、USBクロックが狂ってしまうので、別途48MHzを作る方法を考えねばなりません。SAM4LにはPLLとは別にDFLL (Digital Frequency Locked Loop)という機能が用意されており、既存のクロックを逓倍した周波数を生成することができます。仕様では8~150KHzのクロック源から、20~150MHzのクロックを生成できるようです。PLLと違ってdivierはありませんが、multiplierに設定する乗数を大きくできるので、低い周波数から高い周波数を作れるようです。そこで、32KHzクリスタルの出力から48Mhzを生成してUSBを動かしてみることにしました。具体的には、32768Hzを1465倍して48.00512MHzを作ります。


新しいクロック系統は上図のようになります。DFLLの入力クロックはGCLK0という約束になっているので、32KHzクリスタルの出力を加えるにはOSC32の出力をいったんGCCTRL0を通してやる必要があります。DFLL出力が48MHzになるので、GCCTRL7も素通しになりました。

最初は、DFLLがロックしなくてしばらく悩みましたが、DFLL0CONFのCALIBフィールドを誤って0にしてしまったのが原因でした。この部分を書き換えないようにレジスタを設定しないと、出力周波数によってはロックしなくなってしまうようです。こうして、無事32KHzからUSB 48MHzを生成して、動かすことに成功。CDCでコンソールアクセスに使ってるだけですが、問題無く使えています。FREQMを使って、各クロックの周波数を計ってみた結果がこちらです。

各クロックはFREQMを使って順番に測定していますが、測定値にはばらつきが生じます。DFLL0とGCLK7は同じになるべきですが、値が違うのはそのためです。

FREQMに関連して、ひとつ面白いことに気がついたのですが、次の記事ネタにすることにします。これで安心して、12MHzクロックの方を交換できます。近日中に秋月で24.576MHzを買ってこよう。

6月18日追記
44.1KHz系列で必要なクロックは 24.576MHzではなくて、22.5792MHzでした。データシートの数字を1段間違えて拾っていました。あぁ。。。これは秋月には無いみたい。

ABDACBから音を出す

2013-06-15 19:32:41 | SAM4
SAM4LにはDACCという通常のD/A変換器機能も用意されています。ABDACBはオーディオ用となっているのですが、それでは何がオーディオ用に違っているのかという点についてまずは書いておこうと思います。

DACCは10bit, 1チャンネルですが、ABDACBはひとつで16bit, 2チャンネル。ABDACBではDAC/DACNのコンプリメンタリ出力が可能となっており、音量調節機能も用意されています。前記事で書いたように、LPFを介してアンプを接続することができます。サンプリング周波数としては、8000Hzから44.KHz, 48KHzまでをサポートしていますので、電話の音声通話からCD/DVDクオリティの音楽再生データを扱うことができます。

さらにオーディオ用にオーバサンプリングの機能を有しているのが、通常のDACであるDACCとの大きな違いです。基本的に128倍の周波数でのアップサンプリングによる元データの補間をおこなうことができます。USB用のクリスタルを使えるように、125倍や136倍のアップサンプリングを使用するモードも用意されています。今回の基板ではすでに、12MHzのクリスタルを実装済みですので、このモードを使用することにします。

ABDACBもDMAが使えますので、IISCから受信したオーディオデータをいったんメモリに蓄えて、それをそのままABDACBにDMA送信してやれば、それだけで再生が可能です。もちろん、IISCで受信するデータとABDACBで送信するデータの形式が同一になっていなければなりません。今回はどちらも16bitのコンパクト・ステレオ形式を使いました。この形式では32bitワードのなかに左チャンネル16bitと右チャンネル16bitをまとめて入れてワード単位で転送します。いっぺんに、2チャンネル分の転送ができてしまうので、DMAチャネルもひとつしか使わずに済みます。

このようにDMA転送するだけで再生できるので、CPUにはほとんど負荷かかりません。しかしながら、今回の方式にはひとつ大きな問題があります。それはクロックの同期がとれていないことです。IISCはスレーブ動作となっているので、44.1kHzオーディオデータはWT32側が出力するマスタークロックに同期して受信されます。一方、ABDACBも44.1kHzのサンプリングレートで、データを送信しますが、こちらはGCLK6で生成される48MHzを元に動作します。この2つのクロックの同期がとれていれば問題無いのですが、全く独立に動いているために受信と送信のペースが同じにはなりません。特にABDACBではオーバサンプリング・クロックとして本来であれば、47.9808MHzが必要であるところを、48MHzで済ませています。そのために、送信のペースがちょっと早めになってしまいます。どのくらい早いかを、もう少し具体的に確認してみましょう。

47.9808Mhzという周波数は、44.1Khzを8 ×136倍した数字です。本来であれば、このクロックを8 ×136で割ることで、44.1KHzのサンプリング周波数を得て、そのタイミングでデータを送信すべきです。このクロックが48MHzになると...

48000000 / 8 / 136 = 44117.647

となり、毎秒17, 18サンプルも多く送信してしまうことになります。



この問題に対処するために、IISCで受信したデータはいったんバッファ・キューにためて、送信処理はこのキューからバッファを取り出しながら行うこととしました。キューの残りが少なくなったらならば、ABDACBに送信すべきサンプルデータをひとつ重複させることで送信ペースを落としてやります。この処理を追加して、音楽を再生してみた時の様子が次のログです。



送受信は128サンプル単位でおこなっています。Normalが通常の128サンプル単位で送信した回数、slowerが速度調整のために、1サンプル加えた129サンプル単位で送信した回数です。およそ10秒間でslowerが200から210程度増えるようです。予想よりちょっと多めですがクロック速度誤差の影響かな? 実際に音楽を聞いてみると、もちろんちゃんと聞こえます。これでいいような気がしたのですが、試しにサイン波を再生してみると、"バサバサ"というノイズが入っているのがはっきりとわかります。つじつま合わせで1サンプル追加している影響でしょうか?うーん、困ったなぁ。

秋月に24.576MHzのクリスタルがあるようなので、こいつにクリスタルを交換すれば少しは改善されるかもしれません。試してみようかなぁ。でも、これをやってしまうと、今度はUSB用の48MHzをどうやって作るかを考えねばなりません。

Atmel Technology on Tour

2013-06-12 12:45:36 | Weblog
昨日は、ATMELが顧客向けに開催したハンズオンセミナー(Tech on Tour)に出席してきました。昨年も同様のセミナーに個人で申し込んでみたのですが、顧客向けセミナーのために参加することができませんでした。今回は、ATMELの代理店であるトーメンエレクトロニクスの方に仲介をいただき、潜り込んできました。参加費$49だったのですが、代理店の紹介ということで無料でした。これまでこういう半導体ベンダーのセミナーに参加したことが無いので良くわかりませんが、この業界ではこれが慣習なんでしょうか? 素晴らしい。

今回のセミナーは、SAM4Lの低消費電力性の概要と、Atmel Studio 6を使っての開発手順が中心でした。ハンズオンなので、テキストで解説される手順に沿ってAtmel Studio 6を操作してビルドと実行を行うというもの。時間の制約もあるので、どちらかというとチップそのものよりも、Atmel Studioの操作とASF (Atmel Software Framework)のAPIを理解するのがメインでした。こういうセミナーの場合、チップの概要については、あらかじめ予習して理解しておく必要がありますね。そうじゃないと、テキストが指示するとおりにプログラムを追加/修正しているだけでは、何をしているのかまでを理解している時間がありません。わたしの場合、ちょうどSAM4Lを使い始めていたので内容については良く理解できました。コースの題材にはFreeRTOSも含まれており、トレースの可視化ツールを使って、タスクのスケジューリング動作を確認するという内容も含まれていました。今後、FreeRTOS対応のサンプルやドライバ等を増やしていくようです。




使用した教材はSAM4L-EKですが、802.14.5 のボードであるRZ600がセットとして含まれていました。今後、タッチボタンの実験するのに使おうかと思います。タッチセンサに関してはAtmelはQtouchと呼ぶ技術を持っており、マイコン用にライブラリを提供しています。SAM4LではCATB (Capacitive Touch Module)という専用ハードウェアによるサポートがありますが、ASFで提供されるライブラリを使用することを前提としているので、マニュアルの説明だけでは使いこなせそうもありません。サンプルを実際に動かしながら、コードを読んで理解を深める必要がありそうです。

ABDACBにアンプをつなげた

2013-06-10 00:33:09 | SAM4
SAM4LSのIISCを使ってWT32からオーディオ・データを受信できていそうなことが確認できたので、次の段階として、受信データをそのままABDACB(Audio Bit Stream DAC)に送信して、再生することにします。



ABDACBは差動信号を出力することができます。これをLPFを介してアンプに接続。アンプとしてはBlueHANDでも使ったTPA6132A2を使用。単に手持ちのものを使っただけです。ABDACBの機能については次回の記事でより詳しく触れることにしますが、音量調節の機能も備わっているので、レジスタへ書き込むだけで音量調節とミュート制御が可能です。部品数少なくて済むので、助かりますね。TPA6132A2にはEnable端子があるので、これは後ほどSAM4LSのGPIOまたはWT32のPIO端子で制御する予定。今のところは、ジャンパで吊ってあります。

赤いGecko

2013-06-08 10:02:42 | Weblog
SilabsがEnergy Microを買収することが合意されたと発表されました。



Cortex ARMを供給するベンダとしてはあまり目立たなかったSilabsですが、EFM32が加わると大きな違いが生まれそうですね。今後の無線関連デバイスの動向に大きな影響があるのではないでしょうか。

買収の合意書に署名する様子がYouTubeで公開されています。社屋のベランダみたいなところで、セレモニーが行われたのでしょうか?赤いGeckoもそうですが、社員/株主向けの演出としても好感が持てます。


LPC-Link2をCMSIS-DAPで使ってみる

2013-06-07 06:57:12 | Weblog
遅まきながらLPC-Link2をゲット。使ってみました。



このボード、速そうなCPUが載っているうえにI/Oポートもきちんと出ており、ボード単体としても利用可能なようです。そのため好事家たちの関心を集めているのでしょう、先日秋月を覗いた際には品切れになっていました。将来的にアドオンボードでオシロやロジアナにもなりそうなところも面白そうです。しかし、わたしの今回の目的は、あくまでもJTAGとして使うことです。

LPC-Link2はファームウェアを書き換えることで、Redlink, J-Link, CMSIS-DAPの3種類のJTAGターゲットインタフェースとして使用することができます。このうち、Redlink, J-Linkでは適用できるIDEやターゲットチップに制約が生じ、はやい話がNXPのターゲットを使わないとなりません。このことは、LPC-Link2の紹介ページにも明記されています。一方、CMSIS-DAPはARMが提唱するインタフェースであり、特定のIDEやターゲットチップに依存することはありません。わたしが愛用する、CrossWorks for ARMはCMSIS-DAPに対応しているので、接続を試してみることにしました。

ほんとうは現在作業中のSAM4LSボードとつなぎたいところなんですが、LPC-Link2には10ピンのケーブルしか付属していませんでした。そこでSAM3S4Aを搭載したMiniSAMボードをつなげてみました。


SWDモードでバッチリつながって、フラッシュの書き換えも問題無し。Mac OS環境で使えてATMELのCortexマイコンともつながることが確認できて、ご機嫌です。今後の使い勝手を考えると、10ピンヘッダーのDIP化ボードとかが欲しいところです。秋月かaitendoあたりで変換基板とか、用意してもらえませんでしょうかねぇ?

付け加えておくと、LPC-Link2上のLPC4370が予想外に熱くなるので、最初はショートさせたのかと汗りました。PCにUSBでつなげただけでも200MHz以上のクロックで動いているんでしょうか?