avr 编写电子秤实验报告_第1页
avr 编写电子秤实验报告_第2页
avr 编写电子秤实验报告_第3页
avr 编写电子秤实验报告_第4页
avr 编写电子秤实验报告_第5页
已阅读5页,还剩9页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电子称设计报告摘要本设计系统以单片机Atmega16为控制核心,实现电子秤的基本控制功能。在设计系统时,为了更好地采用模块化设计法,分步设计了各个单元功能模块。系统的硬件部分包括最小系统部分、数据采集部分、人机交互界面三大部分。最小系统是Atmega16的最小系统;数据采集部分由称重传感器czl-a和A/D转换部分hx711模块组成;人机界面部分为键盘输入,1602液晶显示器,可以直观的显示重量的具体数字以及方便的输入数据以设定单价和预定重量,使用方便。系统的软件部分应用单片机C语言进行编程,实现了该设计的全部控制功能。该电子秤可以实现基本的称重功能(称重范围为0~1Kg,重量误差不大于±0.005Kg),可以设定商品的单价和想要的重量,当超重时,相应的灯会亮起以警示。本系统设计结构简单,使用方便,功能齐全,精度高,具有一定的开发价值。1.电子秤概述称重技术自古以来就被人们所重视,作为一种计量手段,广泛应用于工农业、科研、交通、内外贸易等各个领域,与人民的生活紧密相连。电子秤是电子衡器中的一种,衡器是国家法定计量器具,是国计民生、国防建设、科学研究、内外贸易不可缺少的计量设备,衡器产品技术水平的高低,将直接影响各行各业的现代化水平和社会经济效益的提高。因此,称重技术的研究和衡器工业的发展各国都非常重视。我国电子衡器从最初的机电结合型发展到现在的全电子型和数字智能型。我国电子衡器的技术装备和检测试验手段基本达到国际水平。电子衡器制造技术及应用得到了新发展。电子称重技术从静态称重向动态称重发展;计量方法从模拟测量向数字测量发展;测量特点从单参数测量向多参数测量发展,特别是对快速称重和动态称重的研究与应用。电子秤属于电子衡器的一种,它的发展也遵循这一趋势。随着时代科技的迅猛发展,微电子学和计算机等现代电子技术的成就给传统的电子测量与仪器带来了巨大的冲击和革命性的影响。常规的测试仪器仪表和控制装置被更先进的智能仪器所取代,使得传统的电子测量仪器在远距离、功能、精度及自动化水平定方面发生了巨大变化,并相应的出现了各种各样的智能仪器控制系统,使得科学实验和应用工程的自动化程度得以显著提高。做为重量测量仪器,智能电子秤在各行各业开始显现其测量准确,测量速度快,易于实时测量和监控的巨大优点,并开始逐渐取代传统型的机械杠杆测量称,成为测量领域的主流产品。接下来让大家了解更多有关于智能电子秤的相关知识。2.课题的意义电子秤的发展过程与其它事物一样,也经历了由简单到复杂、由粗糙到精密、由机械到机电结合再到全电子化、由单一功能到多功能的过程。近年来,电子秤已愈来愈多地参与到数据处理和过程控制中。现代称重技术和数据系统已经成为工艺技术、储运技术、预包装技术、收货业务及商业销售领域中不可缺少的组成部分。随着称重传感器各项性能的不断突破,为电子秤的发展奠定了其础,国外如美国、西欧等一些国家在20世纪60年代就出现了0.1%称量准确度的电子秤,并在70年代中期约对75%的机械秤进行了机电结合式的电子化改造。电子秤是日常生活中常用的电子衡器,广泛应用于超市、大中型商场、物流配送中心。电子秤在结构和原理上取代了以杠杆平衡为原理的传统机械式称量工具。相比传统的机械式称量工具,电子秤具有称量精度高、装机体积小、应用范围广、易于操作使用等优点,在外形布局、工作原理、结构和材料上都是全新的计量衡器。电子秤的设计首先是通过压力传感器采集到被测物体的重量并将其转换成电压信号。输出电压信号通常很小,需要通过前端信号处理电路进行准确的线性放大。放大后的模拟电压信号经A/D转换电路转换成数字量被送入到主控电路的单片机中,再经过单片机控制译码显示器,从而显示出被测物体的重量。目前市场上使用的称量工具,或者是结构复杂,或者运行不可靠,且成本高,精度稳定性不好,调正时间长,易损件多,维修困难,装机容量大,能源消耗大,生产成本高。而且目前市场上电子秤产品的整体水平不高,部分小型企业产品质量差且技术力量薄弱,设备不全,缺乏产品的开发能力,产品质量在低水平徘徊。因此,有针对性地开发出一套有实用价值的电子秤系统,从技术上克服上述诸多缺点,改善电子秤系统在应用中的不足之处,具有现实意义。3.相关器件介绍:本设计系统以单片机Atmega16为控制核心,实现电子秤的基本控制功能。在设计系统时,为了更好地采用模块化设计法,分步设计了各个单元功能模块。系统的硬件部分包括最小系统部分、数据采集部分、人机交互界面三大部分。最小系统是Atmega16的最小系统;数据采集部分由称重传感器czl-a和A/D转换部分hx711模块组成;人机界面部分为键盘输入,1602液晶显示器,可以直观的显示重量的具体数字以及方便的输入数据以设定单价和预定重量,使用方便。功能:系统的软件部分应用单片机C语言进行编程,实现了该设计的全部控制功能。该电子秤可以实现基本的称重功能(称重范围为0~1Kg,重量误差不大于±0.005Kg),可以设定商品的单价和想要的重量,并计算总价,同时相应结果均显示在1602上。此外,当超重时,相应的灯会亮起以警示。结构图:称重硬件结构框图:结构图:czl-a10KG压力传感器A/D转换hx711模块Atmega16键盘1602液晶显示相应数值Atmega16:选择了ATmega16通用的比较普通单片机来实现系统设计。ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。由于其先进的指令集以及单时钟周期指令执行时间,ATmega16的数据吞吐率高达1MIPS/MHz,从而可以减缓系统在功耗和处理速度之间的矛盾。ATmega16AVR内核具有丰富的指令集和32个通用工作寄存器。所有的寄存器都直接与运算逻单元(ALU)相连接,使得一条指令可以在一个时钟周期内同时访问两个独立的寄存器。这种结构大大提高了代码效率,并且具有比普通的CISC微控制器最高至10倍的数据吞吐率。ATmega16有如下特点:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512字节EEPROM,1K字节SRAM,32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益(TQFP

封装)的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI

串行端口,以及六个可以通过软件进行选择的省电模式。工作于空闲模式时CPU停止工作,而USART、两线接口、A/D

转换器、SRAM、T/C、SPI端口以及中断系统继续工作;掉电模式时晶体振荡器停止振荡,所有功能除了中断和硬件复位之外都停止工作;在省电模式下,异步定时器继续运行,允许用户保持一个时间基准,而其余功能模块处于休眠状态;ADC噪声抑制模式时终止CPU和除了异步定时器与ADC以外所有I/O模块的工作,以降低ADC转换时的开关噪声;Standby模式下只有晶体或谐振振荡器运行,其余功能模块处于休眠状态,使得器件只消耗极少的电流,同时具有快速启动能力;扩展Standby模式下则允许振荡器和异步定时器继续工作。本芯片是以Atmel高密度非易失性存储器技术生产的。片内ISPFlash允许程序存储器通过ISP

串行接口,或者通用编程器进行编程,也可以通过运行于AVR内核之中的引导程序进行编程。引导程序可以使用任意接口将应用程序下载到应用Flash存储区(ApplicationFlashMemory)。在更新应用Flash存储区时引导Flash区(BootFlashMemory)的程序继续运行,实现了RWW操作。通过将8位RISCCPU与系统内可编程的Flash集成在一个芯片内,ATmega16成为一个功能强大的单片机,为许多嵌入式控制应用提供了灵活而低成本的解决方案。ATmega16具有一整套的编程与系统开发工具,包括:C语言

编译器、宏汇编、程序调试器/

软件仿真器、仿真器及评估板。czl-a10KG压力传感器:czl-a是压力传感器的一种。压力传感器是工业实践中最为常用的一种传感器。一般普通压力传感器的输出为模拟信号,模拟信号是指信息参数在给定范围内表现为连续的信号。或在一段连续的时间间隔内,其代表信息的特征量可以在任意瞬间呈现为任意数值的信号。而我们通常使用的压力传感器主要是利用压电效应制造而成的,这样的传感器也称为压电传感器。压力传感器是使用最为广泛的一种传感器。传统的压力传感器以机械结构型的器件为主,以弹性元件的形变指示压力,但这种结构尺寸大、质量轻,不能提供电学输出。随着半导体技术的发展,半导体压力传感器也应运而生。其特点是体积小、质量轻、准确度高、温度特性好。特别是随着MEMS技术的发展,半导体传感器向着微型化发展,而且其功耗小、可靠性高。hx711:HX711是一款专为高精度电子秤而设计的24位A/D转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端MCU芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道A或通道B,与其内部的低噪声可编程放大器相连。通道A的可编程增益为128或64,对应的满额度差分输入信号幅值分别为±20mV或±40mV。通道B则为固定的64增益,用于系统参数检测。芯片内提供的稳压电源可以直接向外部传感器和芯片内的A/D转换器提供电源,系统板上无需另外的模拟电源。芯片内的时钟振荡器不需要任何外接器件。上电自动复位功能简化了开机的初始化过程。1602液晶显示屏:工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形(用自定义CGRAM,显示效果也不好)。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。4.要流程图如下:开始系统初始化设置单价与预定重量读取重量并计算总价读取的重量比较预定重量大于红灯亮小于显示相应数值以压力传感器为核心的智能监测及控制来实现单片机智能控制电子秤的称重目标。5.proteldxp设计的相应原理图和pcb图6.相应代码:/**AVRGCC1.c**Created:2013/5*Author:wangjinxin*/#include<avr/io.h>#include<avr/delay.h>#define BIT(X) (1<<X)#defineucharunsignedchar#defineuintunsignedint#pragmadata:codeconstucharup[]="up:";constucharwt[]="wt:";constuchartp[]="tp:";constucharew[]="ew:";floatup1=0,tp1=0,ew1=0;unsignedlongwt1=0;floatwei=1000;ucharsetup1=0;ucharuporew;uchar press_test(){ if((PINA&0XF0)!=0XF0) return1; elsereturn0;}voidsetup(){ uchari=0,key_value; //_delay_ms(2); if(press_test()) { for(i=0;i<4;i++) { PORTA=~BIT(i); //将第i位输出低电平 _delay_us(3); //使输出电平稳定 if((PINA&0xf0)!=0xf0) { break; } } key_value=PINA; while(press_test()); switch(key_value) { case0x7E:setup1=~setup1;uporew=0;break; case0x7D:setup1=~setup1;uporew=1;break; case0x7B:up1=0;ew1=0;wei=1000;break; default:break; } } PORTA=0xf0; //端口复位,保证正常进入下一次检测 _delay_us(5);}void press_show() //按键执行函数{ uchari=0,key_value; //_delay_ms(2); if(press_test()) { for(i=0;i<4;i++) { PORTA=~BIT(i); //将第i位输出低电平 _delay_us(3); //使输出电平稳定 if((PINA&0xf0)!=0xf0) { break; } } key_value=PINA; while(press_test()); switch(key_value) { case0x7E:setup1=~setup1;uporew=0;break; case0xBE:if(uporew==0)up1+=1*wei;elseew1+=1*wei;break; case0xDE:if(uporew==0)up1+=2*wei;elseew1+=2*wei;break; case0xEE:if(uporew==0)up1+=3*wei;elseew1+=3*wei;break; case0x7D:setup1=~setup1;uporew=1;break; case0xBD:if(uporew==0)up1+=4*wei;elseew1+=4*wei;break; case0xDD:if(uporew==0)up1+=5*wei;elseew1+=5*wei;break; case0xED:if(uporew==0)up1+=6*wei;elseew1+=6*wei;break; case0x7B:ew1=0;up1=0;wei=1000;/*if(uporew==0)up1=(up1/100/wei)*100*wei;elseew1=(ew1/100/wei)*100*wei;wei=100*wei;if(wei>10000)wei=10000;*/break; case0xBB:if(uporew==0)up1+=7*wei;elseew1+=7*wei;break; case0xDB:if(uporew==0)up1+=8*wei;elseew1+=8*wei;break; case0xEB:if(uporew==0)up1+=9*wei;elseew1+=9*wei;break; case0x77:if(uporew==0){up1=0;wei=1;}break; case0xB7:if(uporew==1){ew1=0;wei=1;}break; case0xD7:if(uporew==0)up1+=0*wei;elseew1+=0*wei;break; case0xE7:break; default:break; } wei=wei/10; if(wei==0.1) wei=1000; } PORTA=0xf0; //端口复位,保证正常进入下一次检测 _delay_us(5);}voidwrite_com(ucharcom){PORTB&=~BIT(4); PORTB&=~BIT(5); PORTD=com; PORTB|=BIT(6); _delay_ms(1); PORTB&=~BIT(6);}voidwrite_dat(uchardat){PORTB|=BIT(4); PORTB&=~BIT(5); PORTD=dat; PORTB|=BIT(6); _delay_ms(1); PORTB&=~BIT(6);}voidwrite(uchart,uchara[]){ ucharj; uchari=0; for(j=t;i<3;j++,i++) {write_com(j); write_dat(a[i]); }}voidwritedate(uchart,unsignedlongda){ ucharj; uchari=0; ucharc[4]; c[0]=da%10000/1000; c[1]=da%1000/100; c[2]=da%100/10; c[3]=da%10;//(da-(uchar)da)*10;//da%10000/1000;//(da-(uchar)da)*10; for(j=t;i<4;j++,i++) {if(i==3){write_com(j); write_dat('.');write_com(j+1); write_dat(c[i]+48);}else{write_com(j); write_dat(c[i]+48);} }}unsignedlongreadweight(){ unsignedlongcount;//,c; //intcc; //c=0; uchari; ucharj=23; DDRC|=0x01; PORTC|=0x01; _delay_us(2); PORTC&=~0x02; count=0; DDRC&=~0x01; PORTC|=0x01; while(PINC&0x01==0x01); for(i=0;i<24;i++) { PORTC|=0x02; count=count<<1; PORTC&=~0x02; if(PINC&0x01==0x01)count++; //c+=(count%2)*(2^j); //count=count^0x800000; j--; } PORTC|=0x02; count=count^0x800000; _delay_us(2); PORTC&=~0x02; returncount;}intmain(){ unsignedlongwt2;uchari=0; DDRA=0x0f; //将PD口低四位设置为输出,高四位设置为输入PORTA=0Xf0; //将PD口低四位设置为输出低电平,高四位端口设置为输带上拉的输入 DDRC|=0x02; DDRC|=0X08|0X10; PORTC&=~0X10; PORTC&=~0x08; DDRD=0XFF; DDRB|=BIT(4)|BIT(5)|BIT(6); //PORTB&=~BIT(6); write_com(0X38); _delay_ms(15); write_com(0X01); _delay_ms(15); write_com(0X0F); _delay_ms(15); write_com(0X06); _delay_ms(15); write_com(0X80); _delay_ms(15); //初始化 while(1) { setup(); while(setup1) { if(uporew==0) {if(wei==1000) {write_com(0x80+3); write_com(0x0f);} elseif(wei==100) {write_com(0x80+4);write_com(0x0f);} elseif(wei==10) {write_com(0x80+5);write_com(0x0f);} else {write_com(0x80+7);write_com(0x0f);}} else {if(wei==1000) {write_com(0x80+11);write_com(0x0f);} elseif(wei==100) {write_com(0x80+12);write_com(0x0f);} elseif(wei==10) {write_com(0x80+13);write_com(0x0f);} else {write_com(0x80+15);write_com(0x0f);}}press_show(); if(uporew==0) writedate(0x83,up1); else writedate(0x83+0x08,ew1); //////////// if(upore

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论