当前位置:首页 > avr单片机
  • 基于MODBUS协议的智能控制系统设计

    基于MODBUS协议的智能控制系统设计

    引言   现场总线作为生产过程自动化发展的重点,对推动自动化技术起到巨大的推动作用,是现代化工业的标志。MODBUS作为现场总线的一种通信协议,它实现了PLC控制器、工控仪表与设备间的通讯和信息交换。具有MODBUS功能的工控仪表虽然应用比较广泛,但是工控仪表和PLC控制器价格较高并且没有形成自主知识产权的产品,阻碍了它的进一步发展。本文从这个问题着手,设计基于MODBUS协议的单片机控制系统,设计合理,价格低廉,自主性强,在工业控制领域具有广泛的应用前景。   1 系统总体设计   系统中计算机PC作为主机,AVR单片机作为从机,采用RS-485工业现场总线通信。由于计算机的串口采用RS232总线标准,因此在主机的串行通信端口必须增加RS485-RS232电平转换器,在计算机串行端口由该电平转换器实现RS-232电平与RS-485电平转换,主机与从机通过MOD-BUS通信协议在RS-485总线上进行数据通信和交换,在整个RS-485总线上最多可以接255台从机。系统的总体结构如图1所示。     2 系统硬件设计   整个硬件电路包括:PC机、RS485-RS232电平转换器、电源、复位电路、晶振电路、AVR单片机控制系统。本系统上位机由PC机和串口组成,下位机由两个单片机控制系统组成。两个从机设备地址为01和02,每个单片机系统由Atmega32单片机,TSl2864A-3型LCD液晶显示器,传感器,PWM脉宽调制控制电路组成。下位机基于Atmega32单片机,通过传感器对采集数据再经过A/D转换后在LCD液晶屏显示,Atmega32单片机带有MAX485串口,通过RS-485总线与上位机通讯,系统的总体硬件原理图如图2所示。  

    时间:2020-09-09 关键词: avr单片机 智能控制系统 modbus协议

  • 基于AVR芯片的光照和CO2控制系统分析

    基于AVR芯片的光照和CO2控制系统分析

    一、项目概述 1.1 引言 温室是一种可以改变植物生长环境、为植物生长创造最佳条件、避免外界四季变化和恶劣气候对其影响的场所。它以采光覆盖材料作为全部或部分结构材料,可在冬季或其他不适宜露地植物生长的季节栽培植物。温室生产以达到调节产期,促进生长发育,防治病虫害及提高质量、产量等为目的。而温室设施的关键技术是环境控制,该技术的最终目标是提高控制与作业精度。随着农业现代化的发展,设施农业工程因其涉及学科广、科技含量高、与人民生活关系密切,己越来越受到世界各国的重视。这也为我国大型现代化温室的发展提供了极好的机遇,并产生巨大的推动作用。本项目以AVR芯片为控制芯片,设计了一套适用于当前西瓜生产的光照和二氧化碳浓度控制系统。 1.2 项目背景/选题动机 中国作为一个农业大国,“三农”问题关系到国民素质、经济发展,关系到社会稳定、国家富强、民族复兴。“十二五”发展规划中现代农业是的重中之重,我国农业生产靠天吃饭的局面仍未根本改变。农业基础设施条件还比较差,抗御自然灾害能力较弱。近年来,我国每年因气象灾害损失粮食1000亿斤左右。自然灾害呈加重态势,粮食生产风险越来越大。从而使如何在提高农产品产量的同时减少气象灾害对农业生产的影响变得尤为重要。 温室是现代西瓜生产中必不可少的设施之一,光照和二氧化碳浓度是影响西瓜生长发育两个重要的因子。二氧化碳是植物进行光合作用的重要原料,要维持西瓜的光合作用,应使二氧化碳的浓度保持在250%——300%ppm。光照作物有两个重要的坐标点—光补偿点和光饱和点。光合产物的形成不仅与光照的强度,而且与光照的时间,即由一定光强累积的光照量有关。光照分布愈均匀,其阴影面积率及作物群体漏光损失愈小,则温室作物的光能利用率就愈高。所以控制好光照和二氧化碳的量对于温室种植西瓜又极其重要的意义。本项目通过使用ATmega16芯片,结合光照传感器、二氧化碳传感器来实现对温室光照和二氧化碳量的自动化控制。 二、需求分析                                  2.1 功能要求 该系统先测量光照强度,根据在相应的光照条件下二氧化碳的测量值与相应生长期的各环境因子的最高、最低值比较,控制相关设备的打开和关闭。当测量值大于最高值或小于最低值时,除了打开相应的设备外,系统还启动报警设备,提醒工作人员注意。系统具有能测量显示二氧化碳浓度值,和连接到执行设备实行自动控制的功能,同时留有检测控制多个环境因子的接口。 温室光照强度随地理位置和时间变化而变化,不同温室的透光率不同,所以在温室内的光照分布不均匀。太阳辐射是外界对温室环境影响的主要的因素之一,它可直接影响室内的温度、湿度、植物的光合作用、呼吸作用等。根据荷兰学者的研究结果,当光照降低19%时,产量降低21%,当光照降低32%时,产量降低34%,从而得出1%光照等于1%的产量的结论,由此可见光照对于作物生长的重要性。 夏季光照强度过大,超过光饱和点时,就要人为遮光,防止温室气温过高灼伤作物。可采用外遮阴进行遮阳。而在阴雨季节和冬天夜间,光照强度低于光补偿点使作物有效光照时间缩短时,为促进作物生长,需进行人工补光。常用的温室补光人工光源主要包括白炽灯、卤灯、荧光灯、高压水银灯、金属卤化物灯和高压钠灯等。为调节光质和节约能耗,温室中一般将金属卤化物等和高压钠灯按l:1搭配安装使用。 二氧化碳是植物光合作用的主要碳源。文献中一般认为二氧化碳浓度保持在500^-1000(mg/kg)为适宜浓度,若高达3000 mg·kg将对人体有害。正常大气情祝下的二氧化碳浓度在340350 mg/kg,光合作用速率随光量增加而增加,但达到光饱和点后就趋于缓和。在此情况下,温度的影响不大,但若有二氧化碳施肥使浓度达1000 mg/kg或以上,则光合作用速率可随之加快。而西瓜对二氧化碳的吸收存在着补偿点和饱和点,长时间的二氧化碳饱和浓度可对西瓜光合系统造成破坏而降低光合效率。因此及时准确的了解温室内的二氧化碳浓度是保证温室西瓜高质、快速生长的基础条件。 温室的二氧化碳肥料来源主要有碳水化合物燃料、高压瓶装二氧化碳,干冰、发酵、有机物质降解和化学反应生成法,但大多数的设施实现自动控制较为困难。一般温室中采用钢瓶装的液态二氧化碳气源,用继电器的启闭和控制时间来实现二氧化碳的释放量。当温室内二氧化碳浓度过高时,可以通过自然通风和强制通风来调节。为它们提供一个更适宜其生长的封闭的、良好的生存环境。我们先编制出温室西瓜各生育阶段最适环境条件的管理程序表,存储于AVR单片机的ROM中,AVR单片机根据程序表确认、修正各栋温室内的参数,并给终端控制系统指令。终端控制设备向AVR单片机输送检测信息,根据AVR单片机的指令输出控制信号,使电器机械设备执行动作,实现温室环境调节。该系统可自动控制光照和二氧化碳浓度。

    时间:2020-07-29 关键词: avr单片机

  • 基于AVR单片机的节能电梯介绍

    基于AVR单片机的节能电梯介绍

    一、项目概述 1.1 引言 随着社会的发展,高层建筑和智能化建筑的不断出现,作为垂直运输工具的电梯得到了越来越广泛的应用,人们对电梯服务质量及可靠运行提出了越来越高的要求。在2010年4月22日电梯行业“节能·安全·智能”技术交流会上中国电梯协会副秘书长张乐祥提出节能、安全、智能已成为电梯技术发张的主流,驱动与控制系统仍存在改善空间,远程监控维修技术成为焦点。 本文在节能方面运用电梯群控分配控制技术,以能量消耗作为主要指标把侯梯和乘梯时间作为模型约束建立数学模型,另外如果持续3 分钟没有轿厢、层站召唤,电梯将自动关闭照明及风扇,并降低梯厅位置显示器的亮度,从而大幅度减少待机电力消耗;在安全和智能方面通过对电梯的各种状态进行实时监控,同时对电梯运行过程中可能出现的各种故障进行预测、诊断和报警。 因此,此项目开发是基于 AVR处理器的智能电梯控制器,并融合CAN总线技术、多媒体技术、智能控制技术、优化调度技术、故障预测与诊断等技术。在硬件上,选用32位AVR处理器作为电梯控制器的核心CPU,在软件上,选用Linux操作系统作为电梯核心控制器的软件平台。 1.2 项目背景/选题动机 随我国城市化建设的迅猛发展和物质文化生活质量迅速提高,建筑业日益发展壮大。为建筑物内提供上下交通运输的电梯工业也迅速发展起来。电梯不仅是生产运输的主要设备,更是人们生活和工作中必备的交通工具。和汽车一样、已成为人们频繁使用的交通运输设备。 近年来,我国每年新增电梯均在15%以上,因此我国的电梯节能有许多潜力可挖。我国的电梯生产量、需求量已经占到全球50%以上,而电梯节能技术的研究基础比较薄弱。电梯要实现整体节能,与楼宇的电梯配置方案也密切相关。目前我国有许多楼宇都存在电梯的无效耗能。例如,一栋楼配置了多台电梯但却没有采用普通的并联、群控技术或目的选层群控技术,导致多台电梯向同方向运行的无效耗能。因此为了提高高层建筑中多部电梯的运行效率和服务质量,需要用电梯群控管理系统来进行合理的调度和管理。 然而近些年电梯安全事故时有发生,整个行业不得不深入分析。就电梯事故的原因,我们需要对电梯故障及时检测,就能有效地预防电梯事故的发生,减少对人们造成的危害。 为了实现上述功能,我们融入了“节能环保”的理念,设计了“基于AVR单片机的节能机器人电梯”。 二、需求分析 2.1 功能要求 (1)当电梯3分钟没有接收呼梯信号时,电梯自动关闭照明及风扇。 (2)当电梯运行速度超过一定值时,发送报警信号到远程控制系统 (3)当电梯断电时,发送断电信号到远程控制系统 (4)当轿厢内报警按钮按下时发送信号至远程控制系统,远程控制系统接收到信息后由远程控制系统端的工作人员发送信号到轿厢点亮报警指示灯。 (5)当电梯的重量超过一定值时,电梯停止启动,并发出报警声音 (6)电梯轿厢外显示屏上能够显示电梯目前所在层数、所呼叫电梯等待时间 (7)电梯轿厢内显示屏上能够显示电梯当前运行方向(电梯向上运行时,向上运行指示灯点亮;电梯向下运行时,向下运行指示灯点亮)、当前所在层数、电梯到达目的层的的时间 (8)当多个呼梯信号同时发出时,电梯能够通过群控器进行最优配置,并且有轿厢外显示屏显示所分配电梯

    时间:2020-07-29 关键词: 节能电梯 avr单片机

  • vr在生活中的应用案例分析

    vr在生活中的应用案例分析

    VR给人一种沉浸感,具有传统娱乐方式不可比拟的优势。理想的VR让人分不清现实和虚拟,VR领路人相信VR能够改变人们的生活方式。 过去的时间,那些VR领域的佼佼者们有两件事做得非常好:一是寻找VR立竿见影的市场应用,二是投入百分之百的精力来获得用户的共鸣。 这些VR领路人之所以花费如此巨大的人力物力财力来推广VR,是因为他们相信VR能够像曾经的电视机、个人电脑、智能手机一样彻底改变人们的生活,VR被认为是下一代娱乐事业的终端形式,具有传统娱乐方式不可比拟的优势:沉浸感。理想的VR能够让人分不清何为现实何为虚拟。 事实上,许多行业已经从VR身上尝到了甜头受益匪浅。 虚拟现实技术在生活中的应用实例 虚拟现实的应用 近年来, 随着计算机技术、交互技术和人工智能等相关技术的快速发展,虚拟现实技术取得了巨大的进步,以此为基础的实际应用也得到了很快的发展和提高。虚拟现实技术适合应用于使用计算机仿真技术或计算机模拟技术的场合,特别是需要在三维空间中表现仿真模拟的过程或结果且需要实时的直接交互时,虚拟现实技术具有很大的优势。 1、教育 目前,VR已成为一种大人和小孩都喜欢的一种教学方式,它的沉浸感和多种方式的交互性让人们觉得十分有趣。通过VR的交互环境、再现能力及一对一的实践,可以提高学生们的记忆力和学习兴趣;具有真实的可视化能力,很适于表达难以理解的抽象概念;通过模拟化学、物理等实验,学生们不需要冒着真实实验中可能存在的安全问题的风险,就可以很好的学习到相应的知识。 比如,佛罗里达大学的V. Ram asunda ram 等开发了一个环境的虚拟野外实验室, 用来研究野外环境的属性,并刺激了学生的高层次认知技巧。 2、医疗卫生 医疗卫生是虚拟现实技术应用最早的领域之一, 在医护人员培训、手术方案的验证、心理治疗等方面的应用得到了较大的进展。对于医疗而言, 疾病诊断是关键的第一步。比如, 对于心、肺杂音形成的部位、机理以及在心电图上的表现等内容,教师讲解、描述起来非常困难。利用虚拟现实技术可以模拟心、肺疾病病人的各种体征, 在虚拟人身上的相应部位随意进行触诊、听诊训练, 这种见习过程既有真实感, 又不受时间限制,学习的效果很好。 比如,早在1998年,Systems公司就推出了一种支气管镜检仿真器, 该仿真器提供了一定的触觉反馈,并模拟了一定的训练想定,测试表明该系统有助于提高培训人员的技术水平。 3、科学可视化 科学可视化是指运用计算机图形学和图像处理技术, 将科学计算过程中或者是计算结果的数据转换为图形或图像,在屏幕上显示出来并进行交互式处理的技术或方法。对于很多复杂的分子结构、三维体数据和繁杂的地震数据等,传统的图像分析技术和二维表现方法很难对其进行识别和度量,而使用虚拟现实技术则可以将计算过程以动态、立体的形式来表现, 结果形象生动,用户可以沉浸在虚拟环境之中,使用自然直观的方式与虚拟的科学世界交互,大大提高了数据解释水平和推测准确性,加深了对科学数据的理解。 餐饮界 美国社交新闻网站Reddit曝光了一则餐厅的海报,这家名为的餐厅里没有菜单,顾客需要通过完成VR游戏来获取食材,餐厅根据顾客获取的材料来制作食物,而在游戏中一无所获的顾客只能吃点树根和树叶。 ▲ Henry Dinosaur餐厅海报 “太酷了!我喜欢!”网友们对该创意大感兴趣,纷纷留言,“像第一次约会一样美妙! ”还有人恶作剧道,“我很好奇,如果我把枪口对准了自己,送上餐桌的会是什么食物呢?” 对于“VR+餐饮”的尝试,HenryDinosaur并不是第一个,也绝非最后一个。 化妆品 兰蔻在北京的汉光广场进行了一次别开生面的体验,玩出了新的花样。兰蔻这次放的大招就是用VR技术体验DIY护肤的乐趣。只要带上VR眼镜就能感受亲临法国小花园的画面感,更厉害的是,配上游戏把柄,还能采摘护肤品所需的原料 ▲ 兰蔻VR花园实验室 逐渐成为中坚力量的80后和初入职场的90后逐渐成为现代社会的主要消费群体,但他们的消费模式也在悄然改变,比起传统的百货商店,年轻消费者更趋向于网购。面对瞬息万变的营销时代和消费观念,只有不断的创新不断的迎合改变才能在转型与变革中迎来新的春天。VR带来的交互式体验感觉,身临其境的沉浸式代入感,或许就是下一个改变世界的“Iphone” 实景地图 某天,你在美团或者大众点评看到一家评价非常好的餐厅,“色眯眯”的想要去喂饱自己“说饿就饿”的胃。 然后,你就跟着导航出发,地图上已经显示到达,可你怎么也找不到餐厅的大门……这种体验我相信每个人都会有 为了给用户一个全新的餐厅搜索体验,美国知名科技公司YouVisit推出了一款名为YouVisit Restaurants的免费手机应用,用户将其下载并安装在手机上,配合三星 Gear VR眼镜即可使用。 通过和YouVisit Restaurants合作,餐厅能够在高度拟真的街景中清晰的标注出自己的位置,这使得饥肠辘辘的用户能够方便快捷的找到餐厅。用户戴上VR眼镜后,就像来到了餐厅一样,能够“亲眼”看到餐厅的美食,“亲身”体验到餐厅的用餐环境。 和传统的图文展示相比,VR技术能够把用户带入虚拟的场景中,并由视觉带动全身的体验,让消费者完全沉浸其中,由此带来的感知也更加的立体化和形象化。 目前这个手机应用覆盖了纽约市的数百家餐厅,其中不乏众多高档餐厅,未来还将在美国其他区域全面推广。

    时间:2020-07-23 关键词: avr单片机

  • AVR单片机的学习思路,你需要收藏

    AVR单片机的学习思路,你需要收藏

    什么是AVR单片机?应该如何取学习?学习单片机的小伙伴都知道,衡量单片机性能好坏的指标主要有:可靠性好、功能强、高速度、低功耗和低价位,依靠这几点,作为单片机家族中性能较高的AVR,你真的能理解吗? AVR单片机产生背景 早期单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的 CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观。 AVR单片机的推出,彻底打破这种旧设计格局,废除了机器周期,抛弃复杂指令计算机(CISC)追求指令完备的做法;采用精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作码安排在一字之中(指令集中占大多数的单周期指令都是如此),取指周期短,又可预取指令,实现流水作业,故可高速执行指令。当然这种速度上的升跃,是以高可靠性为基础的。 AVR单片机结构 AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆(32个寄存器文件)和单体高速输入/输出的方案(即输入捕获寄存器、输出比较匹配寄存器及相应控制逻辑)。提高了指令执行速度(1Mips/MHz),克服了瓶颈现象,增强了功能;同时又减少了对外设管理的开销,相对简化了硬件结构,降低了成本。故AVR单片机在软/硬件开销、速度、性能和成本诸多方面取得了优化平衡,是高性价比的单片机。 AVR单片机特性 ①哈佛结构,具备1MIPS / MHz的高速运行处理能力; ②超功能精简指令集(RISC),具有32个通用工作寄存器,克服了如8051 MCU采用单一ACC进行处理造成的瓶颈现象; ③快速的存取寄存器组、单周期指令系统,大大优化了目标代码的大小、执行效率,部分型号FLASH非常大,特别适用于使用高级语言进行开发; ④作输出时与PIC的HI/LOW相同,可输出40mA(单一输出),作输入时可设置为三态高阻抗输入或带上拉电阻输入,具备10mA-20mA灌电流的能力; ⑤片内集成多种频率的RC振荡器、上电自动复位、看门狗、启动延时等功能,外围电路更加简单,系统更加稳定可靠; ⑥大部分AVR片上资源丰富:带E2PROM,PWM,RTC,SPI,USART,TWI,ISP,AD,Analog Comparator,WDT等; 从上面介绍来看,性价比高、内置丰富、直插封装、支持仿真,值得大家在开发中使用,是目前性价比最高的芯片之一。以上就是AVR单片机的解析,希望能给大家帮助。

    时间:2020-05-13 关键词: AVR 寄存器 avr单片机

  • PIC、AVR、51单片机怎么选择?优缺点分析

    PIC、AVR、51单片机怎么选择?优缺点分析

    51单片机和AVR最大的区别的是什么?学了51单片机也必须要学AVR单片机吗? 单片机诞生于20世纪70年代末,它是指一个集成在一块芯片上的完整计算机系统。单片机具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。如今运用最广泛的就是51,PIC,AVR单片机,那么它们之间有什么区别呢?我们来看看详情。 一、AVR单片机概述 AVR单片机也是Atmel公司的产品,最早的就是AT90系列单片机,现在很多AT90单片机都转型为Atmega系列和AtTIny系列,AVR单片机最大的特点是精简指令型单片机,执行速度,在相同的振荡频率下是8位MCU中最快的一种单片机。 AVR应用区域: 空调控制板 ,打印机控制板 ,智能电表,智能手电筒,LED控制屏,医疗设备,GPS。 二、51系列单片机概述 51系列单片机最早有Intel公司推出,主要有8031系列,8051系列。后来Atmel公司以8051的内核为基础推出了AT89系列单片机。它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。比较适合初学者的需要。 主要产品: Intel(英特尔)的:80C31、80C51、87C51,80C32、80C52、87C52等; ATMEL(艾德梅尔)的:89C51、89C52、89C2051,89S51(RC),89S52(RC)等; Philips(飞利浦)、华邦、Dallas(达拉斯)、Siemens(西门子)等公司的许多产品; STC(国产宏晶)单片机:89c51、89c52、89c516、90c516等众多品牌。 三、PIC单片机概述 PIC单片机是Microchip公司的产品,它也是一种精简指令型的单片机,指令数量比较少,中档的PIC系列仅仅有35条指令而已,低档的仅有33条指令。但是如果使用汇编语言编写PIC单片机的程序有一个致命的弱点就是PIC中低档单片机里有一个翻页的概念,编写程序比较麻烦。 随着单片机的发展,单片机在家用电器、工业自动化、生产过程控制、智能仪器仪表等领域的应用越来越广泛。然而处于同一电力系统中的各种电气设备通过电或磁的联系彼此紧密相连,相互影响,由于运行方式的改变,故障,开关操作等引起的电磁振荡会波及很多电气设备。这对我们单片机系统的可靠性与安全性构成了极大的威胁。单片机测控系统必须长期稳定、可靠运行,否则将导致控制误差加大,严重时会使系统失灵,甚至造成巨大损失。因此单片机的抗干扰问题已经成为不容忽视的问题。 四、AVR、51系列、PIC单片机的对比分析 1、 51系列单片机的优缺点分析 51系列优点之一是它从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,或布尔处理器。它的处理对象不是字或字节而是位。它不光能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。虽然其他种类的单片机也具有位处理功能,但能进行位逻辑运算的实属少见。 51系列在片内RAM区间还特别开辟了一个双重功能的地址区间,十六个字节,单元地址20H~2FH,它既可作字节处理,也可作位处理(作位处理时,合128个位,相应位地址为OOH~7FH),使用极为灵活。51系列的另一个优点是乘法和除法指令,这给编程也带来了便利。其中51单片机做大的缺点就是运行速度过慢。 2、PIC单片机的优缺点分析 运行速度快(指令周期约160~200nS),它能使程序存储器的访问和数据存储器的访问并行处理,这种指令流水线结构,在一个周期内完成两部分工作,一是执行指令,二是从程序存储器取出下一条指令,这样总的看来每条指令只需一个周期(个别除外),这也是高效率运行的原因之一。此外,它还具有低工作电压、低功耗、驱动能力强等特点。 PIC系列单片机的I/O口是双向的,其输出电路为CMOS互补推挽输出电路。I/O脚增加了用于设置输入或输出状态的方向寄存器,从而解决了51系列I/O脚为高电平时同为输入和输出的状态。当置位1时为输入状态,且不管该脚呈高电平或低电平,对外均呈高阻状态;置位0时为输出状态,不管该脚为何种电平,均呈低阻状态,有相当的驱动能力,低电平吸人电流达25mA,高电平输出电流可达20mA。相对于51系列而言,这是一个很大的优点,它可以直接驱动数码管显示且外电路简单。它的A/D为10位,能满足精度要求。具有在线调试及编程功能。 该系列单片机的专用寄存器)并不像51系列那样都集中在一个固定的地址区间内(80~FFH),而是分散在四个地址区间内,即存储体0(Bank0:00-7FH)、存储体1(Bankl:80-FFH)、存储体2(Bank2:100-17FH)、存储体3(Bank3:180-1FFH)。只有5个专用寄存器PCL、STATUS、FSR、PCLATH、INTCON在4个存储体内同时出现。在编程过程中,少不了要与专用寄存器打交道,得反复地选择对应的存储体,也即对状态寄存器STATUS的第6位(RPl)和第5位(RPO)置位或清零。这多少给编程带来了一些麻烦。对于上述的单片机,它的位指令操作通常限制在存储体0区间(00~7FH)。数据的传送和逻辑运算基本上都得通过工作寄存器w(相当于5l系列的累加器A)来进行,而51系列的还可以通过寄存器相互之间直接传送(如:MOV30H,20H;将寄存器20H的内容直接传送至寄存器30H中),因而PIC单片机的瓶颈现象比51系列还要严重,这在编程中很有感受。 3、AVR单片优缺点分析 AVR单片机其显著的特点为高性能、高速度、低功耗。它取消机器周期,以时钟周期为指令周期,实行流水作业。AVR单片机指令以字为单位,且大部分指令都为单周期指令。而单周期既可执行本指令功能,同时完成下一条指令的读取。通用寄存器一共32个(RO-R31),前16个寄存器(R0~R15)都不能直接与立即数打交道,因而通用性有所下降。而在5l系列中,它所有的通用寄存器(地址00-7FH)均可以直接与立即数打交道,显然要优于前者。 综合来看,AVR与51、PIC单片机相比具有一系列的优点,用通俗的说法主要体现在这几个方面: (1)在相同的系统时钟下AVR运行速度最快; (2)、所有AVR单片机的FLASH、EEPROM蓄存器都可以反复烧写、支持在ISP在线编程(烧写),入门费用非常少; (3)片内集成多种频率的RC振荡器、上电自动复位、看门狗、启动延时等功能,使得电路设计变得非常简单; (4)每个IO口作输出时都可以输出很强的高、低电平,作输入时IO口可以是高阻抗或者带上拉电阻; (5)片内具有丰富实用的资源,如AD模数器、DA数模器,丰富的中断源、SPI、USART、TWI通信口、PWM等等; (6)片内采用了先进的数据加密技术,大大的提高了破解的难度;(7)、片内FLASH空间大、品种多,引脚少的有8脚,多的有64脚等各种封装(8)、部分芯片的引脚兼容51系列,代换容易,如ATTIny2313兼容AT89C2051,ATmega8515/162兼容AT89S51等。 在抗干扰方面,主要还是和开发者的水平有关,而一定要说哪种单片机的抗干扰强,哪种弱,其实标准不一样,结果也不一样。人们普遍认为pic的抗干扰很强,但那是C系列,现在集成内部Flash的F系列要差许多,特别是早期出厂的几批。 avr系列单片机普遍被认为抗干扰性能是比较差的,曾经有人列出了一个表格,使用日本的测试方法,结果是avr排在了最后,其实对于一般的应用也没什么问题。各种单片机都有各自的优缺点,你可以根据自己熟悉的情况来选择合适自己的应用芯片。 对于开发者而言,根据项目的具体需求来具体选择。

    时间:2020-04-12 关键词: 单片机 avr单片机

  • 细数pic单片机,pic单片机与51/AVR单片机IO操作

    细数pic单片机,pic单片机与51/AVR单片机IO操作

    pic单片机使用较多,因此学习pic单片机的人数也相对较多。对于pic单片机,它的优点众所皆知。此文对pic单片机的讲解在于介绍pic单片机的IO口操作。但本文不仅仅局限于pic单片机,同样将对51单片、AVR单片机IO操作加以介绍,一起来了解下吧。 51单片机、AVR单片机和PIC单片机IO口结构的均不同,导致了IO口操作也不同。操作单片机IO口的目的是让单片机的管脚输出逻辑电平和读取单片机管脚的逻辑电平。 一.51单片机IO口的操作 51单片机IO口的结构比较简单,每个IO口只有一个IO口寄存器Px,而且这个寄存器可以位寻址,操作起来是所有单片机里最简单的,可以直接进行总线操作也可以直接进行位操作,这也是51单片机之所以成为经典的原因之一。下例的运行坏境为Keil软件,器件为AT89S52。 #i nclude sbit bv=P2^0;//定义位变量,关联P2.0管脚。sbit是C51编译器特有的数据类型 int main(void) { unsigned char pv; //位操作,以P2口的第0位为例: bv=0;//直接对P2口的第0位管脚输出低电平 bv=1;// 直接对P2口的第0位管脚输出高电平 //总线操作输出数据,以P2口为例: P2=0xaa;//直接赋值,P2口输出数据0xaa //总线操作读取数据,以P2口为例: pv=P2;//直接读取P2口的数据放到pv变量 return 0; } 二.AVR单片机IO口的操作 AVR单片机IO口的结构比较复杂,每个IO由三个寄存器组成:IO口数据寄存器POTx、IO口方向寄存器DDRx和IO口输入引脚寄存器PINx。AVR单片机IO口操作相当麻烦,需要设置IO口的方向,而且只能进行总线操作,如果进行位操作还需要掌握编程技巧---通过逻辑运算来实现位操作。下例的运行坏境为ICCAVR软件,器件为ATMEGA16。 #i nclude int main(void) { unsigned char pv; //总线操作输出数据,以D口为例: DDRD=0xff;//先设置D口的方向为输出方式(相应位设0为输入,设1为输出) PORTD=0xaa;//赋值,D口输出数据0xaa //总线操作读取数据,以D口为例: DDRD=0x00//先设置D口的方向为输入方式(相应位设0为输入,设1为输出) PORTD=0xff;//再设置D口为带上拉电阻(相应位设0为无上拉,设1为有上拉),才能准确读取数据 pv=PIND;//读取D口的PIND寄存器的数据放到pv变量 //位操作,以D口的第0位为例: DDRD|=0x01;//先设置D口第0位的方向为输出方式,其他位的方向不变 PORTD|=0x01;//D口的第0位输出高电平,技巧:使用位或运算,其他位不变 PORTD&=~0x01;//D口的第0位输出低电平,技巧:使用取反位与运算,其他位不变 return 0; } 三.PIC单片机IO口的操作 PIC单片机IO口的结构也比较复杂,每个IO由两个寄存器组成:IO口数据寄存器PORTx、和IO口方向寄存器TRISx。操作起来比AVR单片机简单一些,同样需要设置IO的方向,可以进行总线操作也可以进行位操作。下例的运行坏境为MPLAB IDE软件,器件为PIC16F877。 #i nclude __CONFIG(0x3B32); int main(void) { unsigned char pv; //总线操作输出数据,以B口为例: TRISB=0x00;//先设置B口的方向为输出方式(相应位设0为输出,设1为输入) PORTB=0xaa;//赋值,B口输出数据0xaa //总线操作读取数据,以B口为例: TRISB=0xff;//先设置B口的方向为输入方式(相应位设0为输出,设1为输入) pv=PORTB;//读取B口的数据放到pv变量 //位操作,以B口的第0位为例: TRISB=0xfe;//先设置B口的第0位(RB0)的方向为输出方式(相应位设0为输出,设1为输入) RB0=1;//B口的第0位输出高电平 RB0=0;//B口的第0位输出低电平 return 0; } 经过比较这三种单片机IO口的操作,我们知道,51单片机IO口结构简单,操作简单,但没有高电平大电流驱动能力;AVR和PIC单片机IO 口结构复杂,操作麻烦,但具备高电平大电流驱动能力。换句话说,单片机的IO口的功能越强大结构越复杂操作越繁琐。 以上便是此次小编带来的“pic单片机”相关内容,通过本文,希望大家对pic单片机、51单片机以及AVR单片机的IO口操作具备一定的认知。如果你喜欢本文,不妨持续关注我们网站哦,小编将于后期带来更多精彩内容。最后,十分感谢大家的阅读,have a nice day!

    时间:2019-12-30 关键词: pic单片机 io操作 avr单片机

  • pic单片机也可以很简单,搞定pic单片机IO口操作

    对于pic单片机的学习,很多朋友总是能充满激情,不断利用闲余时间研究pic单片机的各类技术。而谈及pic单片机,必须牵扯至51、AVR单片机。因此本文中,将探讨pic单片机以及51、AVR单片机对于IO口的操作。对于本文,希望大家认真研读,以在pic单片机的学习之路上更为精进。 一.51单片机IO口的操作 51单片机IO口的结构比较简单,每个IO口只有一个IO口寄存器Px,而且这个寄存器可以位寻址,操作起来是所有单片机里最简单的,可以直接进行总线操作也可以直接进行位操作,这也是51单片机之所以成为经典的原因之一。下例的运行坏境为Keil软件,器件为AT89S52。 #i nclude sbit bv=P2^0;//定义位变量,关联P2.0管脚。sbit是C51编译器特有的数据类型 int main(void) { unsigned char pv; //位操作,以P2口的第0位为例: bv=0;//直接对P2口的第0位管脚输出低电平 bv=1;// 直接对P2口的第0位管脚输出高电平 //总线操作输出数据,以P2口为例: P2=0xaa;//直接赋值,P2口输出数据0xaa //总线操作读取数据,以P2口为例: pv=P2;//直接读取P2口的数据放到pv变量 return 0; } 二.AVR单片机IO口的操作 AVR单片机IO口的结构比较复杂,每个IO由三个寄存器组成:IO口数据寄存器POTx、IO口方向寄存器DDRx和IO口输入引脚寄存器PINx。AVR单片机IO口操作相当麻烦,需要设置IO口的方向,而且只能进行总线操作,如果进行位操作还需要掌握编程技巧---通过逻辑运算来实现位操作。下例的运行坏境为ICCAVR软件,器件为ATMEGA16。 #i nclude int main(void) { unsigned char pv; //总线操作输出数据,以D口为例: DDRD=0xff;//先设置D口的方向为输出方式(相应位设0为输入,设1为输出) PORTD=0xaa;//赋值,D口输出数据0xaa //总线操作读取数据,以D口为例: DDRD=0x00//先设置D口的方向为输入方式(相应位设0为输入,设1为输出) PORTD=0xff;//再设置D口为带上拉电阻(相应位设0为无上拉,设1为有上拉),才能准确读取数据 pv=PIND;//读取D口的PIND寄存器的数据放到pv变量 //位操作,以D口的第0位为例: DDRD|=0x01;//先设置D口第0位的方向为输出方式,其他位的方向不变 PORTD|=0x01;//D口的第0位输出高电平,技巧:使用位或运算,其他位不变 PORTD&=~0x01;//D口的第0位输出低电平,技巧:使用取反位与运算,其他位不变 return 0; }   三.PIC单片机IO口的操作 PIC单片机IO口的结构也比较复杂,每个IO由两个寄存器组成:IO口数据寄存器PORTx、和IO口方向寄存器TRISx。操作起来比AVR单片机简单一些,同样需要设置IO的方向,可以进行总线操作也可以进行位操作。下例的运行坏境为MPLAB IDE软件,器件为PIC16F877。 #i nclude __CONFIG(0x3B32); int main(void) { unsigned char pv; //总线操作输出数据,以B口为例: TRISB=0x00;//先设置B口的方向为输出方式(相应位设0为输出,设1为输入) PORTB=0xaa;//赋值,B口输出数据0xaa //总线操作读取数据,以B口为例: TRISB=0xff;//先设置B口的方向为输入方式(相应位设0为输出,设1为输入) pv=PORTB;//读取B口的数据放到pv变量 //位操作,以B口的第0位为例: TRISB=0xfe;//先设置B口的第0位(RB0)的方向为输出方式(相应位设0为输出,设1为输入) RB0=1;//B口的第0位输出高电平 RB0=0;//B口的第0位输出低电平 return 0; } 经过比较这三种单片机IO口的操作,我们知道,51单片机IO口结构简单,操作简单,但没有高电平大电流驱动能力;AVR和PIC单片机IO 口结构复杂,操作麻烦,但具备高电平大电流驱动能力。换句话说,单片机的IO口的功能越强大结构越复杂操作越繁琐。 以上便是小编带来的全部内容,希望大家对此次小编带来的内容比较满意。

    时间:2019-09-10 关键词: 51单片机 pic单片机 avr单片机

  • AVR单片机对开关电源的控制方法

    单片机控制开关电源,单从对电源输出的控制来说,可以有几种控制方式。 其一是 单片机 输出一个电压(经DA芯片或PWM方式),用作电源的基准电压。这种方式仅仅是用单片机代替了原来的基准电压,可以用按键输入电源的输出电压值,单片机并没有加入电源的反馈环,电源电路并没有什么改动。这种方式最简单。 其二是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,调整DA的输出,控制PWM芯片,间接控制电源的工作。这种方式单片机已加入到电源的反馈环中,代替原来的比较放大环节,单片机的程序要采用比较复杂的PID算法。 其三是 单片机 扩展AD,不断检测电源的输出电压,根据电源输出电压与设定值之差,输出PWM波,直接控制电源的工作。这种方式单片机介入电源工作最多。 第三种方式是最彻底的 单片机 控制开关电源,但对单片机的要求也最高。要求单片机运算速度快,而且能够输出足够高频率的PWM波。这样的单片机显然价格也高。 DSP类 单片机 速度够高,但目前价格也很高,从成本考虑,占电源成本的比例太大,不宜采用。 廉价 单片机 中,AVR系列最快,具有PWM输出,可以考虑采用。但AVR单片机的工作频率仍不够高,只能是勉强使用。下面我们具体计算一下AVR单片机直接控制开关电源工作可以达到什么水平。 AVR 单片机 中,时钟频率最高为16MHz。如果PWM分辨率为10位,那么PWM波的频率也就是开关电源的工作频率为16000000/1024=15625(Hz),开关电源工作在这个频率下显然不够(在音频范围内)。那么取PWM分辨率为9位,这次开关电源的工作频率为16000000/512=32768(Hz),在音频范围外,可以用,但距离现代开关电源的工作频率还有一定距离。 不过必须注意,9位分辨率是说功率管导通-关断这个周期中,可以分成512份,单就导通而言,假定占空比为0.5,则只能分成256份。考虑到脉冲宽度与电源的输出并非线性关系,需要至少再打个对折,也就是说,电源输出最多只能控制到1/128,无论负载变化还是网电源电压变化,控制的程度只能到此为止。 还要注意,上面所述只有一个PWM波,是单端工作。如果要推挽工作(包括半桥),那就需要两个PWM波,上述控制精度还要减半,只能控制到约1/64。对要求不高的电源例如电池充电,可以满足使用要求,但对要求输出精度较高的电源,这就不够了。 综上所述,AVR 单片机 只能很勉强地使用在直接控制PWM的方式中。 但是上列第二种控制方式,即 单片机 调整DA的输出,控制PWM芯片,间接控制电源的工作,却对单片机没有那么高的要求,51系列单片机已可胜任。而51系列单片机的价格比AVR还是低一些。 网友coocle曾发表他的看法:“ 单片机 控制开关电源的缺点在于动态响应不够,优点是设计的弹性好,如保护和通讯,我的想法是单片机和pwm芯片相结合,现在的一般单片机的pwm输出的频率普遍还不是太高,频率太高,想要实现单周期控制也很难。所以我觉得单片机可是完成一些弹性的模拟给定,后面还有pwm芯片完成一些工作。” 无独有偶,在电子电源综合区中有篇原创文章《DPWM电路的研究》,也是用数字电路输出PWM波直接控制开关电源工作。他是用CPLD再加 单片机 进行控制。众所周知CPLD的价格以及开发难度绝非单片机可比,那么他为什么要这样做?原因如作者所说,由于单片机的PWM宽度小,导致精度低,不能满足系统的要求。作者又说,在这些情况下,应用片外PWM电路无疑是一种理想的选择。他选择CPLD芯片来实现PWM。我则建议:还是用开关电源原来的控制芯片来实现。不但价格低,而且容易实现单周期电流检测等保护功能。我们大可不必为数字控制而数字控制。

    时间:2019-05-20 关键词: 开关电源 avr单片机

  • 基于AVR单片机的AT24C01-512eeprom读写程序

    针对AT24Cxx系列eeprom存储器,写的时候有越页功能,不用考虑页边界,I2C用软件模拟实现,完善中…#define SDA1() PORTC|=1

    时间:2019-01-14 关键词: eeprom 读写程序 at24c01 avr单片机

  • AVR单片机nRF24L01发送接收驱动程序

    #include "iom16v.h"#include "macros.h"#include "12864.h"//------------------------------------------------------------------------------//spi标志#define DDR_SPI DDRB#define DD_MOSI 5#define DD_MISO 6#define DD_SCK 7#define DD_SS 4#define CE PB3#define IRQ PB2//--------------------------------NRF24L01接口定义--------------------------------//------------------------------------------------------------------------------//#define NRF24L01_MISOPB6//输入0#defineHign_24L01_MISOPORTB|=(1

    时间:2019-01-14 关键词: 驱动程序 nrf24l01 发送接收 avr单片机

  • AVR单片机(学习ing)—(十)、ATMEGA16的同步串行接口SPI—02

    1)那就是在之前的介绍中说过,在说一遍~~主机和从机的两个移位寄存器可以被认为是一个公开的16位环形移位寄存器,当数据从主机移向从机时,同时从机饿数据也向相反的放向移向主机。这就意味着在一个以为周期内,主机和从机的数据进行了交换。(不过这个例子里没有用到这个,下个会用到~~呵呵~~),早知道对谁都好~~2)配置为SPI主机时,SPI接口不自动控制SS引脚,必须由用户软件来处理。还有配置为从机时,只要SS引脚为高,SPI接口将一直保持睡眠状态,并保持MISO为三态。(这个章节的第一篇文章有详细的介绍~~自己可以看看~~)3)SPI系统的发送方向只有一个缓冲器,而接收方向有两个缓冲器。也就是说,在发送时一定要等到移位过程全部结束后才能对SPI数据寄存器执行写操作(这里也就是要有这个语句:while(!(SPSR&(1

    时间:2019-01-10 关键词: spi atmega16 同步串行接口 avr单片机

  • AVR单片机—(五)、ATMEGA16的USART与PC机串行通信—02

    五、ATMEGA16的USART与PC机串行通信五—(02)、PC机发送字符给单片机,然后用液晶显示发送的字符~~~这章节也是相对挺简单的~~直接上图片吧~~基本上就这么点吧~~然后就是程序了,这里我只是粘贴一下重要的程序~~,有的程序在以前的文章中用过了,我就不粘贴了~~比如说是lcdinit这个.c和.h文件吧~~都是以前就贴出来的,这里我就不说了~IAR5_2.c文件://------------------------------------------------------------------------------//这个实验进行多个字节的发送和接收//单片机收到多个字节后既将其回传给PC,同时送入数组暂存,最后在液晶模块上显示出来。#include"ioavr.h"#include"delayics.h"#include"intrinsics.h"#include"usart.h"#include"lcdinit.h"//------------------------------------------------------------------------------uchar__flash title[]="Atmega16 LCD DIS";uchar data_send[5];//------------------------------------------------------------------------------//端口初始化函数void port_init(){DDRA=0XFF;PORTA=0XFF;DDRB=0XFF;PORTB=0XFF;DDRD=0X02;PORTD=0XFF;}//------------------------------------------------------------------------------//USART初始化函数void usart_init(){UCSRA=0X02;//置位U2X,倍速发送UCSRC=0X06;//选择字符长度为8位UBRRL=0X67;//设置波特率9600,查看datesheetUBRRH=0X00;UCSRB=0X18;//发送使能、接收使能}//------------------------------------------------------------------------------//芯片初始化函数void device_init(){port_init();usart_init();}//------------------------------------------------------------------------------//mainvoid main(){uchar temp;uchar s=0;device_init();lcd_init();lcd_display_string(0x80,title,16);delay_s(1);while(1){while(s

    时间:2019-01-07 关键词: 串行通信 usart atmega16 avr单片机

  • AVR单片机(学习ing)—(九)、ATMEGA16的模数转换器—01

    九、ATMEGA16的模数转换器九—(01)、ATMEGA16的模数转换器的介绍1、介绍1)特点:? 10 位 精度? 0.5 LSB 的非线性度? ± 2 LSB 的绝对精度? 65 - 260 μs 的转换时间? 最高分辨率时采样率高达15 kSPS? 8 路复用的单端输入通道? 7 路差分输入通道? 2 路可选增益为10x 与200x 的差分输入通道? 可选的左对齐ADC 读数? 0 - VCC 的 ADC 输入电压范围? 可选的2.56V ADC 参考电压? 连续转换或单次转换模式? 通过自动触发中断源启动ADC 转换? ADC 转换结束中断? 基于睡眠模式的噪声抑制器Note: 1. 在PDIP封装下的差分输入通道器件未经测试。只保证器件在TQFP 与MLF封装下正常工作。2)介绍和框图ATmega16有一个10位的逐次逼近型ADC。ADC与一个8通道的模拟多路复用器连接,能对来自端口A 的8 路单端输入电压进行采样。单端电压输入以0V (GND) 为基准。器件还支持16 路差分电压输入组合。两路差分输入(ADC1、ADC0 与ADC3、ADC2)有可编程增益级,在A/D 转换前给差分输入电压提供0dB(1x)、20dB(10x) 或46dB(200x)的放大级。七路差分模拟输入通道共享一个通用负端(ADC1), 而其他任何ADC 输入可做为正输入端。如果使用1x 或10x 增益,可得到8 位分辨率。如果使用200x 增益,可得到7 位分辨率。ADC 包括一个采样保持电路,以确保在转换过程中输入到ADC 的电压保持恒定。ADC 的框图如 Figure 98 所示。ADC 由AVCC 引脚单独提供电源。AVCC 与VCC 之间的偏差不能超过± 0.3V标称值为2.56V 的基准电压,以及AVCC,都位于器件之内。基准电压可以通过在AREF引脚上加一个电容进行解耦,以更好地抑制噪声。2、ADC的工作过程ADC 通过逐次逼近的方法将输入的模拟电压转换成一个10 位的数字量。最小值代表GND,最大值代表AREF引脚上的电压再减去1 LSB。通过写ADMUX寄存器的REFSn位可以把AVCC 或内部2.56V 的参考电压连接到AREF 引脚。在AREF 上外加电容可以对片内参考电压进行解耦以提高噪声抑制性能。模拟输入通道与差分增益可以通过写ADMUX 寄存器的MUX 位来选择。任何ADC 输入引脚,像GND 及固定能隙参考电压,都可以作为ADC 的单端输入。ADC 输入引脚可选做差分增益放大器的正或负输入。如果选择差分通道,通过选择被选输入信号对的增益因子得到电压差分放大级。然后放大值成为ADC 的模拟输入。如果使用单端通道,将绕过增益放大器。通过设置ADCSRA 寄存器的ADEN 即可启动ADC。只有当ADEN 置位时参考电压及输入通道选择才生效。ADEN 清零时ADC 并不耗电,因此建议在进入节能睡眠模式之前关闭ADC。ADC转换结果为10位,存放于ADC数据寄存器ADCH及ADCL中。默认情况下转换结果为右对齐,但可通过设置ADMUX 寄存器的ADLAR 变为左对齐。如果要求转换结果左对齐,且最高只需8 位的转换精度,那么只要读取ADCH 就足够了。否则要先读ADCL,再读ADCH,以保证数据寄存器中的内容是同一次转换的结果。一旦读出ADCL, ADC 对数据寄存器的寻址就被阻止了。也就是说,读取ADCL 之后,即使在读ADCH 之前又有一次ADC 转换结束,数据寄存器的数据也不会更新,从而保证了转换结果不丢失。ADCH 被读出后, ADC 即可再次访问ADCH 及ADCL 寄存器。ADC转换结束可以触发中断。即使由于转换发生在读取ADCH与ADCL之间而造成ADC无法访问数据寄存器,并因此丢失了转换数据,中断仍将触发。3、启动一次转换向 ADC 启动转换位ADSC 位写"1” 可以启动单次转换。在转换过程中此位保持为高,直到转换结束,然后被硬件清零。如果在转换过程中选择了另一个通道,那么ADC 会在改变通道前完成这一次转换。ADC转换有不同的触发源。设置ADCSRA寄存器的ADC自动触发允许位ADATE可以使能自动触发。设置ADCSRB 寄存器的ADC 触发选择位ADTS 可以选择触发源( 见触发源列表中对ADTS 的描述)。当所选的触发信号产生上跳沿时, ADC 预分频器复位并开始转换。这提供了一个在固定时间间隔下启动转换的方法。转换结束后即使触发信号仍然存在,也不会启动一次新的转换。如果在转换过程中触发信号中又产生了一个上跳沿,这个上跳沿将被忽略。即使特定的中断被禁止或全局中断使能位为0,中断标志仍将置位。这样可以在不产生中断的情况下触发一次转换。但是为了在下次中断事件发生时触发新的转换,必须将中断标志清零。使用ADC 中断标志作为触发源,可以在正在进行的转换结束后即开始下一次ADC 转换。之后ADC 便工作在连续转换模式,持续地进行采样并对ADC 数据寄存器进行更新。第一次转换通过向ADCSRA 寄存器的ADSC 写1 来启动。在此模式下,后续的ADC 转换不依赖于ADC 中断标志ADIF 是否置位。如果使能了自动触发,置位ADCSRA 寄存器的ADSC 将启动单次转换。ADSC 标志还可用来检测转换是否在进行之中。不论转换是如何启动的,在转换进行过程中ADSC 一直为1。4、预分频及ADC 转换时序在默认条件下,逐次逼近电路需要一个从50 kHz到200 kHz的输入时钟以获得最大精度。如果所需的转换精度低于10 比特,那么输入时钟频率可以高于200 kHz,以达到更高的采样率。ADC 模块包括一个预分频器,它可以由任何超过100 kHz 的CPU 时钟来产生可接受的ADC 时钟。预分频器通过ADCSRA 寄存器的ADPS 进行设置。置位ADCSRA 寄存器的ADEN 将使能ADC,预分频器开始计数。只要ADEN 为1,预分频器就持续计数,直到ADEN 清零。ADCSRA寄存器的ADSC置位后,单端转换在下一个ADC时钟周期的上升沿开始启动。差分转换时序见P197“ 差分增益信道” 。正常转换需要13 个ADC 时钟周期。为了初始化模拟电路,ADC 使能(ADCSRA 寄存器的ADEN 置位) 后的第一次转换需要25 个ADC 时钟周期。在普通的ADC 转换过程中,采样保持在转换启动之后的1.5 个ADC 时钟开始;而第一次ADC转换的采样保持则发生在转换启动之后的13.5 个ADC时钟。转换结束后,ADC结果被送入ADC 数据寄存器,且ADIF 标志置位。ADSC 同时清零( 单次转换模式)。之后软件可以再次置位ADSC 标志,从而在ADC 的第一个上升沿启动一次新的转换。使用自动触发时,触发事件发生将复位预分频器。这保证了触发事件和转换启动之间的延时是固定的。在此模式下,采样保持在触发信号上升沿之后的2 个ADC 时钟发生。为了实现同步逻辑需要额外的3 个CPU 时钟周期。如果使用差分模式,加上不是由ADC 转换结束实现的自动触发,每次转换需要25 个ADC 时钟周期。因为每次转换结束后都要关闭ADC 然后又启动它。在连续转换模式下,当ADSC 为1 时,只要转换一结束,下一次转换马上开始。转换时间请见 Table 81。5、差分增益信道当使用差分增益通道,需要考虑转换的确定特征。差分转换与内部时钟CKADC2 同步等于ADC 时钟的一半。同步是当ADC 接口在CKADC2边沿出现采样与保持时自动实现的。当CKADC2 为低时,通过用户启动转换( 即,所有的单次转换与第一次连续转换) 将与单端转换使用的时间( 接着的预分频后的13 个 ADC 时钟周期)。当 CKADC2 为高时,由于同步机制,将会使用14 个 ADC 时钟周期。在连续转换模式时,一次转换结束后立即启动新的转换,而由于CKADC2 此时为高,所有的自动启动( 即除第一次外) 将使用14 个 ADC 时钟周期。在所有的增益设置中,当带宽为4 kHz 时增益级最优。更高的频率可能会造成非线性放大。当输入信号包含高于增益级带宽的频率时,应在输入前加入低通滤波器。注意,ADC时钟频率不受增益级带宽限制。比如,不管通道带宽是多少, ADC 时钟周期为6 μs,允许通道采样率为12 kSPS。如果使用差分增益通道且通过自动触发启动转换,在转换时ADC 必须关闭。当使用自动触发时, ADC 预分频器在转换启动前复位。由于在转换前的增益级依靠稳定的ADC 时钟,该转换无效。在每次转换( 在寄存器 ADCSRA 的ADEN 位中 写 “0” 接着为“1”),通过禁用然后重使能ADC,只执行扩展转换。扩展转换结果有效。6、改变通道和基准源ADMUX寄存器中的MUXn及REFS1:0通过临时寄存器实现了单缓冲。CPU可对此临时寄存器进行随机访问。这保证了在转换过程中通道和基准源的切换发生于安全的时刻。在转换启动之前通道及基准源的选择可随时进行。一旦转换开始就不允许再选择通道和基准源了,从而保证ADC 有充足的采样时间。在转换完成(ADCSRA 寄存器的ADIF 置位) 之前的最后一个时钟周期,通道和基准源的选择又可以重新开始。转换的开始时刻为ADSC置位后的下一个时钟的上升沿。因此,建议用户在置位ADSC 之后的一个ADC 时钟周期里,不要操作ADMUX 以选择新的通道及基准源。使用自动触发时,触发事件发生的时间是不确定的。为了控制新设置对转换的影响,在更新ADMUX 寄存器时一定要特别小心。若ADATE及ADEN都置位,则中断事件可以在任意时刻发生。如果在此期间改变ADMUX寄存器的内容,那么用户就无法判别下一次转换是基于旧的设置还是最新的设置。在以下时刻可以安全地对ADMUX 进行更新:1. ADATE 或ADEN 为 02. 在转换过程中,但是在触发事件发生后至少一个ADC 时钟周期3. 转换结束之后,但是在作为触发源的中断标志清零之前如果在上面提到的任一种情况下更新ADMUX,那么新设置将在下一次ADC 时生效。当改变差分通道时要特别注意。一旦选定差分通道,增益级要用125 μs 来稳定该值。因此在选定新通道后的125 μs 内不应启动转换。或舍弃该时间段内的转换结果。

    时间:2019-01-07 关键词: 模数转换器 atmega16 avr单片机

  • AVR单片机使用内部上拉电阻的疑问

    看了M16手册上对I/O端口的说明,其中说设置DDXn=0,PORTn=1,PUD=0.就可以使用内部上拉电阻了。既然可以这么用,那么在使用按键电路,低电平有效的时候,就可以用内部上拉,为何还用外接上拉?曾问了一个网友,他说,内部上拉电阻小些,抗干扰不好,如果按键需要外接线还是有外部电阻好些。所以请问一下BBS友人,AVR设置内部上拉的目的何在?对于外部上拉和内部上拉又应该如何选择?1、内部上拉是一个阻值比较大的固定电阻。在强干扰场合,或引线比较长的情况,外加较小阻值的上拉电阻,可以提高抗干扰能力。2、技术总监awey说的很有道理,我对这个深有体会。我做EMC的时候,有干扰的情况下,按键会被误触发。再接一个1K左右的上拉电阻,和单片机里面的相当于并联,这样的话电阻小了,电流就相应增大了,电流大,抗干扰就强。这是我的体会,各位还有什么高见?一起交流

    时间:2019-01-04 关键词: 内部上拉电阻 avr单片机

  • AVR单片机—(五)、ATMEGA16的USART与PC机串行通信—03

    五、ATMEGA16的USART与PC机串行通信五—(03)、PC机发送控制指令控制单片机工作~(这个控制还是比较简单的~~,不过个人认为还是有水平的~)还是先上图片~~,然后程序,程序师模块化的,我尽量贴全点~~然后就是程序了IAR5_2.c//------------------------------------------------------------------------------//控制指令的定义(个人感觉这个才是真正应用呢~~给力~)//上位机界面中,用户需要输入控制下位机的指令//由于传送的数据比较简单,因此控制指令也可定义的相对简单一些((*^__^*) 嘻嘻……,那本书上写的哦~)//规定:“(x)”//指令起始符“(”:表示一条控制指令的开始。//输出电压值“X”:X=0.00~5.00,表示选择的输出电压值。//指令结束符“)“:单片机收到此指令后,控制指令结束。//这里发送采用中断方式,接收采用查询方式!!!符合常用的工作模式,大大提高单片机的工作效率#include"ioavr.h"#include"intrinsics.h"#include"lcdinit.h"#include"usart.h"#include"delayics.h"//------------------------------------------------------------------------------uchar __flash title[]="Virtal & PWM Test";uchar flag_recever;//定义完成接收标志uchar flag;//定义接收标志uchar count_recever;//定义接收计数器uchar temp;uchar wide;//定义控制脉冲宽度的变量uintvoltage;//定义整形变量uchar a[]={0,0,0};//定义数组并初始化为0//------------------------------------------------------------------------------//端口初始化函数void port_init(){DDRA=0XFF;PORTA=0XFF;DDRB=0XFF;PORTB=0XFF;DDRD=0X82;PORTD=0X7F;}//------------------------------------------------------------------------------//定时器2初始化函数void timer2_init(){TCNT2=0X01;OCR2=0XFF;TCCR2=0X61;//相位修正PWM,启动定时器2(不分频)}//------------------------------------------------------------------------------//USART初始化函数void usart_init(){UCSRA=0X82;//置位RXC(USART接受结束标志),倍速UCSRC=0X06;//选择为发送、接收8为数据位UBRRL=0X67;UBRRH=0X00;//设置波特率9600UCSRB=0X98;//置位RXCIE,使能接受结束中断,发送使能,接收使能}//------------------------------------------------------------------------------//芯片初始化函数void device_init(){port_init();timer2_init();usart_init();}//------------------------------------------------------------------------------//mainvoid main(){uint x;device_init();lcd_init();lcd_display_string(0x80,title,16);delay_s(1);SREG=0x80;//开总中断while(1){if(flag==1)//执行中断程序后,接收数据,falg置位{SREG=0x00;usart_send_char(temp);//将收到的数据发送回给PCswitch(count_recever)//判断收到的个数{//----------------------------------------------------------------------case 0://当收到起始命令时if(temp=='(')count_recever=1;elseflag_recever=0;break;//----------------------------------------------------------------------case 1://当收到第二位数据时if((temp>=0x30)&&(temp=0x30)&&(temp=0x30)&&(temp

    时间:2019-01-04 关键词: 串行通信 usart atmega16 avr单片机

  • AVR单片机—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

    三、ATMEGA16驱动16*2点阵字符液晶三—(01)、ATMEGA16驱动16*2点阵字符液晶这篇文章只是简单的驱动并让1602显示,并没有用到读数据和读状态的部分,也没有用到读写检测(要是感兴趣的话还是写写这里吧)1、那就是用什么样的液晶,又该怎么驱动,现在把datasheet的部分图片贴出来,看看,so easy~~的1)就是它的引脚说明(个人感觉要想具体了解还是在网上搜搜吧~~我这里也就是简单了解~)这里也就三个引脚需要注意就是RS、R/W、E,这三个引脚,传输数据的必用引脚,别的就不用详细介绍了吧~~(后面的程序就是根据这三个引脚的时序图来写的!2)(说实话,我真的不太想详细说,因为好多人对于驱动这个1602来说太简单了~~所以我尽量简洁)基本操作时序1读状态:输入:RS=L,RW=H,E=H输出:D0~D7=状态字2写指令:输入:RS=L,RW=L,D0~D7=指令码,E=H输出:无3读数据:输入:RS=H,RW=H,E=好输出:D0~D7=数据4写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲 输出:无注意,由于咱们不注重读,所以上面重要看的就是写时序,还有就是时序参数!!!!(这里我就不用太多解释了吧,但是要注意一点,1602吗,咱就是让它来显示数据的,那些什么读状态啊,还有读数据什么的,暂时是用不到的,所以,这里暂时就不予以介绍了,所以呢,咱就直接用写指令和写数据,仔细看看会发现写指令和写数据就只有一点不一样哦~~~~就是RS为低为写指令;反之~~~)3)状态字说明后面说的读写检测什么的暂时是用不到的,那是因为咱们给它一个延时,不就哦了,不过要是想用那就好好看看datasheet喽~~~~(大实话:状态字还不怎么会用,要是会了,以后回帖~~哈哈)4)RAM地址映射图5)指令说明(这里才是重点~~上面的只要找到datasheet就知道了~~~啊~~烦死了)5.1初始化设置:5.1.1显示模式设置:就是写指令呗0x385.1.2显示开关及光标设置这个很简单的,我还看过郭天祥老师的教学视频~~他就是拿这个讲的~~呵呵5.2数据控制(累死了,真的不想写了,直接上图片吧~~)图片里面的读数据和写数据就是那个读时序和写时序,上边都有了,我就不贴了~~好了我仿真的图片最后就是程序了~~//------------------------------------------------------------------------------//LCD1602的显示程序#include"ioavr.h"#include"intrinsics.h"//------------------------------------------------------------------------------typedef unsigned char uchar;typedef unsigned intuint;//------------------------------------------------------------------------------//RS、RW、EN引脚输出高低电平的宏定义#define lcd_rs_1PORTB|=1#define lcd_rs_0PORTB&=~1#define lcd_rw_1PORTB|=2#define lcd_rw_0PORTB&=~2#define lcd_en_1PORTB|=4#define lcd_en_0PORTB&=~4//------------------------------------------------------------------------------#define data_port PORTA#define busy0x80#define xtal8//------------------------------------------------------------------------------uchar __flash str0[]={"This is a LCD-!"};uchar __flash str1[]={"Designed by ME"};//------------------------------------------------------------------------------//延时1ms函数void delay_1ms(){uint i;for(i=1;i

    时间:2019-01-03 关键词: 点阵 atmega16 字符液晶模块 avr单片机

  • AVR单片机外部RAM访问

    最近的一个项目中,体会了一下AVR单片机的外部RAM扩展,发文记录于此。本文以ATMEGA64单片机为测试平台,外扩74HC573(资料上讲用AHC系列,但是我用HC系列在16M晶振下配置成最快速度访问并没有发现什么不妥,当然这是个不严谨的设计)以及62256芯片。我采用的是GCC编译器,并且在项目中采用C++来编写程序,根据理论上来讲,只要外部存储器使能了并且配置完成,那么变量的地址分配完全可以交给编译器来做,但是前提是存储器使能及配置代码要在上电复位后最先得到执行,而采用C或者C++来编写程序,上电复位之后最先得到执行的代码是由编译器自动增加的启动代码以及构造函数代码。我不清楚如何让存储器使能及配置代码在上电复位后最先得到执行,所以就写了下面一段宏来控制外部存储器的访问。代码如下://extern_ram.h#ifndef _H_EXTERN_RAM_H_#define _H_EXTERN_RAM_H_#include "type.h"#define DEF_EX_VAR(name) EX_VAR name;#define INIT_EX_VAR(name,ele_size,ele_n) do{name.size_ele=ele_size;name.n_ele=ele_n;name.addr=p;p+=((ele_size)*(ele_n));}while(0)#define WR_EX_VAR(name,pos,pdat) do {for(UINT8 iiiii="0";iiiii

    时间:2018-12-25 关键词: 外部ram avr单片机

  • AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—01

    四、ATMEGA16的定时/计数器四—(01)、四位显示秒表试验首先怀念一下咱们的体育课,再体育课或者田径比赛的时候,老师会经常使用秒表来记录同学们的成绩。在此,来进行一个秒表的设计。(说实话,这个秒表真的太贵了,不过只是实验,纯属娱乐)使用INT0键进行计时的开始/停止,使用S1键作为计时值得清楚,并且采用6位数码管的右四位进行显示。定时器T0被用作扫描4位数码管(采用溢出中断,每1ms中断一次),而定时器T1则用来计时(咱们用的秒表用来显示四位,两位小数,也就是每计时10ms中断溢出一次)。1、预分频器和多路选择器ATMEGA16有两个8位定时/计数器(T/C0、T/C2)和一个16位定时/计数器(T/C1)。ATMEGA16的定时器/计数器时钟是可选择的。其时钟部分包括预分频器和一个多路选择器。预分频器课被认为是一个有多级输出的分频器。ATMEGA16用一个10位的计数器把输入的时钟分为4种可选择的分频输出。多路选择器可设置使用其中一个分频输出,或者不适用分频输出和使用外部引脚输入时钟。看图看真相:(其中只有0和1的,2的同理啊~好像那个0和1共用一个,具体我给忘记了,自己看datasheet~)2、8 位定时器/ 计时器0T/C0 是一个通用的单通道8 位定时器/ 计数器模块。其主要特点如下:? 单通道计数器? 比较匹配发生时清除定时器( 自动加载)? 无干扰脉冲,相位正确的PWM? 频率发生器? 外部事件计数器? 10 位的时钟预分频器? 溢出和比较匹配中断源 (TOV0 和 OCF0)Figure 27为8位定时器/计数器的简化框图(说实话,我也看不懂啊~~)寄存器:T/C(TCNT0)和输出比较寄存器(OCR0)为8位寄存器。中断请求(图中简写为Int.Req. ) 信号在定时器中断标志寄存器TIFR 都有反映。 所有中断都可以通过定时器中断屏蔽寄存器TIMSK 单独进行屏蔽。图中没有给出TIFR 和TIMSK。T/C可以通过预分频器由内部时钟源驱动,或者是通过T0 引脚的外部时钟源来驱动。时钟选择逻辑模块控制使用哪一个时钟源与什么边沿来增加( 或降低)T/C 的数值。如果没有选择时钟源T/C 就不工作。时钟选择模块的输出定义为定时器时钟clkT0。双缓冲的输出比较寄存器OCR0 一直与T/C 的数值进行比较。比较的结果可用来产生PWM波,或在输出比较引脚OC0上产生变化频率的输出。比较匹配事件还将置位比较标志OCF0。此标志可以用来产生输出比较中断请求。定义:本文的许多寄存器及其各个位以通用的格式表示。小写的“n” 取代了T/C 的序号,在此即为0。小写的“x” 取代了输出比较单元通道,在此即为通道A。但是在写程序时要使用精确的格式,例如使用TCNT0 来访问T/C0 计数器值,等等。T/C 时钟源:T/C 可以由内部同步时钟或外部异步时钟驱动。时钟源是由时钟选择逻辑决定的,而时钟选择逻辑是由位于T/C 控制寄存器TCCR0 的时钟选择位CS02:0 控制的。计数器单元:8位T/C的主要部分为可编程的双向计数单元。 Figure 28 即为计数器和周边电路的框图。根据不同的工作模式,计数器针对每一个clkT0 实现清零、加一或减一操作。clkT0 可以由内部时钟源或外部时钟源产生,具体由时钟选择位CS02:0 确定。没有选择时钟源时(CS02:0 = 0) 定时器即停止。但是不管有没有clkT0,CPU 都可以访问TCNT0。CPU 写操作比计数器其他操作( 如清零、加减操作) 的优先级高。计数序列由T/C 控制寄存器 (TCCR0) 的WGM01 和WGM00 决定。计数器计数行为与输出比较OC0 的波形有紧密的关系。有关计数序列和波形产生的详细信息请参考P72“ 工作模式” 。T/C溢出中断标志TOV0根据WGM01:0 设定的工作模式来设置。TOV0可以用于产生CPU中断。输出比较单元:8位比较器持续对TCNT0和输出比较寄存器OCR0进行比较。一旦TCNT0等于OCR0,比较器就给出匹配信号。在匹配发生的下一个定时器时钟周期输出比较标志OCF0 置位。若此时OCIE0 = 1 且SREG 的全局中断标志I 置位,CPU 将产生输出比较中断。执行中断服务程序时OCF0 自动清零,或者通过软件写”1” 的方式来清零。根据由WGM21:0 和COM01:0 设定的不同的工作模式,波形发生器利用匹配信号产生不同的波形。同时,波形发生器还利用max 和bottom 信号来处理极值条件下的特殊情况Figure 29 为输出比较单元的方框图。使用PWM 模式时OCR0 寄存器为双缓冲寄存器;而在正常工作模式和匹配时清零模式双缓冲功能是禁止的。双缓冲可以将更新OCR0 寄存器与top 或bottom 时刻同步起来,从而防止产生不对称的PWM 脉冲,消除了干扰脉冲。访问OCR0 寄存器看起来很复杂,其实不然。使能双缓冲功能时,CPU 访问的是OCR0缓冲寄存器;禁止双缓冲功能时CPU 访问的则是OCR0 本身。(好了,你笨上就这么多吧,我还是看书上的排版比较好啊~~datasheet真的好大啊~``)3、8位定时/计数器0的寄存器1)T/C 控制寄存器- TCCR0? Bit 7 – FOC0: 强制输出比较FOC0仅在WGM00指明非PWM模式时才有效。但是,为了保证与未来器件的兼容性,在使用PWM 时,写TCCR0 要对其清零。对其写1 后,波形发生器将立即进行比较操作。比较匹配输出引脚 OC0 将按照COM01:0 的设置输出相应的电平。要注意FOC0 类似一个锁存信号,真正对强制输出比较起作用的是COM01:0 的设置。FOC0不会引发任何中断,也不会在利用OCR0作为TOP的CTC模式下对定时器进行清零的操作。读FOC0 的返回值永远为0。? Bit 6, 3 – WGM01:0: 波形产生模式这几位控制计数器的计数序列,计数器的最大值TOP,以及产生何种波形。T/C 支持的模式有:普通模式,比较匹配发生时清除计数器模式(CTC),以及两种PWM 模式,详见Table 38 与P72“ 工作模式” 。? Bit 5:4 – COM01:0: 比较匹配输出模式这些位决定了比较匹配发生时输出引脚OC0 的电平。如果COM01:0 中的一位或全部都置位, OC0 以比较匹配输出的方式进行工作。同时其方向控制位要设置为1 以使能输出驱动器。当OC0 连接到物理引脚上时, COM01:0 的功能依赖于WGM01:0 的设置。Table 39 给出了当WGM01:0 设置为普通模式或CTC 模式时COM01:0 的功能。? Bit 2:0 – CS02:0: 时钟选择用于选择T/C 的时钟源。如果T/C0 使用外部时钟,即使T0 被配置为输出,其上的电平变化仍然会驱动记数器。利用这一特性可通过软件控制记数(这里应该注意一下下~~~)。2)T/C0计数寄存器—TCNT0通过T/C 寄存器可以直接对计数器的8 位数据进行读写访问。对TCNT0 寄存器的写访问将在下一个时钟阻止比较匹配。在计数器运行的过程中修改TCNT0 的数值有可能丢失一次TCNT0 和OCR0 的比较匹配。3)输出比较寄存器—OCR0输出比较寄存器包含一个8 位的数据,不间断地与计数器数值TCNT0 进行比较。匹配事件可以用来产生输出比较中断,或者用来在OC0 引脚上产生波形。4)中断屏蔽寄存器—TIMSK? Bit 1 – OCIE0: T/C0 输出比较匹配中断使能当OCIE0 和状态寄存器的全局中断使能位I 都为”1” 时,T/C0 的输出比较匹配中断使能。当T/C0 的比较匹配发生,即TIFR 中的OCF0 置位时,中断服务程序得以执行。? Bit 0 – TOIE0: T/C0 溢出中断使能当TOIE0 和状态寄存器的全局中断使能位I 都为”1” 时,T/C0 的溢出中断使能。当T/C0发生溢出,即TIFR 中的TOV0 位置位时,中断服务程序得以执行。5)定时/计数器中断标志寄存器—TIFR? Bit 1 – OCF0: 输出比较标志0当T/C0 与OCR0( 输出比较寄存器0) 的值匹配时,OCF0 置位。此位在中断服务程序里硬件清零,也可以对其写1 来清零。当SREG 中的位I、OCIE0(T/C0 比较匹配中断使能) 和OCF0 都置位时,中断服务程序得到执行。? Bit 0 – TOV0: T/C0 溢出标志当T/C0 溢出时, TOV0 置位。执行相应的中断服务程序时此位硬件清零。此外, TOV0也可以通过写1 来清零。当SREG 中的位I、TOIE0(T/C0 溢出中断使能) 和TOV0 都置位时,中断服务程序得到执行。在相位修正PWM 模式中,当T/C0 在0x00 改变记数方向时, TOV0 置位(这里我还真的不会~~)。下面的是个补充:具体我也不知道~因为我也没有用过,回头用了再来更新,哈。4、16位定时/计数器T/C116位的T/C 可以实现精确的程序定时( 事件管理)、波形产生和信号测量。其主要特点如下? 真正的16 位设计( 即允许16 位的PWM)? 2 个独立的输出比较单元? 双缓冲的输出比较寄存器? 一个输入捕捉单元? 输入捕捉噪声抑制器? 比较匹配发生时清除寄存器( 自动重载)? 无干扰脉冲,相位正确的PWM? 可变的PWM 周期? 频率发生器? 外部事件计数器? 4 个独立的中断源(TOV1、 OCF1A、OCF1B 与ICF1)先看看图吧:寄存器:定时器/ 计数器TCNT1、输出比较寄存器OCR1A/B 与输入捕捉寄存器ICR1 均为16 位寄存器。访问16 位寄存器必须通过特殊的步骤,详见P85“ 访问16 位寄存器” 。T/C 控制寄存器TCCR1A/B 为8 位寄存器,没有CPU 访问的限制。中断请求( 图中简写为Int.Req.) 信号在中断标志寄存器TIFR1 都有反映。所有中断都可以由中断屏蔽寄存器TIMSK1 单独控制。图中未给出TIFR1 与TIMSK1。T/C可由内部时钟通过预分频器或通过由T1引脚输入的外部时钟驱动。引发T/C数值增加(或减少) 的时钟源及其有效沿由时钟选择逻辑模块控制。没有选择时钟源时T/C 处于停止状态。时钟选择逻辑模块的输出称为clkT1。双缓冲输出比较寄存器OCR1A/B 一直与T/C 的值做比较。波形发生器用比较结果产生PWM或在输出比较引脚OC1A/B输出可变频率的信号。参见P91 “输出比较单元” 。比较匹配结果还可置位比较匹配标志OCF1A/B,用来产生输出比较中断请求。当输入捕捉引脚ICP1 或模拟比较器输入引脚( 见P189 “ 模拟比较器” ) 有输入捕捉事件产生( 边沿触发) 时,当时的T/C 值被传输到输入捕捉寄存器保存起来。输入捕捉单元包括一个数字滤波单元( 噪声消除器) 以降低噪声干扰。在某些操作模式下, TOP 值或T/C 的最大值可由OCR1A 寄存器、ICR1 寄存器,或一些固定数据来定义。在PWM 模式下用OCR1A 作为TOP 值时, OCR1A 寄存器不能用作PWM 输出。但此时OCR1A 是双向缓冲的, TOP 值可在运行过程中得到改变。当需要一个固定的TOP 值时可以使用ICR1 寄存器,从而释放OCR1A 来用作PWM 的输出。

    时间:2018-12-20 关键词: 定时 计数器 atmega16 avr单片机

  • Proteus—AVR单片机(ATMEGA16单片机)系统时钟及时钟选项设置

    在设置之前呢,我得把ATMEGA16里面的datasheet里面的资料说说,当然是关于系统时钟和时钟选项的一、系统时钟及时钟选项(这里主要是介绍原理,三里面会介绍如何设置,其实你会了一,那后面的二和三就相当简单了~~你懂得,就是根据一来的)1. 时钟系统及其分布:Figure 11为AVR的主要时钟系统及其分布。这些时钟并不需要同时工作。为了降低功耗,可以通过使用不同的睡眠模式来禁止无需工作的模块的时钟。1)CPU 时钟- clkCPUCPU时钟与操作AVR内核的子系统相连,如通用寄存器文件、状态寄存器及保存堆栈指针的数据存储器。终止CPU 时钟将使内核停止工作和计算。2)I/O 时钟- clkI/OI/O时钟用于主要的I/O 模块,如定时器/ 计数器、SPI 和USART。I/O 时钟还用于外部中断模块。要注意的是有些外部中断由异步逻辑检测,因此即使I/O 时钟停止了这些中断仍然可以得到监控。此外, USI 模块的起始条件检测在没有clkI/O 的情况下也是异步实现的,使得这个功能在任何睡眠模式下都可以正常工作。3)Flash 时钟- clkFLASHFlash 时钟控制Flash 接口的操作。此时钟通常与CPU 时钟同时挂起或激活。4)异步定时器时钟- clkASY异步定时器时钟允许异步定时器/ 计数器与LCD 控制器直接由外部32 kHz 时钟晶体驱动。使得此定时器/ 计数器即使在睡眠模式下仍然可以为系统提供一个实时时钟。5)ADC 时钟- clkADCADC具有专门的时钟。这样可以在ADC工作的时候停止CPU和I/O时钟以降低数字电路产生的噪声,从而提高ADC 转换精度。2.时钟源ATmega16芯片有如下几种通过Flash熔丝位进行选择的时钟源。时钟输入到AVR时钟发生器,再分配到相应的模块。(这个还是很好理解的,就是通过CKSEL3~0位既4位来确定是使用外部晶振、外部低频晶振、外部RC振荡器、标定的内部RC振荡器还是外部时钟,很简单吧)3.默认时钟源器件出厂时CKSEL = “0010”, SUT = “10”。这个默认设置的时钟源是1 MHz 的内部RC振荡器,启动时间为最长。这种设置保证用户可以通过ISP 或并行编程器得到所需的时钟源。(这里STU可能还不明白,后面还有介绍的~~)4.晶体振荡器(从现在开始,就真正要介绍他们的系统时钟和时钟选项了)XTAL1 与XTAL2 分别为用作片内振荡器的反向放大器的输入和输出,如Figure 12 所示,这个振荡器可以使用石英晶体,也可以使用陶瓷谐振器。熔丝位CKOPT 用来选择这两种放大器模式的其中之一。当CKOPT 被编程时振荡器在输出引脚产生满幅度的振荡。这种模式适合于噪声环境,以及需要通过XTAL2 驱动第二个时钟缓冲器的情况。而且这种模式的频率范围比较宽。当保持CKOPT 为未编程状态时,振荡器的输出信号幅度比较小。其优点是大大降低了功耗,但是频率范围比较窄,而且不能驱动其他时钟缓冲器。对于谐振器, CKOPT 未编程时的最大频率为8 MHz, CKOPT 编程时为16 MHz。C1和C2 的数值要一样,不管使用的是晶体还是谐振器。最佳的数值与使用的晶体或谐振器有关,还与杂散电容和环境的电磁噪声有关。Table8 给出了针对晶体选择电容的一些指南。对于陶瓷谐振器,应该使用厂商提供的数值。若想得到更多的有关如何选择电容以及振荡器如何工作的信息,请参考多用途振荡器应用手册。振荡器可以工作于三种不同的模式,每一种都有一个优化的频率范围。工作模式通过熔丝位CKSEL3..1 来选择,如Table 4 所示。(这里可能会有一点疑问,不是CKSEL3~0用来选择器件的,怎么CKSEL3~1用来选择什么鸟频率范围,对喽,就是这个样子,CKSEL3~1就是用来选择你选择好的晶体振荡器工作模式的(顺便给出了范围),这就是为什么上面CKSEL3~0为什么选择器件有个范围的原因了。然后就是CKSEL0位呢?熔丝位CKSEL0以及STU1~0用来选择启动时间的,下面会有介绍的)如Table 5 所示,熔丝位CKSEL0 以及SUT1..0 用于选择启动时间。5)低频晶体振荡器为了使用32.768 kHz 钟表晶体作为器件的时钟源,必须将熔丝位CKSEL 设置为“1001”以选择低频晶体振荡器。晶体的连接方式如Figure 12 所示(此图跟晶体振荡器的连接图一样的~~)。通过对熔丝位CKOPT 的编程,用户可以使能XTAL1 和XTAL2 的内部电容,从而去除外部电容。内部电容的标称数值为36 pF。选择了这个振荡器之后,启动时间由熔丝位SUT 确定,如Table 6 所示。6)外部RC振荡器对于时间不敏感的应用可以使用Figure 13 的外部RC 振荡器。频率可以通过方程f =1/(3RC) 进行粗略地鼓估计。电容C 至少要22 pF。通过编程熔丝位CKOPT,用户可以使能XTAL1 和GND 之间的片内 36 pF 电容,从而无需外部电容。振荡器可以工作于四个不同的模式,每个模式有自己的优化频率范围。工作模式通过熔丝位CKSEL3..0 选取,如Table 7 所示。选择了这个振荡器之后,启动时间由熔丝位SUT 确定,如Table 8 所示。7)标定的片内RC振荡器标定的片内RC 振荡器提供了固定的1.0、2.0、4.0 或8.0 MHz 的时钟。这些频率都是5V、25°C 下的标称数值。这个时钟也可以作为系统时钟,只要按照Table 9 对熔丝位CKSEL进行编程即可。选择这个时钟(此时不能对CKOPT进行编程)之后就无需外部器件了。复位时硬件将标定字节加载到OSCCAL 寄存器,自动完成对RC 振荡器的标定。在5V,25°C 和频率为1.0 MHz 时,这种标定可以提供标称频率 ± 1% 的精度。当使用这个振荡器作为系统时钟时,看门狗仍然使用自己的看门狗定时器作为溢出复位的依据。选择了这个振荡器之后,启动时间由熔丝位SUT 确定,如Table 10 所示。XTAL1 和XTAL2 要保持为空(NC)。8)振荡器标定寄存器- OSCCAL(这个寄存器主要是对内部振荡器进行调节的,可以消除由于生产工艺所带来的振荡器频率偏差~~后面有详细介绍的,说实话,我还真的没有用过~~)? Bits 7..0 – CAL7..0: 振荡器标定数据将标定数据写入这个地址可以对内部振荡器进行调节以消除由于生产工艺所带来的振荡器频率偏差。复位时1 MHz 的标定数据( 标识数据的高字节,地址为0x00) 自动加载到OSCCAL 寄存器。如果需要内部RC 振荡器工作于其他频率,标定数据必须人工加载。首先通过编程器读取标识数据,然后将标定数据保存到Flash 或EEPROM 之中。这些数据可以通过软件读取,然后加载到OSCCAL 寄存器。当OSCCAL 为零时振荡器以最低频率工作。当对其写如不为零的数据时内部振荡器的频率将增长。写入0xFF 即得到最高频率。标定的振荡器用来为访问EEPROM 和Flash 定时。有写EEPROM 和Flash 的操作时不要将频率标定到超过标称频率的10%,否则写操作有可能失败。要注意振荡器只对1.0、2.0、4.0 和8.0 MHz 这四种频率进行了标定,其他频率则无法保证。9)外部时钟为了从外部时钟源驱动芯片, XTAL1 必须如Figure 14 所示的进行连接。同时,熔丝位CKSEL必须编程为“0000”。若熔丝位CKOPT也被编程,用户就可以使用内部的XTAL1和GND 之间的36 pF 电容。10)定时/计数器振荡器对于拥有定时器/ 振荡器引脚(TOSC1 和TOSC2) 的AVR 微处理器,晶体可以直接与这两个引脚连接,无需外部电容。此振荡器针对32.768 kHz 的钟表晶体作了优化。不建议在TOSC1 引脚输入振荡信号。二、IAR for AVR设置熔丝位(暂时还真的不会啊~~等会了再贴出来吧~~~,先简短的略过吧)三、Proteus中的相关设置啊~~~马上就哦了Proteus中ATMEGA16的component如下:这里我就不一一介绍了吧,主要的说说就哦了:CKOPT位1是未编程,0代表编程CKSEL这个必须知道,熔丝位设置,这里面有你想设置的熔丝位,什么晶体振荡器,低频晶体振荡器,外部RC振荡器,标定的片内RC振荡器以及外部时钟都是从这里找的~~~(我一般选择片内RC振荡器,而且是8MHZ的)然后是boot loder size,这个是一个引导程序大小的设置,暂时放着先不管~~STU这个设置对于启动时间还是很重要的出厂时的设置是10,电源是缓慢上升的(上面可是有图有解释的~~~这里我就不改动了)现在看看我的设置吧,但是我还不知道怎么用外部晶振~~~这篇文章持续更新,以后知道了再给补上,上面说的都是些基础~~你懂得,毕竟我也是个小菜鸟,呵呵

    时间:2018-12-14 关键词: 系统时钟 proteus atmega16 avr单片机

首页  上一页  1 2 3 4 5 下一页 尾页
发布文章

技术子站

更多

项目外包