Arduino UNO R3では、analogWrite()でPWMを出力して疑似アナログ出力としていますが、Arduino UNO R4(WiFi)には、独立したDACが内蔵されています。
DACの分解能は12bitですが、analogWriteResolution()でビット数を指定することができます。この関数でDACの分解能を指定することによりDACが使用可能になります。出力先はA0です。
![](https://blogimg.goo.ne.jp/user_image/25/3b/190b412c154d22eed784709094020fbc.png)
まず、テストとしてDAC out(A0)に分解能10bitで、1023の値で出力してみます。次のスケッチを書き、コンパイル書き込みをします。
----------------------------------------------
void setup(){
analogWriteResolution(10);
analogWrite(DAC,1023);
}
void loop(){}
----------------------------------------------
出力された電圧です。4.76Vでした。
![](https://blogimg.goo.ne.jp/user_image/5c/c6/e9b210370d7a226059ee43257af6e9a5.jpg)
次に、分解能を12bitにして、同じ値1023をDACで出力してみます。
----------------------------------------------
void setup(){
analogWriteResolution(12);
analogWrite(DAC,1023);
}
void loop(){}
----------------------------------------------
当然ですが、1/4の値1.19Vが出力されました。
![](https://blogimg.goo.ne.jp/user_image/13/cd/799ba862c4add070f67616791ee75b08.jpg)
次にDACの出力電圧を変化させて、鋸歯状波を作ってみます。
スケッチです。分解能は10bitで、0~1023の値を連続して出力します。
----------------------------------------------------
void setup() {
analogWriteResolution(10);
}
void loop() {
for(int i=0;i<1024;i++ ){
analogWrite(DAC,i);
}
}
----------------------------------------------------
analogWriteResolution(10);
}
void loop() {
for(int i=0;i<1024;i++ ){
analogWrite(DAC,i);
}
}
----------------------------------------------------
出力された波形です。周波数は97Hzです。
![](https://blogimg.goo.ne.jp/user_image/7f/c5/9c22c511c1437768ec0a178773a66967.png)
かなりギザギザした鋸歯状波(ノコギリ波)が出力されました。
分解能を12bitにして、0~4095の値をDACから出力してみた時の波形です。
周波数は24Hzです。
![](https://blogimg.goo.ne.jp/user_image/46/43/b4f22e6c0948d2ed273d26c50d479dda.png)
スケッチ例にある「SineWave.ino」を書き込んで出力波形を見てみました。
周波数は、約290Hzです。
![](https://blogimg.goo.ne.jp/user_image/6c/7b/3c71f6fe05d67067ed76cf4f839f44b2.png)
![](https://blogimg.goo.ne.jp/user_image/09/47/57d00f93285ae2b6c341e2e64d244fab.png)
※コメント投稿者のブログIDはブログ作成者のみに通知されます