User Tools

Site Tools


Sidebar

製作物
燃焼系
自動車ターボ流用ジェットエンジン
空き缶パルスジェットエンジン

弱電系
半導体式γ線検出器
半導体式α線検出器
AVRプログラム集

強電系
オーディオフライバックトランス
テスラコイル1号機(PWM式)
テスラコイル2号機(DRSSTC)
テスラコイル3号機(DRSSTC)
TIG溶接機
バッテリー溶接機1号機
バッテリー溶接機2号機
HeNeレーザー
ZVSドライバ

化学系
塩化銅エッチング

その他
雑多な物、便利な技など
FETの死亡診断
表面実装部品の取り外し
ICのシリコンダイの取り出し
バッテリー溶接
放射性鉱物探し
工具の消磁
特性不明なコア材の特性調べ
携帯の温度センサーの騙し方



過去のBlog記事一覧

他サイトへのリンク

管理人の連絡先など
管理人のYoutube
管理人のTwitter

start

Quick Start Guideの動作確認済みプロジェクトファイル

ASF(Atmel Software Flameworks)のQuick Start Guideは
サンプルコードの説明も割としっかり書いてあって分かりやすいのですが、
時々抜けてる所や、説明不足な箇所なんかが有って、
記述されている内容だけでは動かない事があります。

特に通信系では通信出来ない問題がソフト由来なのか、
ハード由来なのかの切り分けが極めて重要且つ初心者には困難な問題となります。

と、言うことで、動作確認をしたプロジェクトファイルを今後ここに投げていきます。
ホントはAtmelがやるべき事だと思うんだけどね、仕方ないね。
(まあAtmelからしたら開発ボード買ってハードの問題を切り分けろって話なんだろうけど)

UART(オウム返し)

2014/03/07 18:54 · Hirosi Suzuki

XmegaのクロックとDFLL

XMEGA32AU4には周波数の自動校正機能(DFLL)が付いている。
そしてうれしい事にASF(AtmelSoftwareFlameworks)を使うと
面倒なレジスタ周りの設定をせずに、
ASFのコードのコメントアウトをするだけでコレが可能になる。
しかも内蔵2MHzOSCの校正だったら外付け部品無しで校正ができる。

場合によっては内蔵32MHzRC-OSCよりもDFLLで校正した2MHzを
元にPLLで16逓倍して作った32MHzの方が精度が良かったりで
なかなか侮れない。

delayの時間がおかしいとかタイマーの時間がおかしい
なんかの時にチラと思い出してみると良いかもしれない。

2014/03/07 18:36 · Hirosi Suzuki

Xmega-USB

最近ATXMEGA32A4Uを使う様になってからASF(Atmel Software Flameworks)
が便利なので専らこいつを使って色々試していますです。
で、大抵の機能はQuick Start Guideを見ながらポチポチ(ほぼコピペ)
すれば使えるのですが、どーーーーやってもUSBが動きません。

とりあえずUSB CDCのQuick Start Guideが有ったので試してみたのですが、
さっぱり動きません。というか、コンパイルが通りません。
「PORTが定義されてるけど使われてないよ」とか
「externの前に;が入るんじゃないのー」とか
そんなバカなってなエラーやら警告が山盛りです。

もうお手上げなので別の機能を試している状態なんですが・・・
どなたかUSB CDCのQuick Start Guideの動作確認済みソースを
お持ちの方はいらっしゃいませんか・・・

とりあえずQuick Start GuideのURL置いておきますね・・・
http://asf.atmel.com/docs/3.5.1/xmegaau/html/udi_cdc_quickstart.html

2014/03/07 00:27 · Hirosi Suzuki

AtmelStudio6.0とXmegaのデバッグ(OUTTGL)

今PCに入っている環境はAtmelStudio6.0と、そいつ付属のAVRSimulatorなんですが、
デバッグの段階で引っかかったのでメモ。

例えば、こんなコードを書いたとしましょう。

while(1)
{
    PORTA.OUTTGL = 0xFF;      //PORTA_OUT = 0xFF ^ PORTA_OUT;でも可
}

で、whileの中にブレークポイントを打ってデバッグ実行すると、
whileの1周目では普通にポイントに引っかかって止まるのですが、
2周目以降止まらなくなります。
勿論コード的には問題無いので実機に書き込むと問題無く動きます。

どうもコンパイラの最適化を無しにすると問題無くデバッグできるようになるので
何かしらの最適化の結果起きる事象の様です・・・ めんどい・・・orz

ちなみに
PORTA_OUT = 0xFF ^ PORTA_OUT;
PORTA.OUTTGL = 0xFF;

この2つのコード、やってる事は同じですが、実行速度にかなりの開きがあって、
最適化O1、2MHzクロックで動作時、上のコードで出力される矩形波は208.7kHzであるのに対し、
下のコードでは260.8kHzの矩形波が出力されます。
変なコード書かずに用意されてる文を使えって事ですね。わかります。

2014/03/03 17:11 · Hirosi Suzuki

XMEGAの入出力レジスタ周り

普段TinyやMegaのAVRを使っていて、今日初めてXMEGAなAVR(ATXMEGA32A4U)を
使って入出力周りのレジスタの表記がガラッと変わっていて驚いたので使い方をメモ。
XMEGAはMegaみたいにDDRD = 0xFFって書いてもダメなのね。

役割Tiny & Megaでの表記例XMEGAでの表記例
ポート入出力方向の設定DDRB = 0xFFPORTB.DIRSET = 0xFF
PORTB.DIR = 0xFF
PORTB_DIR = 0xFF
ポートへの数値の設定PORTA = 0x0BPORTA.OUTSET = 0x0B
PORTA.OUT = 0x0B
PORTA_OUT = 0x0B
ポートの特定bitの反転PORTA = 0x0F ^ PORTAPORTA.OUTTGL = 0x0F


こう見てみると例えばPORTA.OUT = 0xFF と PORTA.OUTSET = 0xFF は意味同じやんけって思うけど、
実際は微妙に違うらしく、
PORTx.OUTSETの方は「レジスタの1が立ってる場所を1に設定」って意味で
1を立てる事はできるけど、0を立てる事は出来ない。
PORTx.OUTの方は単純に「出力ポートレジスタに値を代入」って意味で
こっちは普通に0を立てることもできる。

だから

PORTA.OUT = 1;
while(1)
{
    PORTA.OUT = PORTA.OUT << 1;
}

このwhileループと

PORTA.OUT = 1;
while(1)
{
    PORTA.OUTSET = PORTA.OUTSET << 1;
}

このwhileループでは動作が全く違う。(分かりにくい例でごめんね  J('ー` )し)
もうちょっと例を出すと、
sbi(PORTA,1);  と  PORTA.OUTSET = 1;  が同じで
PORTA = 1; とは違うよねってそんな感じ。

ぶっちゃけTinyやMegaで値の代入に慣れきってるとOUTSETのありがたみが分からない・・・

2014/03/02 23:04 · Hirosi Suzuki

<< Newer entries | Older entries >>

start.txt · Last modified: 2013/02/03 18:01 by hirosi