嵌入式AD实验
嵌入式实验报告2
嵌入式系统设计实验报告1 问题描述在Linux操作系统和ARM嵌入式实验系统环境下,分析linux下的键盘、数码管驱动程序,编写一个应用程序,实现以下功能:在ARM开发板上按下数字键1、2、3、4时,对应启动模拟量开发板上的模拟量输入端AIN0、AIN1、AIN2、AIN3采样,并把模数转换的结果从终端输出和数码管显示。
数码管显示格式:通道号转换的电压值;例如:2灭灭3.251.1设计目标在ARM开发板上按下数字键1、2、3、4时,对应启动模拟量AIN0、AIN1、AIN2、AIN3采样,并把A/D转换的结果从终端输出和LED显示。
显示格式:通道号转换的电压值。
1.2设计思路根据设计目标,该问题可分为六个模块进行设计,分别为驱动程序加载、打开设备、键盘扫描、A/D转换、数码管显示,总体设计方案如图1所示。
图1 总体设计方案(1)驱动程序加载用户的应用程序以设备文件方式访问驱动程序,即Linux把设备当文件,通过文件系统对设备进行访问。
针对这个实验,需要用到ADC0809芯片,LED显示数码管,小键盘。
为此,用lsmod命令加载这三个对应的驱动程序adc0809.c、led.c和keybd.c,再以insmod的方式加入内核。
驱动程序主要是设置一些寄存器的内容来确定端口的引脚输入输出方式以及键盘的扫描部分代码,LED控制显示函数等。
(2)打开各个设备在Linux系统下,各个设备都是通过文件来进行描述的,因此用open函数打开需要用到的LED、键盘、ADC0809芯片。
并且要有对应的出错处理。
(3)键盘扫描驱动程序加载进去以后,运行可执行文件,代码就进入到了按键按下等待的代码中了。
对于用户而言,只是在键盘中按下了某个键,在计算机里,通过驱动得到按下的键值并通过read(fd_kb,&result_kb,1)函数把值赋给变量result_kb中(其中fd_kb为键盘的文件描述符)。
(4)A/D转换启动ADC0809芯片对应的通道进行数据转换,这里主要通过iotcl和read 这两个函数实现,并把转化后的结果赋给result_ad这个变量。
南昌大学 嵌入式 实验报告 实验三
学生姓名: xx 学号: x3 专业班级:xx班实验类型:□验证 综合□设计□创新实验日期:实验成绩:综合实验三触摸屏控制一、实验项目名称触摸屏控制二、实验目的了解触摸屏的基本工作原理,学会s3c2410ADC的配置三、实验基本原理:通过设置GPIO口及液晶触摸屏控制器等相关寄存器来达触摸相应菜单键来控制直流步进电机的转动,加速减速和改变方向,并同步超级终端。
程序思路和部分代码:1. 本次实验主要是设置触摸屏中断和ADC转换中断来实现将触摸屏触点转换成坐标。
在写下笔中断和抬笔中断时一定要在最开始写rINTSUBMSK |= (BIT_SUB_ADC|BIT_SUB_TC);来禁止ADC中断和触摸屏中断,否则按下一次有可能会多次中断,这是不允许的。
2. 实验通过在中断中处理AD转换后的坐标值,并设置了一个全局变量,通过改变这个全局变量的值达到不同的效果。
通过比较液晶屏上规划好的各个触摸范围,来跳转到相应的功能。
其具体函数如下://左上角按钮表示步进电机加速if(point_adcx>=0&&point_adcx<=500&&point_adcy>=0&&point_a dcy<=300){step_delay=step_delay-1;学生姓名: xx 学号: x3 专业班级:xx班实验类型:□验证 综合□设计□创新实验日期:实验成绩:UART_SendStr("电机加速");sprintf(disp_buf, "delay is %d \n", step_delay);UART_SendStr(disp_buf);if(step_delay<=1)step_delay=1;}//上中角按钮表示步进电机减速if(point_adcx>=0&&point_adcx<=500&&point_adcy>=300&&point _adcy<=600){step_delay=step_delay+1;UART_SendStr("电机减速");sprintf(disp_buf, "delay is %d \n", step_delay);UART_SendStr(disp_buf);if(step_delay>=10)step_delay=10;}//右上角按钮表示步进电机正反转if(point_adcx>=0&&point_adcx<=500&&point_adcy>=600){sprintf(disp_buf, "STEP_Motoflag is %d \n", STEP_Motoflag);UART_SendStr(disp_buf);学生姓名: xx 学号: x3 专业班级:xx班实验类型:□验证 综合□设计□创新实验日期:实验成绩:if(STEP_Motoflag==0)STEP_Motoflag=1;else STEP_Motoflag=0;DelayNS(50); // 停止步进电机,延时UART_SendStr("步进电机正反转\n");sprintf(disp_buf, "STEP_Motoflag is %d \n", STEP_Motoflag);UART_SendStr(disp_buf);//左下角按钮表示直流电机加速if(point_adcx>=500&&point_adcy>=0&&point_adcy<=300){pwm_duty= pwm_duty + 255/6; // 改变当前电机的速度if(pwm_duty>255){pwm_duty = 255/6;}rTCMPB0 = pwm_duty;UART_SendStr("直流电机加速");}//下中角按钮表示直流电机减速if(point_adcx>=500&&point_adcy>=300&&point_adcy<=600)学生姓名: xx 学号: x3 专业班级:xx班实验类型:□验证 综合□设计□创新实验日期:实验成绩:{pwm_duty= pwm_duty - 255/6; // 改变当前电机的速度级别if(pwm_duty<10){ pwm_duty = 255;}rTCMPB0 = pwm_duty;UART_SendStr("直流电机减速");}//右下角按钮表示直流电机正反转if(point_adcx>=500&&point_adcy>=600){if(DC_Motoflag==0)DC_Motoflag=1;else DC_Motoflag=0;UART_SendStr("直流电机正反转");}四、主要仪器设备及耗材实验箱一台,PC机一台,JTAG一个。
嵌入式ad转换实验报告
嵌入式ad转换实验报告嵌入式AD转换实验报告摘要:本实验报告旨在探究嵌入式AD转换器的工作原理和性能特点。
通过对嵌入式AD转换器的实验研究,我们对其转换精度、速度和功耗等方面进行了评估和分析。
实验结果表明,嵌入式AD转换器具有较高的转换精度和速度,且功耗较低,适用于各种嵌入式系统中的数据采集和处理应用。
引言:嵌入式系统在现代科技应用中扮演着越来越重要的角色,而嵌入式AD转换器作为嵌入式系统中的重要组成部分,其性能对整个系统的稳定性和可靠性有着重要影响。
因此,对嵌入式AD转换器进行深入的研究和分析,对于提高嵌入式系统的性能和应用效果具有重要意义。
实验目的:本实验旨在通过对嵌入式AD转换器的实验研究,探究其工作原理和性能特点,评估其转换精度、速度和功耗等指标,为嵌入式系统中AD转换器的选型和应用提供参考和指导。
实验过程:1. 实验平台:使用一款嵌入式开发板作为实验平台,搭建实验环境。
2. 实验方法:通过输入不同幅度和频率的模拟信号,对嵌入式AD转换器进行采样和转换,记录并分析转换结果。
3. 实验数据处理:对实验采集的数据进行处理和分析,计算转换精度、速度和功耗等指标。
实验结果与分析:经过实验研究和数据处理分析,我们得出以下结论:1. 转换精度:嵌入式AD转换器具有较高的转换精度,能够准确地将模拟信号转换为数字信号,满足实际应用需求。
2. 转换速度:嵌入式AD转换器具有较快的转换速度,能够实时采集和转换模拟信号,适用于高速数据采集和处理应用。
3. 功耗:嵌入式AD转换器功耗较低,能够在嵌入式系统中实现低功耗运行,提高系统的能效性。
结论与展望:通过本实验的研究和分析,我们对嵌入式AD转换器的性能特点有了更深入的了解,为嵌入式系统中AD转换器的选型和应用提供了参考和指导。
未来,我们将继续深入研究嵌入式AD转换器的优化和应用,进一步提高嵌入式系统的性能和应用效果。
嵌入式AD实验
5.8 A/D 实验5.8.1 实验目的1. 了解模数转换的基本原理;2. 掌握模数转换的编程方法。
5.8.2 实验内容1. 编写程序对模拟输入进行采集和转换,并将结果显示在LED 上;2. 通过可变电阻改变模拟量输入,观查显示结果;5.8.3 预备知识1. 了解A/D 采样的原理;2. 了解采样频率的设置;5.8.4 实验设备1. 硬件:JX44B0教学实验箱、PC 机;2. 软件:PC 机操作系统 Windows 98(2000、XP) + ADT IDE 集成开发环境。
5.8.5 基础知识1. A/D 转换的基本原理 1) 采样和量化作用:我们经常遇到的物理参数,如电流、电压、温度、压力、速度……电量或非电量都是模拟量。
模拟量的大小是连续分布的,且经常也是时间上的连续函数。
因此要将模拟量转换成数字信号需经采样——>量化——>编码三个基本过程(数字化过程)。
1Q2Q 3Q 4Q 5Q 6Q 7Q图5-14 A/D 采样示意图采样:按采样定理对模拟信号进行等时间间隔采样,将得到的一系列时域上的样值去代替u=f(t),即用u0、u1、…un 代替u=f(t)。
这些样值在时间上是离散的值,但在幅度上仍然是连续模拟量。
量化:在幅值上再用离散值来表示。
方法是用一个量化因子Q 去度量;u0、u1、…,得到取整后的数字量。
u0=2.4Q ⇒2Q 010 u1=4.0Q ⇒4Q 100 u2=5.2Q ⇒5Q 101 u3=5.8Q ⇒5Q 101编码:将整量化后的数字量进行编码,以便读入和识别; 编码仅是对数字量的一种处理方法。
例如:Q=0.5V/格,设用三位(二进编码)u0=2.4Q −−→−整量化2Q −−→−编码(010)V V u 15.0)202120(0120=⨯⨯+⨯+⨯=2) 分类按被转换的模拟量类型可分为时间/数字、电压/数字、机械变量/数字等。
应用最多的是电压/数字转换器。
AD实验报告
实验二A/D实验一,实验目的1.熟悉ARM本身自带的八路十位A/D控制器及相应寄存器。
2.编程实现ARM系统的A/D功能。
3.掌握带有A/D的CPU编程实现A/D功能的主要方法。
二,实验内容学习A/D接口原理,了解实现A/D系统对于系统的软件和硬件要求。
阅读ARM芯片文档,掌握ARM的A/D相关寄存器的功能,熟悉ARM系统硬件的A/D相关接口。
利用外部模拟信号编程实现ARM循环采集全部前3路通道,并且在超级终端上显示。
三,实验设备1,硬件:ARM嵌入式开发平台、PC机Pentium100以上、用于ARM920T的JTAG仿真器、模拟电压信号源。
2,软件:PC机操作系统Win2000或WinXP、ARM ADS1.2集成开发环境、仿真器驱动程序、超级终端通讯程序。
四,实验原理1,模/数转换我们经常遇到的物理参数,如电流、电压、温度、压力、速度……电量或非电量都是模拟量。
模拟量的大小是连续分布的,且经常也是时间上的连续函数。
要将模拟量转换成数字信号需经采样——>量化——>编码三个基本过程(数字化过程)2,A/D转换的重要指标(1)分辨率(Resolution):分辨率反映A/D转换器对输入微小变化响应的能力,通常用数字输出最低位(LSB)所对应的模拟输入的电平值表示。
n位A/D能反应1/2n满量程的模拟输入电平。
由于分辨率直接与转换器的位数有关,所以一般也可简单地用数字量的位数来表示分辨率,即n位二进制数,最低位所具有的权值,就是它的分辨率。
值得注意的是,分辨率与精度是两个不同的概念,不要把两者相混淆。
即使分辨率很高,也可能由于温度漂移、线性度等原因,而使其精度不够高。
(2)精度(Accuracy)精度有绝对精度(Absolute Accuracy)和相对精度(Relative Accuracy)两种表示方法。
(3)转换时间(Conversion Time)转换时间是指完成一次A/D转换所需的时间,即由发出启动转换命令信号到转换结束信号开始有效的时间间隔。
嵌入式操作系统实验报告华中科技大学
本科实验报告课程名称:嵌入式操作系统实验报告姓名:学院:计算机科学与技术专业:计算机科学与技术年级:学号:指导教师:2007年12月2日试验一ADS、中断、串口通讯一实验目的1、熟悉ADS 1.2开发工具--创建、编译、下载、调试工程2、中断--中断响应、分发、处理3、串口通讯--串口控制器初始化、收/发数据二实验内容1 修改uC/OS-II的main函数2编写串口消息接受任务函数3编写串口中断处理函数三参考代码int main(void){ARMTargetInit(); //硬件初始化OSInit(); //操作系统初始化LCD_Init(); //LCD初始化LCD_Refresh();clearscreen(); //清屏OSTaskCreate(Task1, (void *)0,(OS_STK *)&task1_Stack[STACKSIZE-1], Task1_Prio);//创建串口数据接收进程message=OSMboxCreate((void*)NULL); //创建消息队列OSAddTask_Init(0); //创建idle进程,设置时钟中断OSStart(); //操作系统开始运行,开始调度return 0;}//mainvoid Task1(void *Id){U8 *c1, err;U16 timeout=0;InitUart(); //串口初始化;while(1) //循环接收串口数据并打印到LCD{c1 = OSMboxPend(message, timeout,&err); //等待串口数据,进入等待状态if(*c1=='\r') {WrUTXH0(‘\r’); WrUTXH0(‘\n’);//如果是换行符,打印换行给串口}else { //否则回传数据给串口并在LCD上显示数据WrUTXH0(*c1); WrUTXH0('\r'); WrUTXH0('\n');drawchar(*c1,0x7e0); drawstring("\n",0xffe0);} //if} //while} //Task1void irq_RevUart(int vector, int ndev){*c=RdURXH0(); // 从串口读数据OSMboxPost(message,&c); // 发消息给接收进程}四. 附件说明关于ADS工具的使用,每次必须关闭再重新开,这个软件bug应该说相当严重,希望以后的版本中可以修正.试验二进程通讯一实验目的1、中断处理与进程之间的同步--消息、信号灯、共享内存2、进程通讯--消息,信号灯二实验内容1修改uC/OS-II的main函数2创建两个任务函数3创建消息队列和信号灯4实现两个任务的同步三参考代码int main(void){ARMTargetInit(); //硬件初始化OSInit(); //操作系统初始化LCD_Init();LCD_Refresh();clearscreen(); //清屏OSTaskCreate(Task1, (void *)0, //创建串口数据接收进程(OS_STK *)&task1_Stack[STACKSIZE-1], Task1_Prio); OSTaskCreate(Task2, (void *)0, //创建串口数据显示进程(OS_STK *)&task2_Stack[STACKSIZE-1], Task2_Prio); message=OSMboxCreate((void*)NULL); //创建消息队列point=OSSemCreate(0); //创建信号灯,初值为0OSAddTask_Init(0); //创建idle进程,设置时钟中断OSStart(); //操作系统开始运行,开始调度return 0;}//mainvoid Task1(void *Id){U8 *c1, err;U16 timeout=0;InitUart(); //串口初始化;while(1) //循环接收串口数据并打印到LCD{ printf(“run task1”);drawStrong(waiting message from task2);OSMboxPend(message, timeout,&err); //等待串口数据,进入等待状态c1 = message->OSEventPtr; //串口收到数据,被唤醒,取得数据的指针if(*c1=='\r') {WrUTXH0(‘\r’); WrUTXH0(‘\n’);//如果是换行符,打印换行给串口}else { //否则回传数据给串口并在LCD上显示数据WrUTXH0(*c1); WrUTXH0('\r'); WrUTXH0('\n');UartChar = *c1; //将全局量UartChar赋值OSSemPost(point); //信号灯V()操作,通知显示进程} //if} //while} //Task1void Task2(void *Id){U8 err;for(;;){printf(“run task2”);drawStrong(waiting message from task1);OSSemPend(point,timeouts,&error); //信号灯P()drawstring("the char from uart is:\n",0x7ff);if(c1=‘\r’)//显示串口数据{drawchar(UartChar,0xffff);drawstring("\n",0xffe0);}elsedrawstring("\n",0xffe0);} //for} //Task2试验三LCD驱动、图形系统入门一实验目的1、LCD驱动--LCD初始化,FrameBuffer显示控制2、图形系统入门--点、线,简单几何形状二实验内容1 .初始化GPIO(通用输入/输出):rGPCUP=0xffffffff;rGPCCON=0xaaaaaaaa;rGPDUP=0xffffffff;rGPDCON=0xaaaaaaaa2.初始化LCD控制寄存器:rLCDCON1=0x00000178; //配置成为16位颜色,TFT(真彩)模式;rLCDCON2= 0x2077c241; //行数为480;rLCDCON3=0x017A7F0F; //行宽为640;3.设置LCD在内存中的起始地址:rLCDADDR1=0x1904b000; //FrameBuffer的首地址;rLCDADDR2=0x00096000; // FrameBuffer的尾地址;rLCDADDR3= 0x00000300; //虚屏行宽为640;rLCDCON1 += 1; //使能LCD,开始显示;4.绘画函数a. 画像素函数void drawpixel(int x, int y, unsigned short color_mask){unsigned int bits =(SCREEN_WIDTH*y+x)*BITS_PER_PIXEL;unsigned short *tmp;tmp = (unsigned short *)LCD_MEM_BASE+bits/16;//计算像素在内存中的地址;*tmp = color_mask; //给象素填充颜色;return ;}b.画线函数void drawline(int x, int y, int length,int flag, unsigned short color_mask){int i;if (flag==0)//画横线;for (i=0;i<length;i++)drawpixel(x+i,y,color_mask);if (flag==1)//画竖线;for (i=0;i<length;i++)drawpixel(x,y+i,color_mask);}c.画字符函数void draw_char(int x,int y, //字符在屏幕上的坐标unsigned char c, //字符值unsigned short color_mask) //字符的颜色5.绘制的效果图试验四触摸屏驱动一实验目的1、触摸屏驱动--初始化,坐标值的生成2、触摸屏、图形系统协调工作--触摸屏校准,拨号键盘二实验内容int main(void){drawgra();ARMTargetInit();OSInit();LCD_Init(); clearscreen();draw_keyboard();TchScr_init1(); //初始化触摸屏,非中断模式;;//校准触摸屏,在每次启动触摸屏时都运行该程序;OSTaskCreate(Task1,(void *)0,(OS_STK *)&task1_Stack[STACKSIZE-1],Task1_Prio);pevent=OSMboxCreate((void*)NULL);OSAddTask_Init(1);OSStart();return 0;}//main三. 附加说明可能是实验仪器的原因,屏幕矫正这一块总是很难做到,哪怕是你很仔细地去按键,两次得到的结果可能差别很大.这给后来的按键带来不少麻烦.我们按照说明做了,但是还是无法矫正,不知道这个该怎么处理.试验五、六GPRS综合试验一实验目的1、GPRS模块控制试验--串口控制GPRS模块,AT命令集2、综合试验--电话拨号,短消息发送二实验内容寄存器定义:#define OSULCON2 (*(volatile unsigned char *)0x)#define OSUCON2 (*(volatile unsigned char *)0x)#define OSUFCON2 (*(volatile unsigned char *)0x)#define OSUMCON2 (*(volatile unsigned char *)0x5000800C)#define OSUBRDIV2 (*(volatile unsigned short *)0x)初始化:OSULCON0=0x03; //设置串口数据长度、停止位、奇偶校验OSUCON0=0x85; //设置串口时钟频率、中断类型等OSUFCON0=0x01; //设置串口FIFO工作模式OSUMCON0=0x00; //设置流量控制等OSUBRDIV0=0x149; //设置串口波特率为9600bps寄存器定义:#define RdURXH2() (*(volatile unsigned char *)0x)#define RdUTRSTAT2() (*(volatile unsigned char *)0x)void irq_RevUart2(int vector, int ndev){int flag;flag = RdUTRSTA T2(); //读状态寄存器的值;while (flag&0x1) //判断FIFO里是否有接收到的数据;{ //有数据;c=RdURXH2(); // read the char from Uart2;flag = RdUTRSTA T2(); //读状态寄存器的值;draw_charline(c,0x7e0);//将读到的字符在LCD上最后一行显示出来;}}心得体会及建议觉得这几次实验,还是有点收获,起码对嵌入式操作系统有了一定认识,同时也会了一些基本的操作,比如熟悉了软件环境和编程环境,对于linux和arm9也了解了大概.特别是最后实现了打电话和发短信,感受到了嵌入式操作系统的独特魅力.但是总是觉得这几次的实验多多少少还是基本在抄袭已有的代码然后稍加修改就完成了,有时候时间紧根本就没看懂代码直接提交了.我觉得以后的实验要加强独立书写代码的能力,只有这样才能真正锻炼一个人的能力,也才能深刻理解并学习到东西.。
嵌入式实验报告(电子表流水灯设计)
山西大学计算机组装与维护论文题目电子表设计学院计算机与信息技术学院专业软件工程指导教师李月香学生姓名曹艳艳学号 2008242001 日期 2010-12-10电子表设计内容提要:LCD 电视是 Liquid Crystal Display 的简称,是液晶显示屏的全称:它包括了TFT,UFB,TFD,STN等类型的液晶显示屏。
LCD 的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。
1888年奥地利植物学家发现了一种白浊有粘性的液体,后来,德国物理学家发现了这种白浊物质具有多种弯曲性质,认为这种物质是流动性结晶的一种,由此而取名为Liquid Crystal即液晶LCD显示器是智能仪器仪表中最常用的显示器件。
近年来一些单片机内部也集成了LCD控制级驱动电路,更方便了单片机在嵌入式系统中的应用,特别是微功耗智能化仪器仪表上的应用。
关键词:LCD 工作原理应用发展参考文献:1.《嵌入式系统应用基础》。
2. 百度百科。
一、实验目的1.熟练掌握单片机控制系统硬件电路的设计、测试;单片机监控程序的编写、调试及运行。
2.学习使用单片机设计出简单的应用系统。
二、实验设备1.PC计算机;2.NEC全系列微控制器(单片机)开发工具EM/EZ-1系统;3.实验系统。
三、实验内容及要求1.设计方案本次使用主要使用了LCD,做了一个电子表。
主函数显示电子表。
P3.0按键中断用来测温度并在LCD上显示。
P4.0按键中断用来进入更改时间的中断。
P4.1按键中断用来进入设置闹钟的中断。
P4.2用来在进入更改时间中断和设置闹钟中断时进行小时的设置。
P4.3用来在进入更改时间中断和设置闹钟中断时进行分钟的十位设置。
P4.4用来在进入更改时间中断和设置闹钟中断时进行分钟的个位设置。
P4.5是一个流水灯和蜂鸣器中断。
2.结构图3.实现的功能1.实现了利用LCD 动态的显示秒数的走动。
嵌入式A D接口实验
2.4 A/D 接口实验一、实验目的了解在l inux 环境下对S3C2410 芯片的8通道10 位A/D 的操作与控制。
二、实验内容学习A/D 接口原理,了解实现A/D 系统对于系统的软件和硬件要求。
阅读A RM 芯片文档,掌握A RM 的A/D 相关寄存器的功能,熟悉A RM 系统硬件的A/D 相关接口。
利用外部模拟信号编程实现A RM 循环采集全部前4路通道,并且在超级终端上显示。
三、预备知识¾有C 语言基础。
¾掌握在Linux 下常用编辑器的使用。
¾掌握Makefile 的编写和使用。
¾掌握Linux 下的程序编译与交叉编译过程。
四、实验设备及工具硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机P entium 500 以上, 硬盘10G 以上。
软件:PC 机操作系统R EDHAT LINUX 9.0+MINICOM+ARM-LINUX 开发环境五、实验原理1、A/D 转换器A/D 转换器是模拟信号源和C PU 之间联系的接口,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。
在工业控制和数据采集及许多其他领域中,A/D 转换是不可缺少的。
A/D 转换器有以下类型:逐位比较型、积分型、计数型、并行比较型、电压-频率型,主要应根据使用场合的具体要求,按照转换速度、精度、价格、功能以及接口条件等因素来决定选择何种类型。
常用的有以下两种:¾双积分型的A/D 转换器双积分式也称二重积分式,其实质是测量和比较两个积分的时间,一个是对模拟输入电压积分的时间T0,此时间往往是固定的;另一个是以充电后的电压为初值,对参考电源V ref 反向积分,积分电容被放电至零所需的时间T1。
模拟输入电压V i 与参考电压V Ref 之比,等于上述两个时间之比。
由于V Ref 、T0 固定,而放电时间T1 可以测出,因而可计算出模拟输入电压的大小(V Ref 与V i 符号相反)。
嵌入式- 触摸屏实验
触摸屏实验实验目的:了解ARM处理器触摸屏的处理机制,掌握在S3C2440A平台下进行触摸屏应用编程需要完成的任务实验器材:Sinosys-EA2440实验箱PC机实验原理:触摸屏的4 根信号线直接和S3C2440A 的TSYM、TSYP、TSXM 和TSXP 四个引脚相连,由S3C2440A 内部来控制电平的转换和AD 的转换测量。
触摸屏的硬件连接图如图1.1:图1.1 触摸屏信号连接图s3c2440 一共有4 种触摸屏接口模式,其中,自动(连续)XY 坐标转换模式和等待中断模式应用地比较常见。
等待中断模式是在触笔落下时产生一个中断,在这种模式下,A/D 触摸屏控制寄存器ADCTSC 的值应为0xD3,在系统响应中断后,XY 坐标的测量模式必须为无操作模式,即寄存器ADCTSC 的低两位必须清零。
自动(连续)XY 坐标转换模式是系统依次转换触点的X 轴坐标和Y 轴坐标,中X 轴坐标值写入寄存器ADCDAT0 的低10 位中,Y 轴坐标写入寄存器ADCDAT1的低10 位中,在这种模式下,系统同样会产生中断信号。
在一般情况下,为实现触摸屏功能,先是设置为等待中断模式,在产生中断后,再设置为自动(连续)XY 坐标转换模式,依次读取触点的坐标值。
实验总结:利用ADS1.2 工具(ADS 工具的使用请参照前面的实验)打开“\SourceCode\Interface\touchpanel_test”的工程文touchpanel_test.mcp 工程文件。
在Touchpanel.c 的Test_Touchpanel 子函数中对触摸屏相关的寄存器进行设置和初始化。
rADCDLY=50000; //Normal conversion mode delay about(1/3.6864M)*50000=13.56msrADCCON=(1<<14)+(ADCPRS<<6); //ADCPRS En, ADCPRS Value Uart_Printf("ADC touch screen test\n");rADCTSC=0xd3; //Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En pISR_ADC = (int)AdcTsAuto;//指定触摸屏中断的入口地址rINTMSK=~BIT_ADC; //ADC Touch Screen Mask bit clear rINTSUBMSK=~(BIT_SUB_TC);触摸屏中断服务程序在对寄存器进行设置和指定中断服务程序的入口地址后,程序进入等待状态,当用触摸笔点按触摸屏时,处理器接受中断,并进入中断服务程序的执行。
嵌入式系统 各实验实验报告
嵌入式系统设计实验报告班级: XXXXXXXXXX学号: XXXXXXXXXX姓名: XXXXXXX成绩:指导教师: XXXXXXXXXXX1. 实验一1.1 实验名称博创UP-net3000实验台基本结构及使用方法1.2 实验目的熟悉UP-net3000实验平台的核心硬件电路和外设通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态1.3 实验环境硬件:ARM 嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC 机Pentium100 以上。
软件:PC 机操作系统Windows、ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。
1.4实验内容及要求一、内容①嵌入式系统开发流程概述②熟悉UP-net3000实验平台的核心硬件电路和外设③ARM JTAG的安装与使用④通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态二、要求通过本次课程对各个外设的了解,为今后各个接口实验打下基础。
1.5实验设计与实验步骤一、JTAG 的驱动程序的安装:执行armJtag 目录下armJtagSetup.exe 程序,选择安装目录,安装JTAG 软件。
二、通过通讯软件超级终端来检验外设的工作状态:①运行Windows 系统下的超级终端(HyperTerminal)应用程序,新建一个通信终端。
为所建超级终端取名为arm,可以为其选择第一个图标。
单击“确定”按钮。
②在接下来的对话框中选择ARM 开发平台实际连接的PC 机串口(如COM1),按确定按钮后出现属性对话框,设置通信的格式和协议。
波特率为115200,数据位8,无奇偶校验,停止位1,无数据流控制。
按确定完成设置。
③完成新建超级终端的设置以后,可以选择超级终端文件菜单中的保存,将当前设置保存为一个特定超级终端到桌面上,以备后用。
用串口线将PC 机串口和平台UART0 正确连接后,就可以在超级终端上看到程序输出的信息了。
④启动开发板,按住开发板上键盘的任意按键,使开发板进入BIOS 设置状态。
嵌入式系统实验五-ADC转换实验
《嵌入式系统》课程实验报告学生姓名:所在班级:指导教师:记分及评价:一、实验名称ADC转换实验二、实验目的了解S3C2410X处理器ADC相关控制寄存器的使用;通过实验掌握模数转换的原理;掌握S3C2410X处理器的ADC转换功能。
三、实验内容设计分压电路,利用S3C2410X集成的ADC模块,把分压值转换为数字信号,并通过超级终端和数码管观察转换结果。
四、实验原理1、S3C2410X处理器的A/D转换处理器内部集成了采用近似计数式的8路10位ADC,集成零比较器,内部产生比较时钟信号;支持软件使能休眠模式,以减少电压损耗。
其主要特性:—分辩率:10-位—微分线性度误差:±1.0 LSB—积分线性度误差:±2.0 LSB—最大转换速率:500 KSPS—低功耗—供电电压:3.3V—输入模拟电压范围:0 ~ 3.3V—片上采样保持功能—普通转换模式—分离的X/Y轴坐标转换模式—自动(连续) X/Y轴坐标转换模式—等待中断模式2、S3C2410X的AD转换的使用寄存器组处理器集成的ADC只使用到两个寄存器,即ADC控制寄存器(ADCCON)、ADC数据寄存器(ADCDAT)。
AD转换器的结构图如下:五、实验结果超级终端上显示以下信息:六、练习题参考实验程序,对第四通道的输入电压进行循环采样,循环周期为0.5S,并求出采样数据的平均值。
void adc_test(void){int i,j;UINT16T usConData;float usEndData;float usAllData=0.0;float usArvData;uart_printf("\n ADC_IN Test\n");uart_printf(" ADC conv. freq. = %dHz\n",ADC_FREQ);unPreScaler = PCLK/ADC_FREQ - 1;rADCCON=(1<<14)|(unPreScaler<<6)|(1<<5)|(0<<2)|(1<<1);uart_printf(" Please adjust AIN0 value!\n");uart_printf(" The results of ADC are:\n");usConData=rADCDAT0&0x3FF;for(j = 0; j < 20; j++){while(!(rADCCON & 0x8000));usConData = rADCDAT0&0x3FF;usEndData = usConData * 3.3000 / 0x3FF;uart_printf(" %0.4f ",usEndData);usAllData=usAllData+usEndData;delay(5000);}usArvData= usAllData/20;uart_printf("\n 平均值:%0.4f ",usArvData);uart_printf(" End.\n");}。
嵌入式系统实验报告
嵌入式系统实验报告学院:计算机科学与工程姓名:学号:______________专业:指导老师:完成日期:实验一:流水灯案例、8位数码管动态扫描案例一、实验目的1.1进一步熟悉Keil C51集成开发环境调试功能的使用;1.2学会自己编写程序,进行编译和仿真测试;1.3利用开发板下载hex文件后验证功能。
二、实验原理2.1:实验原理图2.2:工作原理2.2.1:流水灯电路中有LO,1,L2,L3,4,L5,L6,L7 共八个发光二极管,当引脚LED_ SEL输入为1,对于A、B、C、D、E、F、G、H引脚,只要输入为1,则点亮相连接的发光二极管。
A~H引脚连接STM32F108VB芯片的PE8~PE15,程序初始化时,对其进行初始设置。
引脚LED_ SEL 为1时,发光二极管才工作,否则右边的数码管工作。
注意,LED SEL 连接于PB3,该引脚具有复用功能,在默认状态下,该引脚的I0不可用,需对AFIO_ MAPR寄存器进行设置,设置其为10可用。
2.2.2:8位数码管数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一-定的电压差值时,便会点亮该段。
当E3输入为1,也就是LED_ SEL输入为0时,根据SELO~SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。
三、实验结果3.1:流水灯对于给出的流水灯案例,下载HEX文件后,在开发板上可观察到L0-L7从左至右依次点亮,间隔300ms。
当全部点亮八个发光二极管后,八个发光二极管同时熄灭,间隔300ms后,发光二极管再次从左至右依次点亮。
如此反复循坏。
3.2:8位数码管对于给出的8位数码管动态扫描案例,下载后,在开发板上可观察到8个数码管从左至右依次显示对应的数字,且每一个数码显示的数字在1-9之间循环。
可以通过加快扫描频率,使得八位数码管在人眼看上去是同时显示。
在后续的案例中可以看到该现象。
嵌入式实验一资料
实验一、ADS开发环境使用,测试程序一、实验目的a)ads安装使用b)arm在ads中的配置c)掌握 S3C2440A 的 I/O 控制寄存器的配置d)掌握ARM 汇编语法指令、c语言编程实验二、实验设备a)PC 机、实验箱、串口线、usb线、ads开发软件三、实验内容a)熟悉ARM 开发裸机环境的建立b)使用ARM 汇编指令设置GPIO 口的相应寄存器,编写跑马灯程序四、实验原理a)ARM ADS全称为ARM Developer Suite。
是ARM公司在2001年推出的ARM集成开发工具。
ADS 由命令行开发工具,ARM运行时库,GUI开发环境(Code Warrior和AXD),实用程序和支持软件组成。
使用ADS,用户就可以为ARM系列的RISC处理器编写和调试自己的开发应用程序了。
下面就详细介绍一下ADS的各个组成部分b)命令行开发工具这些工具完成将源代码编译,链接成可执行代码的功能。
ADS提供下面的命令行开发工具:armccarmcc是ARM C编译器。
这个编译器通过了Plum Hall C Validation Suite为ANSI C的一致性测试。
armcc用于将用ANSI C编写的程序编译成32位ARM指令代码。
armcpparmcpp是ARM C++编译器。
它将ISO C++ 或EC++ 编译成32位ARM指令代码。
tcctcc是Thumb C 编译器。
该编译器通过了Plum Hall C Validation Suite为ANSI 一致性的测试。
tcc将ANSI C源代码编译成16位的Thumb指令代码。
tcpptcpp是Thumb C++ 编译器。
它将ISO C++ 和EC++ 源码编译成16位Thumb指令代码。
armasmarmasm是ARM和Thumb的汇编器. 它对用ARM 汇编语言和Thumb 汇编语言写的源代码进行汇编。
armlinkarmlink是ARM连接器。
嵌入式adc实验原理
嵌入式adc实验原理
嵌入式ADC实验的原理是通过嵌入式系统中的ADC模块采集外部输入信号,将模拟信号转换为数字信号,并通过处理器进行处理和分析。
具体来说,嵌入式系统中的ADC模块通过采样并保持外部的模拟信号,将模拟信号转换为对应的数字量,并将其存储在ADC寄存器中。
处理器可以通过读取ADC寄存器获取数字量信息,然后对其进行处理和分析。
在实验中,通常会将外部的电压信号通过信号发生器或者电位器等设备接入到嵌入式系统的ADC模块中进行采样。
然后,处理器通过读取ADC模块中的数值,将其显示在终端或者液晶屏等上。
嵌入式ADC实验能够帮助学习者深入理解嵌入式系统中ADC模块的工作原理,并且能够了解ADC转换参数setting 的设定对性能的影响,还能够帮助学习者加深对模拟信号转数字信号的基本理解。
2014-嵌入式系统基础-实验9-ADC
实验9 S3C2440 ADC应用编程
班级姓名学号日期成绩评定
1.实验目的
(1)掌握S3C2440 ADC与触摸屏接口的功能及寄存器设置;
(3)采用中断与查询方式的编写AD转换程序。
2.实验环境
普通PC机,Windows系统下安装ADS1.2集成开发环境,ARM实验设备,串口线,USB线,网线。
3.实验原理
ADC与触摸屏接口提供了将输入引脚上的0-3.3V的电压(模拟量)转化为数字量,S3C2440提供了8个引脚(即8个AD转换通道)输入模拟量:AIN3、AIN2、AIN1、AIN0 4个只能用作AD转换输入的引脚;AIN7、AIN6、AIN5、AIN4 4个既可作为AD转换输入的引脚,也可共同使用连接触摸屏(称为XP、XM、YP、YM引脚)作为触摸屏接口。
本次实验电路连接如下图所示:
滑动变阻器连接在AIN2引脚上,采用普通转换模式可将输入的0-3.3V的模拟电压转化为数字量,可编程选择AIN7-0任意一通道开始AD转换,转换完成后结果可从ADCDAT0寄存器中读取。
ADC与触摸屏接口可以支持查询方式和中断方式2种访问方式,如下:
(1)查询方式:寄存器包括AD转换开始位、是否完成位;
(2)中断方式:可产生内部中断INT_ADC,包括子中断INT_TC(触摸屏触笔按下/抬起)、INT_ADC_S(AD转换结束)。
变阻器如下所示,拧动可改变电阻的阻值:
4.实验步骤与内容
AIN2连接有滑动变阻器,分别采用查询、中断方式获取AD值并在串口上输出。
实现程序的C语言部分写在main.c文件中,如下:
5.实验总结
(根据自己的实际情况写)。
嵌入式实验一二
实验一:开发环境实验实验学时:2实验类型:验证+设计实验要求:必做一、实验目的熟悉ADS1.2开发环境,掌握ARM汇编语言,能编写汇编程序实现一定功能,学会ARM仿真器的使用,使用ADS编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
二、实验设备计算机;博创UP-3000实验箱三、实验步骤1.打开ADS软件,新建工程,编写汇编程序,在数据段sourcedata中给定10个数字,实现数字排序功能,将结果存储在finaldata中,在ADS仿真环境下观察寄存器内容的变化。
2.打开ADS软件,按照《博创实验指导书》建立工程模板,了解各参数含义。
3.打开超级终端,与实验箱连接,以步骤2中的模板新建工程,导入“..\3000的ADS实验\Exp1开发环境实验”目录下所有文件,编译、下载、调试并跟踪程序运行,在超级终端中观察程序运行结果。
4.熟悉实验箱BIOS指令。
5.记录和整理实验报告四、实验报告内容1.画汇编程序流程图,附汇编程序源代码,并加注释及程序运行结果(截屏)。
2.简述通过ADS编译、下载、调试并跟踪程序的过程。
3.回答思考题。
五、思考题1.超级终端的作用是什么?2.ADS工程文件的Debug和Release版本有何不同,各有什么作用?实验二:串行口实验实验学时:2实验类型:设计实验要求:必做一、实验目的1.掌握ARM的串行口工作原理。
2.学习编程实现ARM的UART通讯。
3.掌握CPU利用串口通讯的方法。
二、实验设备计算机;博创UP-3000实验箱三、实验步骤1.新建工程,将“\3000的ADS实验\Exp2串行口实验”中的文件添加到工程中,这些是启动时所需要的文件。
2.查找S3C44B0工作手册,定义与UART有关的各个寄存器地址和一些特殊的位命令。
主要有以下各寄存器(44b.h):/* UART的全部功能寄存器 */#define rULCON0#define rULCON1#define rUCON0#define rUCON1#define rUFCON0 (*(volatile unsigned *)0x1d00008)#define rUFCON1 (*(volatile unsigned *)0x1d04008)#define rUMCON0 (*(volatile unsigned *)0x1d0000c)#define rUMCON1 (*(volatile unsigned *)0x1d0400c)#define rUTRSTAT0 (*(volatile unsigned *)0x1d00010)#define rUTRSTAT1 (*(volatile unsigned *)0x1d04010)#define rUERSTAT0 (*(volatile unsigned *)0x1d00014)#define rUERSTAT1 (*(volatile unsigned *)0x1d04014)#define rUFSTAT0 (*(volatile unsigned *)0x1d00018)#define rUFSTAT1 (*(volatile unsigned *)0x1d04018)#define rUMSTAT0 (*(volatile unsigned *)0x1d0001c)#define rUMSTAT1 (*(volatile unsigned *)0x1d0401c)#define rUBRDIV0#define rUBRDIV1#ifdef __BIG_ENDIAN //大端摸式#define rUTXH0 (*(volatile unsigned char *)0x1d00023)#define rUTXH1 (*(volatile unsigned char *)0x1d04023)#define rURXH0 (*(volatile unsigned char *)0x1d00027)#define rURXH1 (*(volatile unsigned char *)0x1d04027)#define WrUTXH0(ch) (*(volatile unsigned char *)(0x1d00023))=(unsigned char)(ch)#define WrUTXH1(ch) (*(volatile unsigned char *)(0x1d04023))=(unsigned char)(ch)#define RdURXH0() (*(volatile unsigned char *)(0x1d00027))#define RdURXH1() (*(volatile unsigned char *)(0x1d04027))#define UTXH0 (0x1d00020+3) //byte_access address by BDMA#define UTXH1 (0x1d04020+3)#define URXH0 (0x1d00024+3)#define URXH1 (0x1d04024+3)#else //小端摸式#define rUTXH0 (*(volatile unsigned char *)0x1d00020)#define rUTXH1 (*(volatile unsigned char *)0x1d04020)#define rURXH0 (*(volatile unsigned char *)0x1d00024)#define rURXH1 (*(volatile unsigned char *)0x1d04024)#define WrUTXH0(ch) (*(volatile unsigned char *)0x1d00020)=(unsigned char)(ch)#define WrUTXH1(ch) (*(volatile unsigned char *)0x1d04020)=(unsigned char)(ch)#define RdURXH0() (*(volatile unsigned char *)0x1d00024)#define RdURXH1() (*(volatile unsigned char *)0x1d04024)#define UTXH0 (0x1d00020) //byte_access address by BDMA#define UTXH1 (0x1d04020)#define URXH0 (0x1d00024)#define URXH1 (0x1d04024)#endif3.编写串口驱动函数(MyUart.c):图2-1为串口初始化的实现流程,图2-2为发送数据的流程,图2-3为接收数据的流程。
嵌入式实验报告
2.1 ADS1.2 开发环境一、实验目的熟悉ADS1.2 开发环境,学会ARM 仿真器的使用。
使用ADS 编译、下载、调试并跟踪一段已有的程序,了解嵌入式开发的基本思想和过程。
二、实验内容本次实验使用ADS 集成开发环境。
新建一个简单的工程文件,并编译这个工程文件。
学习ARM 仿真器的使用和开发环境的设置。
下载已经编译好的文件到嵌入式控制器中运行。
学会在程序中设置断点,观察系统内存和变量,为调试应用程序打下基础。
三、预备知识C 语言的基础知识、程序调试的基础知识和方法。
四、实验设备及工具(包括软件调试工具)硬件:ARM 嵌入式开发平台、PC机Pentium100 以上、用于ARM920T的JTAG 仿真器、串口线。
软件:PC 机操作系统Win2000或WinXP、ARM ADS1.2 集成开发环境、仿真器驱动程序、超级终端通讯程序。
五、实验步骤1、建立工程(1)运行ADS1.2 集成开发环境(CodeWarrior for ARM Developer Suite)。
选择File|New…菜单,在对话框中选择Project,新建一个工程文件。
图中示例的工程名为Exp6.mcp。
点set…按钮可为该工程选择路径,选中CreatFolder 选项后将以ProjectName 或文件名为名创建目录,这样可以将所有与该工程相关的文件放到该工程目录下,便于管理工程。
在工程模板列表中的2410 ARM Executable Image 是专为本嵌入式开发板设置的工程模板,后文有具体说明。
在此也可选择ARM Executable Image 通用模板。
(2)在新建的工程中,选择Debug 版本,使用Edit | Debug Settings菜单对Debug 版本进行参数设置。
(3)在Debug Settings对话框中选择Target Settings项。
在Post-linker一栏中选择ARM fromELF。
嵌入式AD实验
5.8 A/D 实验5.8.1 实验目的1. 了解模数转换的基本原理;2. 掌握模数转换的编程方法。
5.8.2 实验内容1. 编写程序对模拟输入进行采集和转换,并将结果显示在LED 上;2. 通过可变电阻改变模拟量输入,观查显示结果;5.8.3 预备知识1. 了解A/D 采样的原理;2. 了解采样频率的设置;5.8.4 实验设备1. 硬件:JX44B0教学实验箱、PC 机;2. 软件:PC 机操作系统 Windows 98(2000、XP) + ADT IDE 集成开发环境。
5.8.5 基础知识1. A/D 转换的基本原理1) 采样和量化作用:我们经常遇到的物理参数,如电流、电压、温度、压力、速度……电量或非电量都是模拟量。
模拟量的大小是连续分布的,且经常也是时间上的连续函数。
因此要将模拟量转换成数字信号需经采样——>量化——>编码三个基本过程(数字化过程)。
1Q2Q3Q4Q5Q6Q 7Q图5-14 A/D 采样示意图采样:按采样定理对模拟信号进行等时间间隔采样,将得到的一系列时域上的样值去代替u=f(t),即用u0、u1、…un 代替u=f(t)。
这些样值在时间上是离散的值,但在幅度上仍然是连续模拟量。
量化:在幅值上再用离散值来表示。
方法是用一个量化因子Q 去度量;u0、u1、…,得到取整后的数字量。
u0=2.4Q 2Q 010⇒u1=4.0Q 4Q 100⇒u2=5.2Q 5Q 101⇒u3=5.8Q 5Q 101⇒编码:将整量化后的数字量进行编码,以便读入和识别;编码仅是对数字量的一种处理方法。
例如:Q=0.5V/格,设用三位(二进编码)u0=2.4Q 2Q (010)−−→−整量化−−→−编码V V u 15.0)202120(0120=⨯⨯+⨯+⨯=2) 分类按被转换的模拟量类型可分为时间/数字、电压/数字、机械变量/数字等。
应用最多的是电压/数字转换器。
电压/数字转换器又可分为多种类型:按转换方式可分为:直接转换、间接转换。
用AD6.8配合NanoBoard 1 在Nexar上实现一个完整的嵌入式系统
用AD6.8配合NanoBoard 1 在Nexar上实现一个完整的嵌入式系统2009-05-23 20:28在Nexar上实现一个完整的嵌入式系统以下我们将结合一个实例来简要介绍一下如何在Nexar上实现一个完整的嵌入式系统设计过程。
首先:创建一个新的FPGA工程1、选择菜单 [menus]File>>New>>FPGA Project,在工程栏中将会显示新建的FPGA工程名,选择菜单[menus]File>>Save Project,在对话框中修改工程名称,然后Save。
在工程栏中选择File View 选项,在工程中将会列出所有属于当前工程的文件。
注:Structure Editor选项用于编辑工程中文件间的链接关系。
图1.1 工程栏----创建FPGA工程2、FPGA工程可以支持原理图和VHDL文件两种源文件,采用混合编辑时,可以将VHDL生成图表符的形式。
选择菜单[menus]File>>New>>Schematic;也可以在工程栏中选中FPGA工程名,然后点击鼠标,选择[popups]Add New to Project>>Schematic。
保存原理图,重新命名为exercise.schdoc。
图1.2 工程栏----创建原理图3、接下来在新加入的原理图中完成一个最简单的基于51内核的设计工程,实现LED闪亮的功能。
在这个实例中,将会用到51的内核、RAM存储器、上电时序控制、异或门、Nexus协议接口等FPGA工程器件。
Nexar2004的器件均可以在FPGA集成库中找到,在系统缺省设置下,在窗口右侧上方可以看到favorities/libraries/clipboard三个属性栏,单击libraries属性栏,窗口中弹出集成库窗口(见图1.3)。
选定设计中需要的器件,并拖拽到原理图中。
器件名称FPGA集成库TSK51A_DFPGA Processors.IntLibRAMS_8x1KFPGA Memories.IntLibCLOCK_BOARDFPGA NanoBoard Port-Plugin.IntLibTEST_BUTTONFPGA NanoBoard Port-Plugin.IntLibLEDFPGA NanoBoard Port-Plugin.IntLibNEXUS_JTAG_CONNECTFPGA NanoBoard Port-Plugin.IntLibNEXUS_JTAG_PORTFPGA Generic.IntLibOR2N1SFPGA Generic.IntLibFPGA_STARTUPxFPGA Peripherals.IntLib图1.3集成库----51内核图1.4 设计实例-----原理图1、按照系统设计的规则,将从集成库中拖拽出了器件连接构建一个完整的数字电路系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5.8 A/D 实验5.8.1 实验目的1. 了解模数转换的基本原理;2. 掌握模数转换的编程方法。
5.8.2 实验内容1. 编写程序对模拟输入进行采集和转换,并将结果显示在LED 上;2. 通过可变电阻改变模拟量输入,观查显示结果;5.8.3 预备知识1. 了解A/D 采样的原理;2. 了解采样频率的设置;5.8.4 实验设备1. 硬件:JX44B0教学实验箱、PC 机;2. 软件:PC 机操作系统 Windows 98(2000、XP) + ADT IDE 集成开发环境。
5.8.5 基础知识1. A/D 转换的基本原理 1) 采样和量化作用:我们经常遇到的物理参数,如电流、电压、温度、压力、速度……电量或非电量都是模拟量。
模拟量的大小是连续分布的,且经常也是时间上的连续函数。
因此要将模拟量转换成数字信号需经采样——>量化——>编码三个基本过程(数字化过程)。
1Q2Q 3Q 4Q 5Q 6Q 7Q图5-14 A/D 采样示意图采样:按采样定理对模拟信号进行等时间间隔采样,将得到的一系列时域上的样值去代替u=f(t),即用u0、u1、…un 代替u=f(t)。
这些样值在时间上是离散的值,但在幅度上仍然是连续模拟量。
量化:在幅值上再用离散值来表示。
方法是用一个量化因子Q 去度量;u0、u1、…,得到取整后的数字量。
u0=2.4Q ⇒2Q 010 u1=4.0Q ⇒4Q 100 u2=5.2Q ⇒5Q 101 u3=5.8Q ⇒5Q 101编码:将整量化后的数字量进行编码,以便读入和识别; 编码仅是对数字量的一种处理方法。
例如:Q=0.5V/格,设用三位(二进编码)u0=2.4Q −−→−整量化2Q −−→−编码(010)V V u 15.0)202120(0120=⨯⨯+⨯+⨯=2) 分类按被转换的模拟量类型可分为时间/数字、电压/数字、机械变量/数字等。
应用最多的是电压/数字转换器。
电压/数字转换器又可分为多种类型:按转换方式可分为:直接转换、间接转换。
按输出方式分可分为:并行、串行、串并行。
按转换原理可分为:计数式、比较式。
按转换速度可分为:低速、中速、高速。
按转换精度和分辨率可分为:3位、4位、8位、10位、12位、14位、16位等等。
3) 工作原理类似于用天平称物体重量,设有一待测物为4.42g ;满度测量量程为gR NFS 12.5=,砝码种类有四种:)56.2(21g R NFS 、)28.1(41g R NFS 、)64.0(81g R NFS 、)32.0(161g R NFS 。
测量方法:先大砝码,后小砝码,依次比较(累计比较),要的记“1”,不要的记“0”。
实测物重G 为:留四次为去三次为留二次为留一次为g g g g g g g g g g g g R R R R G NFSNFS NFS NFS 42.416.432.084.3:42.444.464.084.3:42.484.328.156.2:42.456.2:1611810411211<=+>=+<=+<⨯+⨯+⨯+⨯=误差:g g g g G G 32.026.042.416.4<-=-=-=∆实际测误差<最小砝码(最小分辨砝码)以上过程:①通过4次比较后,得出结果;②误差<最小砝码值; 4) 逐次逼近式ADC 工作原理原理结构框图:)22(11n n R f d d V V --⋅++⋅⋅=图5-15 逐次逼近式A/D 转换器原理框图图5-16 逐次逼近式A/D 转换器原理框图工作过程: *环形计数器; *去码/留码控制逻辑;*逐次比较过程(完成一个A/D 转换)。
设V V R 24.10=,VV i 305.8=(n=8)表5-24 逐次逼近式ADC 去码/留码控制逻辑2. S3C44B0X的A/D转换器S3C44B0X集成了8路10位A/D转换器,其分辨率为10比特,该转换器可以通过软件设置为Sleep摸式,可以节电减少功率损失,最大转换速率为100K,非线性度为正负1位。
1) A/D转换有关寄存器表5-25 A/D转换控制寄存器表5-26 A/D转换预分频寄存器表5-27 A/D转换数据寄存器5. 实验参考代码及说明JX44B0实验箱中通过AIN2和AIN3可调电阻改变通道2和通道3的输入信号,本实验就是采集通道2和通道3的信号,并通过可调电阻,改变其输入模拟信号,以观察A/D采样效果。
/* 包含文件 */#include "44b.h"/* defines */#define MAX_VALUE 0x3ff#define MIN_VALUE 0x0typedef (*ISR_ROUTINE_ENTRY)(void);void Test_Adc(void);char trans_input(int value);void init_interrupt_handler(unsigned int irq_handler);void install_isr_handler(int irq_no, void* irq_routine);void timer0_isr(void);void IsrIRQ() __attribute__ ((interrupt("IRQ")));char display_buffer[6];int refresh_index = 0;unsigned char seg7table[16] ={/* 0 1 2 3 4 5 6 7*/0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,/* 8 9 A B C D E F*/0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,};/********************************************************************// Function name : Main// Description : AD采样主函数// Return type : void// Argument : void*********************************************************************/ void Main(void){rTCFG0=0x0; // prescaler=0,means "1" devider the same as timer0 rTCNTB0=0x2000; //10msrTCON= 0x00000202;rTCON= 0x00000009; //T0,auto reload and startrINTCON=0x7; /* Non-vect,IRQ disable,FIQ disable */init_interrupt_handler((unsigned int)IsrIRQ);install_isr_handler(HandleTIMER0, (void*)timer0_isr);rINTMOD=0x0;rINTMSK=0x07ffffff &~(BIT_GLOBAL|BIT_TIMER0);rINTCON=0x5;Test_Adc();}/********************************************************************// Function name : Test_Adc// Description : test adc// Return type : void// Argument : void*********************************************************************/ void Test_Adc(void){int loop_delay;int data = 0;int get_index;rCLKCON=0x7ff8;while(1){char value;int rADCDAT_TEMP0,rADCDAT_TEMP1,rADCDAT_TEMP2,rADCDAT_TEMP3,rADCDAT_TEMP4,rADCDAT_TEMP5,rADCDAT_TEMP6,rADCDAT_TEMP7;rADCPSR=0x0;data = 0;for(get_index = 0; get_index < 16; get_index++){rADCCON=0x1|(0x2<<2); // AIN2while(!(rADCCON & 0x40));data+=rADCDAT;for(loop_delay=1000; loop_delay; loop_delay--);}data /= 32;value = trans_input(data);display_buffer[0] = value / 10;display_buffer[1] = value % 10;data = 0;for(get_index = 0; get_index < 16; get_index++){rADCCON=0x1|(0x3<<2); // AIN3while(!(rADCCON & 0x40));data+=rADCDAT;for(loop_delay=1000; loop_delay; loop_delay--);}data /= 32;value = trans_input(data);display_buffer[3] = value / 10;display_buffer[4] = value % 10;for(loop_delay=100000; loop_delay; loop_delay--);}}char trans_input(int value){if(value == MAX_VALUE) return 50;return (char)(value * 50 / (MAX_VALUE-MIN_VALUE));}/***************************************************************************** // Function name : rtc_tick_isr// Description : TICK中断处理程序// Return type : int// Argument : void*****************************************************************************/ void timer0_isr(void){rI_ISPC=BIT_TIMER0;if(refresh_index==2) refresh_index++;if(refresh_index==5) refresh_index = 0;/* 设置数码管段选 */*((unsigned char*) 0x02000006) = 0x3f & ~(0x01 << refresh_index);*((unsigned char*) 0x02000004) = seg7table[display_buffer[refresh_index]];refresh_index++;}1) 设置A/D采样的时钟频率A/D采样频率取决于ADCPSR寄存器。