实验四 AD和DA转换实验
[实验目的]
1.熟悉ARM芯片内部AD外设的配置方法 2.掌握ARM芯片I/O控制数码管显示的方法 [实验仪器]
1.Proteus仿真的LPC2000系列的ARM处理器
2.软件:PC机操作系统Win98、Win2000或WinXP,Keil for ARM(MDK)集成开发环境
[实验原理]
Lpc2000系列的ARM芯片内部AD外设可以实现对外部8路模拟数据的采样,采样模拟电压范围为0~3.3V。精度为10位。 [实验内容]
设计一个使用ARM内部AD功能的采样电路,将采样后的数据显示在3位的数码管上。 [预备知识]
LPC2114/2124具有一个AD转换器,LPC2200系列具有两个AD转换器,它们具有如下特性:10位逐次逼近式模式转换器;测量范围:0~3.3V;10位转换时间>=2.44us;可设置AD转换触发方式;具有掉电模式。AD转换的内部结构图如下:
A/D控制寄存ADCR AIN0 AIN1 … AIN7 Fpclk … AD转换时钟 A/D 转换控制电路 A/D数据寄存ADDR VIC ADCR:A/D控制寄存器。A/D转换开始前,必须设置ADCR寄存器来选择工作模式。 ADDR:A/D数据寄存器。该寄存器包含ADC的结束标志位和10位的转换结果(当结束标志
位为1时,转换结果才是有效的)。两个寄存器具体位的详细功能需要查看一下教材。 [实验步骤] 按照下图设计硬件,来满足本次实验的需要
器件的名称参照下表
使用Keil MDK建立一个软件工程。命名为AD。步骤参照前面的实验。 在主函数中写入一些代码:
#include
void delay(int x) { while(--x); }
void DsipInit() { PINSEL0= 0; IO0DIR |= 0x3ff<<1; IO0CLR = 0x3ff<<1; IO0SET = 0x3ff<<1; }
void Display(unsigned int val) { IO0CLR = 0x3ff<<1; IO0SET = val<<1; }
int main() { unsigned short ADCData; DsipInit(); Display(0x123) ; PINSEL1 = (PINSEL1 & ~(0x3<<22)) | 0x1<<22; //设置引脚连接模块 AD0CR = (0x01 << 27) | // EDGE 硬件触发边沿设置 (0x0 << 24) | // START AD启动设置 (0x00 << 22) | // TEST1:0 测试模式设置 (0x01 << 21) | // PDN AD部件上电设置 (0 << 17)| // CLKS BURST模式精度 (0x00 << 16) | // BUREST BURST模式禁止 (2 << 8) | // CLKDIV ADC部件时钟 (0x01 << 0); // SEL 转换通道选择
for(;;){
AD0CR |= (1 << 24); // START AD启动设置,软件启动一次AD转换 while((AD0DR & 0x80000000) != 0); ADCData = (AD0DR >> 6) & 0x3FF; Display(ADCData) ; delay(1000000); } return 0;
}
将生成的hex文件加载到lpc2138上运行,调整滑动变阻器的位置,记录当前显示的结果值。并通过计算验证结果的正确性。 【思考题】
1. 修改电路(原电路备份一下),将3个数码管变换成4个数码管,结果用10进制数
显示在数码管上。
2. 在P0.20引脚上接一个按键,当按键按下一次的时候,启动一次AD转换。没有按
键按下时候,不进行转换。
3. 将显示功能放入中断服务中。当AD转换结束后启动中断程序完成AD采样数据的
显示。
4. P0.25引脚也是片内DA的输出引脚,在该引脚上接一个示波器,试着编写程序从
该示波器输出三角波(方波、正弦等)。提示:Lpc2132/4/6/8有一个10-bit的DAC,它只有一个寄存器,见下图。第16位称为BIAS位,如果这位为1,则转换时间位2.5us,可驱动输出700uA电流;若为0,转换时间位1us,驱动电流位350uA,DAC寄存器见下表:
位 功能
31:17 不要向这里写1 16 BIAS 15:6 DACDATA 5:0 不写1
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库实验四:AD采样转换实验在线全文阅读。
相关推荐: