前面介绍了A/D数据采集和显示的内容,这次再为它补上D/A信号输出方面的内容。
RA6M4 配置了双通道的12 位 DAC,在使用该功能之前,先要在RASC上对D/A进行配置,其步骤为:
在引脚功能上使能DAC0,其对应的引脚是P014 ,见图1所示。

图1 使能DAC
然后在Stacks中加入DAC,见图2所示。

图2 加入DAC
按图3所示对其属性加以配置,随后点击“Generate Project Content”按钮,以生成配置代码。

图3 属性配置
在生成代码后,以KEIL打开所生成的工程,并主程序的文件中添加相应的内容,是主程序的内容为:
void hal_entry(void)
{
uint16_t u,dac;
err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);
assert(FSP_SUCCESS == err);
printf("A/C test : \r\n");
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"RA-Eco-RA6M4",16);
OLED_ShowString(0,2,"ch0:",16);
OLED_ShowString(0,4,"u : . mV",16);
ADC0_Init();
fsp_err_t err = R_DAC_Open(&g_dac0_ctrl, &g_dac0_cfg);
assert(FSP_SUCCESS == err);
err = R_DAC_Start(&g_dac0_ctrl);
assert(FSP_SUCCESS == err);
dac=4095/2;
err = R_DAC_Write(&g_dac0_ctrl, dac);
assert(FSP_SUCCESS == err);
while(1)
{
ADC0_Convert(ADC_CHANNEL_0);
u=ADC0_GetValue(ADC_CHANNEL_0);
printf("CHANNEL_0:%d \r\n",u);
OLED_ShowNum(40,2,u,4,16);
u = (double)(u/4095.0)*330;
OLED_ShowNum(40,4,u/100,1,16);
printf("U: %d \r\n",u);
u=u%100;
OLED_ShowNum(56,4,u,2,16);
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_10, BSP_IO_LEVEL_LOW);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_11, BSP_IO_LEVEL_LOW);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_14, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_10, BSP_IO_LEVEL_HIGH);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_11, BSP_IO_LEVEL_HIGH);
R_IOPORT_PinWrite(&g_ioport_ctrl, BSP_IO_PORT_02_PIN_14, BSP_IO_LEVEL_HIGH);
}
}
经程序的编译和下载,其测试效果如图4所示,说明数据输出有效。

图4 输出检测