揭秘ADuC702X与ADuC706X系列全攻略之(四)----DAC
0赞ADuC702x
ADuC7026集成了4个12位电压输出的DAC,每个DAC都有一个可以驱动5 kΩ/100 pF的缓冲器。它有三个可选择的量程,0V~VREF (内部带隙2.5V参考电压),0V~DACREF和0V~AVDD。DACREF同外部的DAC参考电压是等效的,其信号的范围为0V~AVDD。
DAC0CON寄存器位描述
|
位 |
值 |
名称 |
描述 |
|
6 5
4
3 2 1:0
|
0 0 0 1 1 0 1 1 |
DACCLK
DACCLR
|
保留 DAC更新速率,用户置位时使用定时器1对DAC进行更新。用户清零则使用HCLK,(内核时钟)对DAC进行更新。 DAC使能位,用户设置此位使能正常的DAC操作,清除此位DAC数据寄存器将复位为0 保留,此位应设置为0 保留,此位应设置为0 DAC量程位 掉电模式,DAC为三态输出 0 − DACREF 量程 0 − VREF (2.5 V)量程 0 − AVDD 量程 |
ADuC706x
ADuC706x集成了一个12位电压输出DAC。该DAC具有轨对轨电压输出缓冲能力,可驱动5kΩ/100pF负载。
该DAC有四个可选范围:
•0 V~VREF(内部1.2 V的带隙参考电源)
• VREF- ~ VREF+
•EXT_REF2- ~ EXT_REF2 +
•0 V~AVDD
最高信号范围为0 V至AVDD。
DAC0CON控制寄存器描述
|
位 |
值 |
名称 |
描述 |
|
15:10 |
|
DACPD |
保留 |
|
9 |
|
DACBUFLP |
DAC输出禁用(DAC为三相输出)。 |
|
8 |
|
OPAMP |
置1在低功率模式设置DAC输出缓冲区。对正常模式和运算放大器模式用于进一步的描述见电气规范。 |
|
7 |
|
OPAMP |
置1放在运算放大器的模式设置DAC输出缓冲。 |
|
6 |
|
DACBUFBYPASS |
置1旁路输出缓冲区并直接发送DAC输出结果至输出引脚。 |
|
5 |
|
DACCLK |
置1,在HCLK下降沿来临时更新DAC。 |
|
4 |
|
/DACCLR |
设置为0以清除DAC输出和将DACDAT置0。对此位进行写操作,则对DAC输出立即产生影响。 |
|
3 |
|
DACMODE |
设置为1,以启用16位DAC插值模式。 |
|
2 |
|
RATE |
插值模式使用。 |
|
1:0 |
1 1 1 0 0 1 0 0 |
DAC Range bits |
0 V~AVDD。 |
比较
ADUC7026和ADUC7060的DAC使用方法基本相同,只是7060的分辨率更高,这也是它在仪表领域备受青睐的原因。
应用的例子
下面举一个ADUC7026使用DAC 的例子,用于实现产生一个正弦波
#include<ADuC7026.h>
int main (void)
{
// 在Flash/EE中制表
const static unsigned short TableS[64] = {
0x07FF, 0x08C8, 0x098E, 0x0A51, 0x0B0F, 0x0BC4, 0x0C71, 0x0D12,
0x0DA7, 0x0E2E, 0x0EA5, 0x0F0D, 0x0F63, 0x0FA6, 0x0FD7, 0x0FF5,
0x0FFF, 0x0FF5, 0x0FD7, 0x0FA6, 0x0F63, 0x0F0D, 0x0EA5, 0x0E2E,
0x0DA7, 0x0D12, 0x0C71, 0x0BC4, 0x0B0F, 0x0A51, 0x098E, 0x08C8,
0x07FF, 0x0736, 0x0670, 0x05AD, 0x04EF, 0x043A, 0x038D, 0x02EC,
0x0257, 0x01D0, 0x0159, 0x00F1, 0x009B, 0x0058, 0x0027, 0x0009,
0x0000, 0x0009, 0x0027, 0x0058, 0x009B, 0x00F1, 0x0159, 0x01D0,
0x0257, 0x02EC, 0x038D, 0x043A, 0x04EF, 0x05AD, 0x0670, 0x0736
}; // 一个周期完整正弦波信号表
int i = 0;
DAC1CON = 0x13; // 使能DAC,内核时钟,参考电压范围AGND~AVDD
DAC1DAT = 0x08000000; // 开始测量
while(1)
{
DAC1DAT = (TableS[i] << 16);
i++;
i &= 0x03f; // 循环发送上表中的64个数据
}
return (0);
}
