返回列表 发新帖

SAM4E-EK开发板代码解读05——DAC

[复制链接]

28

主题

45

帖子

1万

积分

允许发帖

积分
10186
发表于 2020-5-13 14:43:00 | 显示全部楼层 | 阅读模式
本帖最后由 Mcuzone_TKN 于 2020-5-15 09:13 编辑

关键词Microchip Atmel  SAM4E SAM4E-EK  SAM4E16E 芯片 DAC 数模转换器


概述:演示如何在自由运行模式下使用DAC


该例子允许配置输出“正弦波”的频率和振幅,频率可设置成200HZ~3KHZ,峰值振幅可设置为100~1023/4095,分辨率为18/12位。


打开产品光盘SAM4E16E-EK/SAM4E16E-EK中文资料/softpack软件包/Atmel Studio 7,打开05_DACC_EXAMPLE例子。



int main(void)
{
static uint8_t i;
uint8_t uc_key;
uint32_t ul_freq, ul_amp;


sysclk_init();
board_init();


configure_console();


puts(STRING_HEADER);

//使能DAC的时钟
#if SAM4L
sysclk_enable_peripheral_clock(DACC_BASE);
#else
sysclk_enable_peripheral_clock(DACC_ID);
#endif

//重置DAC寄存器
dacc_reset(DACC_BASE);

//半字节传输模式
dacc_set_transfer_mode(DACC_BASE, 0);

//初始化定时、振幅和频率
#if (SAM3N) || (SAM4L) || (SAM4N)
//使能0x10(17个时钟)  内部触发时钟 0x60 (96个时钟)
dacc_set_timing(DACC_BASE, 0x10, 0x60);

//使能DAC
dacc_enable(DACC_BASE);
#else
//省电  睡眠模式 0 禁用;快速唤醒 0禁用。
dacc_set_power_save(DACC_BASE, 0, 0);
//时间   刷新   0x08 (1024*8 dacc时钟)      最高速度模式- 0(禁用)        启动时间- 0x10 (1024 dacc时钟)
dacc_set_timing(DACC_BASE, 0x08, 0, 0x10);

//禁用标签并选择输出通道DACC_CHANNEL   
dacc_set_channel_selection(DACC_BASE, DACC_CHANNEL);
   
//使能输出通道DAC通道
dacc_enable_channel(DACC_BASE, DACC_CHANNEL);
   
//设置模拟电流
dacc_set_analog_control(DACC_BASE, DACC_ANALOG_CONTROL);
#endif


while (1) {
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(384);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(384);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(342);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(342);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(308);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(308);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(289);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(289);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(256);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(256);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(231);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(231);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(205);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(205);
  }
  delay_s(1);
  for (i=0; i<20; i++)
  {
   dacc_write_conversion_data(DACC_BASE, 3686);
   delay_us(192);
   dacc_write_conversion_data(DACC_BASE, 410);
   delay_us(192);
  }
  delay_s(2);
}
}




回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表