--/--/--  --:--    スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2010/05/21  21:11    MTM05行ってきます
明日、あさってと東京の東工大 大岡山キャンパスで行われる、
MTM05を見に行ってきます。
去年の11月にMTM04を見に行きましたが、
なかなかモチベーションが上がったので今回も行くことにしました。
今回は知り合いも出展するらしいので楽しみです。
スポンサーサイト
2010/05/18  02:01    XMEGAでDAC出力
先日に引き続きXMEGAでいろいろ試していましたが、
今回はXMEGAシリーズで初めてAVRに搭載された周辺機能の1つである
DACを少しいじってみました。


プログラムは上記の通り。
sin_table.hの中には256通りのsinテーブルが入った配列が定義されており、
それを割り込みで読み込んでます。
ちなみにプログラムは前回の流用なのでPWM出力も2本残っていますが、
そこは気にしたら負けです。
10usごとにタイマカウンタE1で割り込みをかけて、
割り込み処理の中でDACAとDACBのデータレジスタに値を投げ込んでいます。
今回のプログラムの場合、DACA0からはsin波が、
DACB0からはノコギリ波が出力されるようになっています。
以下が出力波形をオシロで確認した写真。

P1010765.jpg

P1010764.jpg

ノコギリ波の方の上がり始めの部分が少しおかしいですが、
とりあえず、sin波とノコギリ波は簡単に出力できました。
レジスタの設定も比較的簡単に設定できるので、
数分あればいろいろな波形を出せると思います。

・追記(2010/6/24)
波形がおかしかったノコギリ波ですが、学校のデジタルオシロで確認した所、
問題なく綺麗に表示されました。
家のアナログオシロの性能が残念だったのが原因のようです。
2010/05/16  03:12    XMEGAを使ってみる
前に共立で購入してピッチ変換基板に半田付けだけして放置していたATXMEGA128A1ですが、
時間もできたことなので少しいじってみました。

P1010759.jpg
共立で購入したATXMEGA128A1をサンハヤトのピッチ変換基板に実装しています。
また変換基板上でパスコンの実装と面倒だったのでGNDとVCCを共通化してます。
基板はそこら辺にあった切れ端を使用し、
ピンヘッダの在庫がほぼなかったので1辺だけの接続になってます。
1辺だけの接続ですが、前述の通り電源は全電源ピンに変換基板上で
供給されているので問題ありません。
下の基板上では電源用のコネクタとPDIコネクタ、LEDをPQ4に接続しています。
こんな見るからにてきとうな基板ですが、まぁいろいろ試してみてます。


今日いじった時のプログラムをぺたり。
あまり人に見せられるようなプログラムではないですが、まぁXMEGA初心者ということで。

内容としては、システムクロックを32MHz動作に変更、PWM出力、RTC割り込みです。
システムクロックに関しては、今までのMEGAやTINYではヒューズ切り替えでしたが、
XMEGAでは起動時2MHzでの動作をプログラム上で32MHzに切り替えることができます。
次にPWMでは搭載しているタイマカウンタを全て使用して24本のPWMを出力しています。
まさかAVRで24本ものPWMが出力できるとは思ってもいませんでした。
XMEGAさすがですね!
PWMはタイマカウンタごとに10倍ずつ周波数を上げており、
かつ同じタイマカウンタ内でデューティ比をそれぞれ変えています。
オシロで確認してみたところ全部ちゃんと出力が確認できました。
確認中も24本全てが違う波形だったのでなかなか面白かったです。
あとはRTCですが、割り込み+IO制御も一緒にテストしています。
リアルタイムクロックで0.5msごとに割り込みをいれて
PQ4に接続されたLEDを点滅させています。
ざっと動作はこんな感じです。

プログラムする上で気をつけた点としては、
XMEGAでは今までのレジスタ記述がMEGA・TINY系と違います。
機能名_レジスタ名 という形で記述します。
例 : PORTA_DIR
なので今までのDDRAというような記述はできません。

またIO関係のレジスタが大きく変更になりました。
一応DDRはDIR、PORTはOUT、PINはINというように対応していますが、
他にも各レジスタの一部のビットをセット・クリアするレジスタや、
プルアップするレジスタが独立していたりします。
なのでIOを使う際には注意が必要です。

システムクロックを切り替える際には、
起動時32MHz内蔵発振器が停止しているので、
まず32MHz内蔵発振器を許可しなくてはなりません。
さらに、発振器を起動させた際には安定するまで
ステータスレジスタを監視して安定を待たなくてはなりません。
その後やっとシステムクロックを切り替えるのですが、
システムクロックを切り替えるレジスタは保護機能によって保護されているため、
そのままでは書き換えることができません。
なので保護機能を一時的に解除するレジスタをいじって解除した後、
システムクロック制御レジスタで32MHzに切り替える必要があります。
上記のプログラムではもう使わない2MHz内蔵発振器を切り替えた後に停止しています。

リアルタイムカウンタもシステムクロック同様に、
まず32.768KHz内蔵発振器を許可しなくてはなりません。
許可する処理はシステムクロックと同様の手順です。
その後、RTCに供給するクロックを切り替える必要があります。

最後に割り込みについてですが、
今までと違うのは割り込みの優先度が3段階あることです。
各割り込みを許可する際に、今までは1bitをセットするだけでしたが、
XMEGAでは許可するビットが2bitあり、許可しつつ優先度を設定することができます。
また、PMIC_CTRLレジスタで各優先度の割り込みを有効にする必要があります。
そこさえ設定してしまえば、あとは今まで通り
ISR(ベクタ名) で割り込み処理を行うことができました。

とりあえず、今日XMEGAを初めて使ってみた感じを書いてみました。
一番驚いたのはやはり24本のPWMでしょうか。
まさかAVRでこんなにPWMが出せることになろうとは思っていませんでしたので。
明日も時間があればもう少しいろいろとやってみる予定です。
2010/05/15  23:54    随分と間が空いて
3月末から更新が途絶えてはや1ヶ月半ですね。
この1ヶ月半結構いろいろありました。
更新してなかったのは単にTwitterで満足して
(いわゆるサボリ)しまっていたのが一番な気がします。
ネタは結構溜まっているので徐々に記事に落としていこうと思います。
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。