kl800.com省心范文网

嵌入式接口实验












11 — 12 学年第 1 学期) 学期)

课程名称: 课程名称: 姓 学 专 年 名: 院: 业: 级:

嵌入式系统 李翔 工学院 计算机技术 计算机技术 2011 级


进入实验室 时间 进入时仪器 设备状况


第节


综合


楼 号室

2012 年 1 月 1 日

离开实验室 时间

离开时仪器 离开时仪器 设备状况

机器号

实验项目名称 一、 实验目的

实验 4、AD 接口实验 、

1.了解在 linux 环境下对 S3C44B0 芯片的 8 通道 10 位 AD 的操作与控制。

二、 实验内容
1.学习 A/D 接口原理,了解实现A/D 系统对于系统的软件和硬件要求。 2.阅读ARM 芯片文档,掌握ARM 的A/D 相关寄存器的功能,熟悉ARM 系统硬件的A/D 相关接口。3. 利用外部摸拟信号编程实现ARM 循环采集全部前4 路通道,并且在超级终端上显示。

三、 预备知识
1. 2. 3. 4. 有 C 语言基础。 掌握在 LINUX 下常用编辑器的使用。 掌握 Makefile 的编写和使用。 掌握 Linux 下的程序编译与交叉编译过程

四、 实验设备及工具
硬件:NET-ARM3000 嵌入式实验仪,PC 机pentumn500 以上, 硬盘40G 以上,内存大于128M。 软件:PC 机操作系统 redhat linux 9.0 + minicom+uClinux 开发环境。

五、 实验原理
ARM S3C440BX 芯片自带一个8路10 位A/D 转换器,该转换器可以通过软件设置为Sleep 摸式,可 以节电减少功率损失,最大转换率为500K,非线性度为正负1位,其转换时间可以通过下式计算:如果系 统时钟为66MHz,比例值为9,则为 66MHz/2 (9+1)/16 (完成转换至少需要16 个时钟周期)=205.25KHz(相当于4.85us) ARM 芯片与A/D 功能有关的引脚为以下几个, 其中AIN[7:0]为8 路摸拟采集通道, AREFT 为参考正 电压,AREFB 为参考负电压,AVCOM 为摸拟共电压。

与AD 相关的寄存器主要是如下三个: (1) ADCPSR:采样比率寄存器。其地址和意义参见下表:

通过设置该寄存器,可以设置采样率,最后得到的除数因子=2(寄存器值+1)。 ⑵ ADCCON:采样控制寄存器。其地址和意义参见下表:

⑶ ADCDAT:转换结果数据寄存器。该寄存器的十位表示转换后的结果,全为1时为满量程3.3 伏。

实验步骤 六、 实验步骤
1. 进入 exp/03_ad 目录,使用vi 编辑器或其他编辑器阅读理解源代码。

hardware.h包含了A/D寄存器地址: #define REGBASE 0x01c00000 #define REGL(addr) (*(volatile unsigned int *)(REGBASE+addr)) /*********************************/ /* A/D Converter Registers */ /*********************************/

#define ADCCON #define ADCPSR #define ADCDAT

REGL(0x140000) REGL(0x140004) REGL(0x140008)

main.c

#include #include #include #include #include #include #include

<stdio.h> <unistd.h> <sys/types.h> <sys/ipc.h> <sys/ioctl.h> <pthread.h> "hardware.h"

/*宏定义控制寄存器各位*/ #define ADCCON_FLAG #define ADCCON_SLEEP

0x40 0x20

#define #define #define #define #define #define #define #define

ADCCON_ADIN0 ADCCON_ADIN1 ADCCON_ADIN2 ADCCON_ADIN3 ADCCON_ADIN4 ADCCON_ADIN5 ADCCON_ADIN6 ADCCON_ADIN7

(0x0<<2) (0x1<<2) (0x2<<2) (0x3<<2) (0x4<<2) (0x5<<2) (0x6<<2) (0x7<<2)

#define ADCCON_READ_START 0x2 #define ADCCON_ENABLE_START 0x1 /*初始化*/ void init_ADdevice(void) { ADCPSR=20; // 采样频率与分频比例因子 67.5M/2/21/16= 100.446khz ADCCON=ADCCON_SLEEP; //停止采样 } /*采样*/ int GetADresult(int channel) { int i=0; ADCCON=(channel<<2)|ADCCON_ENABLE_START;//设置采样通道,开始采样 for(;i<100;i++); while(!( (ADCCON) & ADCCON_FLAG)); //控制寄存器标志位为0,采样结束 return ADCDAT;//返回采样值 }

static int stop=0; /*监听线程,回车退出*/ void* comMonitor(void* data) { getchar();

stop=1; return NULL; }

int main(void) { int i; float d; pthread_t th_com; void * retval; init_ADdevice();//初始化设备 usleep(1); pthread_create(&th_com, NULL, comMonitor, 0); //创建线程comMonitor printf("\nPress Enter key exit!\n"); while( stop==0 ){ for(i=0; i<=3; i++)//采样0~3路A/D值 { d=((float)GetADresult(i)*2.5)/1024.0;//采样 printf("a%d=%f\t",i,d); usleep(10); } printf("\r"); } pthread_join(th_com, &retval);//等待线程推出 printf("\n"); return 0; } 2. 运行 make 产生ad 可执行文件 Rules.mak文件 TOPDIR= .. CROSS = arm-uclibcCC= arm-uclibc-gcc #CC=gcc #CFLAGS += -g LDFLAGS += -static -elf2flt EXTRA_LIBS += EXP_INSTALL = install -m 755 INSTALL_DIR = ../bin Makefile文件 TOPDIR = ../ include $(TOPDIR)Rules.mak EXTRA_LIBS += -lpthread EXEC= $(INSTALL_DIR)/ad ./ad OBJS= main.o all: $(EXEC) $(EXEC): $(OBJS)

$(CC) $(LDFLAGS) -o $@ $(OBJS) $(EXTRA_LIBS) install: $(EXP_INSTALL) $(EXEC) $(INSTALL_DIR) clean: rm -f *.o a.out ad *.gdb 运行 make结果显示:

3. 切换到 minicom 终端窗口,使用NFS mount 开发主机的/uclinux 到/mnt 目录。

4. 进入/mnt/exp/03_ad 目录,运行ad,观察运行结果的正确性。

5. 修改一些参数,再次运行调试,加深对串口编程的理解。 修改参数,采集 6 个通道,结果如下:

更改显现方式,采集 8 个通道,结果如下

七、 思考题
1. 逐次逼近型的A/D 转换器原理是什么? 答:逐次逼近型的A/D 转换器是由逐次逼近寄存器SAR、D/A 转换器、比较器以及时序和控制逻辑等部分 组成。它的实质是逐次把设定的SAR 寄存器中的数字量经D/A 转换后得到电压Vc 与待转换摸拟电压V。进 行比较。比较时,先从SAR 的最高位开始,逐次确定各位的数码应是“1”还是“0”。 2. A/D 转换的重要指标包括哪些? 答:⑴ 分辨率⑵ 精度⑶ 转换时间⑷ 电源灵敏度⑸ 量程⑹ 输出逻辑电平⑺ 工作温度范围 3. ARM 的A/D 功能的相关寄存器有哪几个,对应的地址是什么? 答: (1)ADCPSR:采样比率寄存器。地址0x01D40004 (2)ADCCON:采样控制寄存器。地址0x01D40000 ⑶ ADCDAT:转换结果数据寄存器。地址0x01D40008 4.如何启动ARM 开始转换A/D,有几种方式?转换开始时ARM 是如何知道转换哪路通道的?如何判断 转换结束? 答:有两种方式启动 ARM 开始转换 A/D,配置 ADCPSR 寄存器第 0 位,写1表示转换开始。第 1 位写 1 转换 在读操作时开始。 通过设置 ADCPSR 寄存器 3-5 位选择 0 到 7 通道。 读取 ADCPSR 寄存器 FLAG 标志位,若为 1,转换结束。

评语: 评语:


进入实验室 时间 进入时仪器 设备状况


第节


综合


楼 号室

2012 年 1 月 1 日

离开实验室 时间

离开时仪器 设备状况

机器号

实验项目名称 一、 实验目的

实验 5、DA 接口实验 、

1.学习D/A 转换原理 2.掌握MAX504D/A 转换芯片的使用方法 3.掌握不带有 D/A/的 CPU 扩展 D/A 功能的主要方法。

二、 实验内容
1.学习 D/A 接口原理,了解实现D/A 系统对于系统的软件和硬件要求。 2.阅MAX504 芯片文档,掌握其使用方法,利用示波器,编程实现正弦波信号的输出。

三、 预备知识
1. 2. 3. 4. 有 C 语言基础。 掌握在 LINUX 下常用编辑器的使用。 掌握 Makefile 的编写和使用。 掌握 Linux 下的程序编译与交叉编译过程

四、 实验设备及工具
硬件:NET-ARM3000 嵌入式实验仪,PC 机pentumn500 以上, 硬盘40G 以上,内存大于128M。 软件:PC 机操作系统 redhat linux 9.0 + minicom+uClinux 开发环境。

五、 实验原理
如图,RFB 连接VOUT、BIPOFF 连接AGND,使得输出电压范围为0~2VREFIN,即 0~4.069V。时钟和输入、输出信号分别与同步串口的时钟、发送和接收端相连。可以通过 WriteSDIO(data)函数(Uhal.h)向MAX504 发送数据。发送数据时要注意,MAX504 可接受 12 位的数据,但低两位不起作用。WriteSDIO(data)函数一次只能发送8 位的数据,所以发 送数据时应先将数据左移两位,然后先发送高八位,再发送低八位数据。CLR 和CS 分别由 MAX504_CLEAR()和 MAX504_ENABLE()、MAX504_DISABLE()函数(Max504.c)控制。

Max504 的连接

实验步骤 六、 实验步骤
1. 进入 exp/04_da 目录,使用vi 编辑器或其他编辑器阅读理解源代码。 #include <stdio.h> #include <fcntl.h> #include <string.h> #include <sys/ioctl.h> #include "hardware.h" #include "exio.h" #include "s3c44b0-spi.h"//定义SPI #define MAX504_CS 0x2 //外部IO口EXIO1 #define MAX504_CLR 0x1 //外部IO口EXIO0 #define SIOLSB 0x40 #define MAX504_CLEAR() do{CLREXIOBIT(MAX504_CLR); Delay(1); SETEXIOBIT(MAX504_CLR);}while(0)// #define Max504_FULL 4.096f//最高电压值 #define SPI_DEV "/dev/spi/0"//SPI设备地址 static int spi_fd = -1; /*延时*/ void Delay(int t) { int i; for(;t>0;t--) for(i=0;i<400;i++); } /*写Max504芯片*/ void Max504_SetDA(int value)

{ value<<=2; MAX504_CLEAR(); Delay(1); ioctl(spi_fd, SPI_IOCTRL_WFORMAX504, value); } int main(int argc, char **argv) { float v; int value; /*要求带参数运行*/ if(argc!=2){ printf("Error parameter\n"); return 1; } sscanf(argv[1], "%f",&v); /*用户输入电压范围*/ if(v<0 || v>Max504_FULL) { printf("DA out must between: 0 to %f\n", Max504_FULL); return 1; } init_exio();//初始化IO /*打开SPI设备*/ if((spi_fd=open(SPI_DEV, O_NONBLOCK))<0) { printf("Error opening %s spi device\n", SPI_DEV); return 1; } value=(int)((v*1024.0f)/Max504_FULL); Max504_SetDA(value);//写Max504芯片 close(spi_fd);//关闭SPI设备 printf("Current Voltage is %f V\n", v); return 0; } 2. 运行 make 产生da 可执行文件

3. 切换到 minicom 终端窗口,使用NFS mount 开发主机的/uclinux 到/mnt 目录。

3. 进入/mnt/exp/05_da 目录,运行da,观察运行结果的正确性。

5. 编写一个正弦波输出的函数,使用示波器观察输出的正确性。

七、 思考题
1. D/A 转换器的分类。 答:1)电压输出型2)电流输出型3)乘算型4)一位DA 转换器 2. D/A 转换器的主要技术指标。 答 1)分辩率 2)建立时间 3. MAX504 的特点及使用方法。 答: (1)由单个5V 电源供电 (2)电压输出缓冲 (3)内部2.048V 参考电压 (4)INL= ±
21 LSB(MAX)

(5)电压不随温度变化 (6)可变的输出范围:0V~VDD,VSS~VDD (7)上电复位 (8)串行输出

评语: 评语:


赞助商链接

嵌入式接口实验

嵌入式系统 李翔 工学院 计算机技术 计算机技术 2011 级 实进入实验室 时间 进入...实验目的 实验 4、AD 接口实验 、 1.了解在 linux 环境下对 S3C44B0 芯片的...

ARM嵌入式GPIO接口实验

ARM嵌入式GPIO接口实验_计算机软件及应用_IT/计算机_专业资料。《嵌入式系统原理与应用 B》课程实验报告 ARMGPIO 实验 要求完成的主要实验 GPIO 实验(输入扫描按键...

嵌入式DA与AD接口的实验

嵌入式系统设计与实例开发》(2011-2012 学年第 2 学期) 实验报告 实验四 D/A 与 A/D 接口的试验 2.4 D/A 接口和 A/D 接口试验 一、实验目的 1.学习...

嵌入式系统设计USB接口实验

嵌入式系统设计USB接口实验_计算机软件及应用_IT/计算机_专业资料。昆明理工大学信息工程与自动化学院学生实验报告( 2011 —2012 学年 第 2 学期 ) 课程名称:嵌入...

嵌入式串口实验

2、 打开实验源码 uart.eww (路径为: 出厂光盘 DISK-EMBV210-WSN\05-Example\2 基本接口实验\2.5 UART) ,编译工程,依次选择“Project”→“Download and ...

《嵌入式接口技术》实验报告3-LED点阵显示_图文

嵌入式系统接口技术》实验报告 实验序号:03 学号 XX 1 实#318 实验项目名称:LED 点阵显示实验 姓名 XX XX 专业、班 实验时间 11 计算机 1 班 2013-10-25...

嵌入式技术及应用-实验四-IO接口实验

昆明理工大学信息工程与自动化学院学生实验报告( 2011 课程名称:嵌入式技术及应用 专业、年级、班 实验项目名称 学号 I/O 接口实验 — 2012 学年 第 2 学期 )...

嵌入式实验一

嵌入式实验一 - 1. 实验一:人机交互接口-显示实验 1.1 实验名称 人机交互接口-显示实验 1.2 实验目的 (1)初步学习、理解、掌握 OLED 字符显示方法 (2)初步...

嵌入式实验二实验报告

嵌入式实验实验报告_计算机软件及应用_IT/计算机_专业资料。关于嵌入式实验二...2.2.2 实验代码 1>.8055 芯片接口要求 3 代码: mov al,10001001B out ...

嵌入式系统实验报告

嵌入式系统实验报告_调查/报告_表格/模板_实用文档。嵌入式系统 实验报告 姓名:...二、实验内容 学习 A/D 和 LCD 接口原理,了解实现 A/D 和 LCD 系统对于...