用户工具

站点工具


ocrobot:alpha:d21g18a:tutorial03

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
ocrobot:alpha:d21g18a:tutorial03 [2019/12/05 02:53] 董凯萍ocrobot:alpha:d21g18a:tutorial03 [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +====== DAC使用 ======
 +
 +测试波形如下:
 +{{:ocrobot:alpha:d21g18a:pasted:20190716-045857.png}}
 +<code cpp>
 +#include <Arduino.h>   // required before wiring_private.h
 +#include "wiring_private.h" // pinPeripheral() function
 + int sinv[200]; 
 +const float pi=3.14;
 +//Serial2用于打印调试信息 11-RX 10-TX
 +Uart Serial2 (&sercom1, 11, 10, SERCOM_RX_PAD_0, UART_TX_PAD_2);
 +void SERCOM1_Handler()
 +{
 +  Serial2.IrqHandler();
 +}
 +  
 +void setup() {
 + 
 +//  pinMode(A0, OUTPUT);        //DAC输出时不需要设置此项
 +  analogWriteResolution(10);  //10位分辨率
 +  analogWrite(A0, 0);         
 +    
 +
 +  Serial2.begin(115200);
 +  pinPeripheral(10, PIO_SERCOM);
 +  pinPeripheral(11, PIO_SERCOM);
 + delay(1000);
 +        
 +    for (int i=0;i<200;++i)  //计算正弦波200点
 +    {
 +        sinv[i]=(int)(512.0*sin(2*pi/200*i)+512); //满幅度3.3v 中心位置1024/2=512
 +        delay(10);
 +         Serial2.print("i= "); 
 +        Serial2.println(i);
 +        Serial2.println(sinv[i]);
 +    }
 +   Serial2.println( sin(2*pi/200)); 
 +
 +}
 +
 +int i;
 +void loop() {
 +  int output; 
 +  analogWrite(A0, sinv[i]);
 +  delayMicroseconds(1);
 +  i++;
 +  if(i>=200)
 +  i=0;      
 +}
 +</code>