できること:マイコン内部の値をDACに出力させる。
プログラム
ここから
//DACの出力用
byte temp_DAC =0;
void setup() {
//入出力の設定 全て出力
PORTA.DIR = 0b11111111;
//DACの設定 スリープ時に動作させる、イネーブル
DAC0.CTRLA = 0b01000001;
//基準電圧の設定 DAC0REFSEL 2~0=011、基準電圧4.3V
VREF.CTRLA = 0b00000011;
}
void loop() {
//temp_DACの値をDACに出力
DAC0.DATA = temp_DAC;
//ちょっと待つ。
delayMicroseconds(1);
//temp_DACの値を変える。
temp_DAC++;
}
ここまで
■結果
DACの出力(2番ピン)をオシロスコープで撮ったのがこちら。メインのループで1usごとにDACを出力させてみた。
1usごとにtemp_DAC++の値を出力させており、計算値だと周波数は約4kHzになるが、2.3kHzとなっている。これはtemp_DAC++の代入や加算等で時間を使っているためだと考えられる。
■簡単な解説
DACは設定が済めばDAC0.DATAに出力させたい値を入れるだけでできるので結構楽。
//DACの設定 スリープ時に動作させる、イネーブル
DAC0.CTRLA = 0b01000001;
コメントそのままだが、DACのイネーブルとスリープ時にDACを駆動させる設定を行っている。
//基準電圧の設定 DAC0REFSEL 2~0=011、基準電圧4.3V
VREF.CTRLA = 0b00000011;
DACの基準電圧の設定を行っている。DACの出力電圧の範囲は基準電圧からGNDまでになっており、基準電圧は0.55V、1,1V、1.5V、2.5V、4.3Vから選ぶことができる。今回は5V電源を使用しているので4.3Vに設定した。
DAC0.DATA = temp_DAC;
temp_DACの値をDACに出力させている。
今回はtemp_DACの値を0~255を繰り返しているので出力される波形がのこぎり波になっている。
パターンを変えればオシレーターにもなりそうだ。