1:D\A转换
D\A转换的种类很多,最常用的是电压输出型,总的来说它的原理就是通过电阻阵列和运算放大器,参考Vref电压把数字信号转换为模拟的电压信号。速度快是它的主要特点,使用也非常方便,在H8中集成了8位的D\A转换器(即精度是8位)。使用的时候想8位的输入寄存器中写入一个值,再打开控制寄存器中对应的开始转换位就可以了。
H8芯片集成的是8位D\A转换器,2个频道输出,总共有四个寄存器控制。分别是对应两个频道的数据寄存器,都是8位的,转换器就是把这两个八位的数字转换为对应的电压。另外是一个控制寄存器DACR,它有三个位可以使用,高两位分别用于控制频道0,1转换开始,停止,第三位(从高位)是同时控制两个频道的,为1的时候两个频道都开始转换,为0的时候都停止。这个位主要是在控制两个通道同时工作的时候使用的。
1
switch
(__temp5)
2 {
3 case 1 :
4 {
5 DA.DR0 = 0xFF ;
6 DA.CR = 0x5F ;
7 }
8 break ;
9 case 2 :
10 {
11 DA.DR0 = 0xFF / 2 ;
12 DA.CR = 0x5F ;
13 }
14 break ;
15 case 3 :
16 {
17 DA.DR0 = 0xFF / 3 ;
18 DA.CR = 0x5F ;
19 }
20 break ;
21 default :
22 {
23 DA.DR0 = 0x0 ;
24 DA.CR = 0x1F ;
25 }
26 }
2 {
3 case 1 :
4 {
5 DA.DR0 = 0xFF ;
6 DA.CR = 0x5F ;
7 }
8 break ;
9 case 2 :
10 {
11 DA.DR0 = 0xFF / 2 ;
12 DA.CR = 0x5F ;
13 }
14 break ;
15 case 3 :
16 {
17 DA.DR0 = 0xFF / 3 ;
18 DA.CR = 0x5F ;
19 }
20 break ;
21 default :
22 {
23 DA.DR0 = 0x0 ;
24 DA.CR = 0x1F ;
25 }
26 }
上面这段节选的代码就是启动D\A转换,并根据不同的条件输出不同的模拟电压。
对于H8,还有一个寄存器DASTCR,它只有最低位是有效的,为1的时候如果芯片进入standby状态时任然输出电压,否则不输出。这个设置的缘由主要是因为D\A不同于A\D,和时间没什么关系,一旦设置了输出,开启了转换那么在输出控制位为0之前都会持续的输出同一个电压,这样的话如果进入待命状态后是否输出电压就有必要通过一个寄存器来设置了。
(以上)