嵌入式系统作业

发布 2020-02-28 10:15:28 阅读 1959

嵌入式系统大作业报告。

一.实验任务。

1、基于arm1138的简易温控系统。

利用arm1138内置的温度传感器,随时监测芯片的温度,由于芯片温度比环境温度略高,因此可以通过实验找到一个差值,从而可以估算环境温度,温度结果通过uart输出。同时设计设置温度上下限的环节,超过设置的上下限报警!

1) 测出的温度通过uart输出。

编程要点:通过adcsample()函数对芯片温度进行采样,获取芯片温度,同时利用tmpdisplay(ulvalue)函数来通过uart显示芯片温度值。、

具体实现程序。

for (;

2) 直接在程序中设定报警温度的上下限例如:温度超过20度,led开始闪烁,超过30度,led闪烁,同时蜂鸣器开始报警。

3) 通过uart输入报警温度的上下限,通过key1来中断,即当前状态如果是超过30度,led闪烁同时蜂鸣器在报警,按下key1时,led停止闪烁同时蜂鸣器停止报警,再按一下key1时,led和蜂鸣器又开始工作!

编程要点:利用uartputs()函数来对来显示操作提示语言,如uartputs("请输入温度下限");利用函数uartgets()来从uart接收命令字符串,以此来获取所需的温度上下限值,并且判断当输入值不在允许范围内时要求重新输入用含函数key_get()来获取按键值,再根据按键值分别利用gpio_port_d_isr()函数来设定key1的中断,函数gpio_port_g_isr()来设定key2的中断,并且两者的优先级相同。再通过led_on()和 led_off()两个函数来控制led1,led2,led3的亮灭和闪烁状态来反映不同的状态。

用buzzersound()和buzzeroff()来控制蜂鸣器的动作,当温度超过上限的时候buzzersound()动作蜂鸣,否则进行buzzeroff()蜂鸣器不响。

实现功能:按下reset key3键后,三个灯全灭,重新进行输入温度上下限,进行判断状态。

1. 当芯片探测温度低于温度下限时,属于温度正常,此时只有led3闪烁。

2. 当芯片探测温度在设定温度范围内时,属于温度稍高,此时只有led3亮,led1闪烁。

3. 当芯片探测温度高于温度上限时,属于温度异常(过高),此时led2,led3亮led1闪烁,而且此时蜂鸣器工作蜂鸣。

按key2,停止判断温度。

按key1,恢复判断温度。

2、利用arm1138开发板上现有的功能,综合运用中断控制,配置虚拟com口进行uart通信,通用定时器,模数转换器,自己设计相应的功能并实现!

编程注意:①led闪烁发光:

为了避免误将jtag接口无防护地配置为gpio接口而被锁定,在程序开始处插入一段能够预防jtag失效的**jtagwait( )而后对系统始终进行设置,由clockinit( )函数来完成,直接调用即可。为了能够使led闪烁发光,需要首先对led的端口进行设置。调用函数sysctlperienable( )使能led所在的gpio模块,调用函数gpiopintypeout( )配置led所在的gpio管脚为推挽输出,调用gpiopinwrite( )对led所在的gpio管脚写0和写1实现led闪烁发光的效果。

当然还要有必要的延时**,这样子就能够实现led的闪烁发光。

uart控制台:

通过uart接收来自计算机的信息,从而判断温度范围,从而控制led的亮灭。uartputs("cmd>")检测uart输入,如果长度不为0,即有信号输入,即读入命名,进入if分别判断并执行相应的动作。

中断的设计:

在示例程序中已经有key1的gpiod的触发中断,我们所做的即使依葫芦画瓢,类似地写出了key2的gpiog的触发中断。注意到要修改文件,对中断进行初始化,更关键的是要对中断服务进行映射。在startup_ewarm文件中,修改中断向量表,使能gpiog的中断。

并且利用extern声明与文件进行链接即可。至于中断服务可以随便写,我们按照所需要的实现功能来。其中key1控制led1,key2控制led2\led3。

二.温度算法。

10位的adc模块集成有一个温度传感器,可以用来获取芯片的当前温度。

在温度传感器特性图里,给出了以下公式:

vsenso = 2.7 - t + 55) /75,单位:v

设vsenso对应的adc采样值为n,2.7v对应n1,(t+55)/75对应n2

已知:n1 * 3 / 1024) =2.7

n2 * 3 / 1024) =t + 55) /75

由此得到:n = n1 - n2 = 2.7 / 3 / 1024) -t + 55)/75) /3 / 1024)

解得:t = 151040 - 225 * n) /1024

结论:adc配置为温度传感器模式后,只要得到adc采样值n,就能推算出当前的温度t。

温度传感器特性图。

三.课程和实验感想。

从第一次实验是我们第一次自己动手改写easyarm1138 的例程并实现一个不同的功能,到最后作出一个简单温度控制系统的这个过程中,逐渐对嵌入式系统熟悉起来,使用起来也越来越得心应手,在这里感谢老师上课对嵌入式系统深入浅出的讲解,使我们能够清楚明白嵌入式的内容,弄清了以前的一些认识误区,同时感谢助教在实验过程对我们的小组提出疑惑问题的解答和帮助,使我们更加容易地完成大作业。

四.附录主程序。

int main(void)

char s[40];

int size;

unsigned long ulvalue;

jtagwait防止jtag失效,重要!

clockinit时钟初始化:pll,12.5mhz

uartinituart初始化。

adcinitadc初始化。

systickinit系统节拍定时器初始化。

buzzerinit();

sysctlperienable(led1_periph使能led所在的gpio端口。

gpiopintypeout(led1_port, led1_pin设置led所在管脚为输出。

sysctlperienable(led2_periph使能led所在的gpio端口。

gpiopintypeout(led2_port, led2_pin设置led所在管脚为输出。

sysctlperienable(led3_periph使能led所在的gpio端口。

gpiopintypeout(led3_port, led3_pin设置led所在管脚为输出。

sysctlperienable(key1_periph使能key所在的gpio端口。

gpiopintypein(key1_port, key1_pin设置key所在管脚为输入。

gpiointtypeset(key1_port, key1_pin, gpio_low_level设置key管脚的中断类型。

sysctlperienable(key2_periph使能key所在的gpio端口。

gpiopintypein(key2_port, key2_pin设置key所在管脚为输入。

gpiointtypeset(key2_port, key2_pin, gpio_low_level设置key管脚的中断类型。

gpiopinintenable(key1_port, key1_pin使能key所在管脚的中断。

intenable(int_gpiod使能gpiod端口中断。

gpiopinintenable(key2_port, key2_pin使能key所在管脚的中断。

intenable(int_gpiog使能gpiod端口中断。

intmasterenable使能处理器中断。

gpiopinwrite(led1_port, led1_pin, 0xff);

gpiopinwrite(led2_port, led2_pin, 0xff);

gpiopinwrite(led3_port, led3_pin, 0xff);

uartputs("请输入一个命令,按回车执行。

uartputs("请输入命令,以回车结束");

嵌入式式系统作业

目录。摘要 1第一章绪论 2 第二章相关芯片介绍 3 2.1 tms320f28335 3 2.2 加速度传感器adxl345 4 2.3 角速度传感器l3g4200 5 第三章 dsp的i2c通讯原理 6 3.1 adxl345的i2c接口 6 3.2 l3g4200的i2c接口 8 3.3 tm...

嵌入式系统作业

嵌入式系统的应用范围可以粗略分为两大类 电子系统的智能化 工业控制 现代农业 家用电器 汽车电子 测控系统 数据采集等 计算机应用的延伸 手机 通信 网络 计算机外围设备等 从这些应用可以看出,要完成一个以mcu为核心的嵌入式系统应用产品设计,需要硬件 软件及行业领域相关知识。硬件主要有mcu的硬件...

嵌入式系统作业

计算机科学与技术学院。计科09 2班。题目 电子产品之嵌入式追踪系统。一 现状。我时常听到说某位同学的手机被盗了或者相机丢了,类似的事情在高校里时有发生。这给同学们造成了严重的损失,而且里面还有很多资料是非常重要的,这一丢失给失主造成的损失更是无法估量,那么我们能否用什么方法来解决此类问题吗?因此我...