ATtiny212 DAC

できること:マイコン内部の値を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を繰り返しているので出力される波形がのこぎり波になっている。

パターンを変えればオシレーターにもなりそうだ。