这次首先来张效果图
这次也还是利用了之前用到过的VDAC组件
只是具体增加了定时器中断
定时器的设置
1 首先是外部时钟
2 其次是定时器的设置
注意 我启用了计数中断
isr_1 的中断函数
注意 在中断函数中调用了 Timer_1_ReadStatusRegister();
用于清除中断标志变量 如果没有这句话的话 会导致定时间隔出现极大的误差 这个我也请教了好多人才知道的
可以看到一些时钟
主函数中
const uint8 sinArray[256] =
{
128, 131, 134, 137, 140, 143, 146, 149,
152, 155, 158, 162, 165, 167, 170, 173,
176, 179, 182, 185, 188, 190, 193, 196,
198, 201, 203, 206, 208, 211, 213, 215,
218, 220, 222, 224, 226, 228, 230, 232,
234, 235, 237, 238, 240, 241, 243, 244,
245, 246, 248, 249, 250, 250, 251, 252,
253, 253, 254, 254, 254, 255, 255, 255,
255, 255, 255, 255, 254, 254, 254, 253,
253, 252, 251, 250, 250, 249, 248, 246,
245, 244, 243, 241, 240, 238, 237, 235,
234, 232, 230, 228, 226, 224, 222, 220,
218, 215, 213, 211, 208, 206, 203, 201,
198, 196, 193, 190, 188, 185, 182, 179,
176, 173, 170, 167, 165, 162, 158, 155,
152, 149, 146, 143, 140, 137, 134, 131,
128, 124, 121, 118, 115, 112, 109, 106,
103, 100, 97, 93, 90, 88, 85, 82,
79, 76, 73, 70, 67, 65, 62, 59,
57, 54, 52, 49, 47, 44, 42, 40,
37, 35, 33, 31, 29, 27, 25, 23,
21, 20, 18, 17, 15, 14, 12, 11,
10, 9, 7, 6, 5, 5, 4, 3,
2, 2, 1, 1, 1, 0, 0, 0,
0, 0, 0, 0, 1, 1, 1, 2,
2, 3, 4, 5, 5, 6, 7, 9,
10, 11, 12, 14, 15, 17, 18, 20,
21, 23, 25, 27, 29, 31, 33, 35,
37, 40, 42, 44, 47, 49, 52, 54,
57, 59, 62, 65, 67, 70, 73, 76,
79, 82, 85, 88, 90, 93, 97, 100,
103, 106, 109, 112, 115, 118, 121, 124
};
extern uint8 timerflag;
void main()
{
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
// VDAC test
uint8 count = 0;
uint8 timercount = 0;
CYGlobalIntEnable;
VDAC8_Start();
VDAC8_SetSpeed(VDAC8_HIGHSPEED);
VDAC8_SetRange(VDAC8_RANGE_1V);
isr_1_Start();
Timer_1_Start();
while(1)
{
if(timerflag)
{
// 100us
timerflag = 0;
timercount++;
if(timercount == 10)
{
// 1ms
timercount = 0;
VDAC8_SetValue(sinArray[count]); // 50/255* 4.080 = 0.8V
count += 1;
if(count == 256)
count = 0;
// T = 1ms * 256 = 256ms
}
}
else
{
}
}
}
sinArray 存储了我自己计算出来的正弦波数据
关于VDAC的输出电压 虽然说可以设置为4V的 但是由于我们采用的是3.3V的电源 最大也只能输出到3.3V
因为为了能够显示出正弦波的样子而没有出现截断,我用的是1V满幅输出
这种方法虽然实现了正弦波输出 但耗费了CPU大量的运算能力
可以看出本来周期应该是256ms 但由于一些延时 ,周期约为270ms
一些论坛上说应该使用DMA 我还没试
|