AVR单片机

基于AVR单片机的语音识别系统设计,系统以AVR单片机为控制核心,实现对人的语音的识别控制。系统采用的主控芯片为Atreel公司的ATMEGAl28,语音识别功能采用ICR oute公司的单芯片LD3320。LD3320内部集成语音识别算法,无需外部FLASH,RAM资源,可以很好地完成非特定人的语音识别任务。同时该芯片内部集成了MP3播放功能,支持MPEG等格式,可实现语音提示或MP3歌曲的播放功能。由于内部含有16位A/D、D/A转换器和功放电路,所以不需要外接功放电路就可以产生清晰的声音。该系统已经预留好各种接口,具有良好的扩展性。

控制器电路

控制器选用Atmel公司生产的ATMEGA128芯片,采用先进的RISC结构,内置128 KB FLASH,4 KB SRAM,4 KB E2PROM等丰富资源。该芯片是业界高性能、低功耗的8位微处理器,并在8位单片机市场有着广泛应用。

LD3320语音识别电路

LD3320芯片是一款“语音识别”专用芯片。该芯片集成了语音识别处理器和一些外部电路,包括A/D、D/A转换器、麦克风接口、声音输出接口等,而且可以播放MP3。不需要外接任何的辅助芯片如FLASH,RAM等,直接集成到产品中即可以实现语音识别、声控、人机对话功能。图3为LD3320电路原理图,与MCU通信采用SPI总线方式,时钟不能超过1.5MHz。


麦克风工作电路如图所示,音频输出只需将扬声器连接到SPOP和SPON即可。使用SPI总线方式时,LD3320的MD要设为高电平,SPIS设为低电平。SPI总线的引脚有SDI,SDO,SDCK以及SCS。INTB为中断端口,当有识别结果或MP3数据不足时,会触发中断,通知MCU处理。RSTB引脚是LD3320复位端,低电平有效。LED1,LED2作为上电指示灯。


讨论了基于AVR单片机的语音识别系统设计的可行性,并给出了设计方案。通过多次测试结果表明,本系统具有电路运行稳定,语音识别率高,成本低等优点。同时借助于LD3320的MP3播放功能,该系统具有一定的交互性和娱乐性。移植性方面,系统通过简单的修改,可以很方便地将LD3320驱动程序移植到各种嵌入式系统中。随着人们对人工智能功能的需求,语音识别技术将越来越受到人们的关注,相信不久的将来,语音识别将会拥有更广阔的应用。

来源:畅学单片机

围观 80

在单片机应用中经常需要在掉电时(包括人为的关机和偶然的外部电源故障),对运行的数据进行保存。目前,常用的方法是单独给单片机增加一个较大的电容(一般为2000 μf以上,也有用法拉级的),外部掉电后,靠大电容存储的电量缓慢放电,提供单片机向eeprom存储数据所需要的时间。所选的电容小,提供的时间短,存储数据不可靠,所选电容大提供时间长,存储数据可靠。但是随之而来的问题是,掉电后电容放电过程中,单片机的供电电压在缓慢下降,当下将到某个值但还没有降到复位门限电压之前,如果此时再次开机,则单片机不能正常启动,导致单片机重复上电后工作混乱。

下面具体分析这一过程并给出解决的办法。

我们先了解一下AVR的上电复位特点。上表是AVR数据手册提供的上电复位参数。

AVR复位特征


从上表中可知,上电复位的典型门限电压是1.4V和1.3V,即在单片机上电时,其电源电压要低于此值,才能使单片机上电复位。单片机的正常工作电源电压范围是2.7~5.5V。当电源电压低于2.7V时,单片机已经停止工作,如果此时电压高于1.3V,并且再次上电,则单片机不能正常复位,导致工作混乱。一些场合的停电可能是瞬间的,包括人为断电可能都是瞬间的,可能几秒钟之内又再次上电,而此时单片机电容的电压恰好处于复位电压以上和正常工作电压以下,就会出现上面的现象。这是本人在实际应用当中所遇到的情况。

由此可见,虽然解决了数据保护问题,却又带来了新的麻烦。所以在解决单片机掉电数据保护时,应该注意的是既要保证充足的时间用于数据存储,又要尽快放电,保证正常重新上电。


上图是本文所用的电路,图中交流电经过CON2输入,整流滤波后到达三端稳压块7806(注意在此用7806而不是7805),7806的输出一路经dl送到单片机(cpu_v=5.3V),单独给单片机供电,单片机耗电通常小于5毫安,由于使用C4(2200μf)电容,该路电源的放电时间较长。另外一路电源经过d2送到电路负载中(VCC=5.3V),通常此路电源的电流较大,超过几十毫安。

这样,在断电后,Vcc由于放电电流大而且滤波电容小,很快放电,通常在几毫秒以内。而另外一路cpu_v,由于滤波电容大而且放电电流小,所以放电很慢,t》2200μf×10-6×5V/5ma×10-3=2.2s;Vcc经过R4、W2分压接到单片机比较器的输入端ain0,cpu_v经过R6和稳压管(3.3V)接到单片机比较器的ain‘I端。电路正常工作时,调整电位器W2,使得ain0电压大于ain1电压0.2V,当掉电(或断电)发生时,ain0下降快,ainl下降慢,当ain0低于ainl时,比较器翻转。AVR比较器的翻转可以触发中断,在中断里完成eeprom的数据保存。图中Q1及周围的电路的工作作用是:初次上电时,由于电容C1两端电压不能突变,所以三极管的b、e结电压为OV,处于截止状态,截止的时间取决于Cl和R2的时间常数,本电路中参数可以保证截止时间超过10ms,在此时间之内CPU已经进入正常工作状态,在程序中将OUT端置“1”电平,继续使三极管截止。当断电发生时,先存储数据到eep-rom,然后out端置“0”电平,三极管饱和导通,立刻给cpu_v电源放电,R3是限流电阻。这样放电时间取决于R3和C4,


出处:21ic

围观 125

AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。

avr单片机的特点及优点

高可靠性、功能强、高速度、低功耗和低价位 , 一直是衡量单片机性能的重要指标,也是单片机占领市场、赖以生存的必要条件。

早期单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的 CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。

AVR单片机的推出,彻底打破这种旧设计格局,废除了机器周期,抛弃复杂指令计算机(CISC)追求指令完备的做法;采用精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作码安排在一字之中(指令集中占大多数的单周期指令都是如此),取指周期短,又可预取指令,实现流水作业,故可高速执行指令。当然这种速度上的升跃,是以高可靠性为其后盾的。

AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆(32个寄存器文件)和单体高速输入/输出的方案(即输入捕获寄存器、输出比较匹配寄存器及相应控制逻辑)。提高了指令执行速度(1Mips/MHz),克服了瓶颈现象,增强了功能;同时又减少了对外设管理的开销,相对简化了硬件结构,降低了成本。故AVR单片机在软/硬件开销、速度、性能和成本诸多方面取得了优化平衡,是高性价比的单片机。

AVR单片机内嵌高质量的Flash程序存储器,擦写方便,支持ISP和IAP,便于产品的调试、开发、生产、更新。内嵌长寿命的EEProm可长期保存关键数据,避免断电丢失。片内大容量的RAM不仅能满足一般场合的使用,同时也更有效的支持使用高级语言开发系统程序,并可像MCS-51单片机那样扩展外部 RAM。

AVR单片机的I/O线全部带可设置的上拉电阻、可单独设定为输入/输出、可设定(初始)高阻输入、驱动能力强(可省去功率驱动器件)等特性,使的得I/O口资源灵活、功能强大、可充分利用。

AVR单片机片内具备多种独立的时钟分频器,分别供URAT、I2C、SPI使用。其中与8/16位定时器配合的具有多达10 位的预分频器,可通过软件设定分频系数提供多种档次的定时时间。AVR单片机独有的“以定时器/计数器(单)双向计数形成三角波,再与输出比较匹配寄存器配合,生成占空比可变、频率可变、相位可变方波的设计方法(即脉宽调制输出PWM)”更是令人耳目一新。

增强性的高速同/异步串口,具有硬件产生校验码、硬件检测和校验侦错、两级接收缓冲、波特率自动调整定位(接收时)、屏蔽数据帧等功能,提高了通信的可靠性,方便程序编写,更便于组成分布式网络和实现多机通信系统的复杂应用,串口功能大大超过MCS-51/96单片机的串口,加之AVR单片机高速,中断服务时间短,故可实现高波特率通讯。

面向字节的高速硬件串行接口TWI、SPI。TWI与I2C接口兼容,具备ACK信号硬件发送与识别、地址识别、总线仲裁等功能,能实现主/从机的收/发全部4种组合的多机通信。SPI支持主/从机等4种组合的多机通信。

AVR单片机有自动上电复位电路、独立的看门狗电路、低电压检测电路BOD,多个复位源(自动上下电复位、外部复位、看门狗复位、BOD复位),可设置的启动后延时运行程序,增强了嵌入式系统的可靠性。

AVR单片机具有多种省电休眠模式,且可宽电压运行(5-2.7V),抗干扰能力强,可降低一般8位机中的软件抗干扰设计工作量和硬件的使用量。

AVR单片机技术体现了单片机集多种器件(包括FLASH程序存储器、看门狗、EEPROM、同/异步串行口、TWI、SPI、A/D模数转换器、定时器/计数器等)和多种功能(增强可靠性的复位 系统、降低功耗抗干扰的休眠模式、品种多门类全的中断系统、具输入捕获和比较匹配输出等多样化功能的定时器/计数器、具替换功能的I/O端口…… )于一身,充分体现了单片机技术的从“片自为战”向“片上系统SoC”过渡的发展方向。

综上所述,AVR单片机博采众长,又具独特技术,不愧为8位机中的佼佼者。

AVR系列单片机的选型

AVR单片机系列齐全,可适用于各种不同场合的要求。AVR单片机有3个档次:

低档Tiny系列AVR单片机: 主要有Tiny11/12/13/15/26/28等;

中档AT90S系列AVR 单片机: 主要有AT90S1200/2313/8515/8535等; (正在淘汰或转型到Mega中)

高档ATmega系列AVR单片机: 主要有ATmega8/16/32/64/128( 存储容量为8/16/32/64/128 KB)以及ATmega8515/8535等。

AVR器件引脚从8脚到64脚, 还有各种不同封装供选择。

来源:网络

围观 28

单片机控制开关电源,单从对电源输出的控制来说,可以有几种控制方式。

其一是 单片机 输出一个电压(经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。我则建议:还是用开关电源原来的控制芯片来实现。不但价格低,而且容易实现单周期电流检测等保护功能。我们大可不必为数字控制而数字控制。

来源:电子发烧友网

围观 631

什么是AVR单片机?AVR单片机有什么优点?为什么要选择AVR单片机?

AVR单片机是ATMEL公司研制开发的一种新型单片机,它与51单片机、PIC单片机相比具有一系列的优点:

1:在相同的系统时钟下AVR运行速度最快;

2: 芯片内部的Flsah、EEPROM、SRAM容量较大;

3:所有型号的Flash、EEPROM都可以反复烧写、全部支持在线编程烧写(ISP);

4:多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也可以工作;

5:每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强;

6:内部资源丰富,一般都集成AD、DA模数器;PWM;SPI、USART、TWI、I2C通信口;丰富的中断源等。

目前支持AVR单片机编译器的语言主要有汇编语言、C语言、BASIC语言等。其中C编译器主要有CodeVisionAVR、 AVRGCC、IAR、ICCAVR等,C语言编译器由于它具有功能强大、 运用灵活、代码小、运行速度快等先天性的优点,使得它在专业程序设计上具有不可代替的地位。

AVR单片机是1997年由ATMEL公司研发 出的增强型内置Flash的RISC(Reduced Instruction Set CPU) 精简指令集高速8位单片机。AVR的单片机可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。

AVR的主要特性

高可靠性、功能强、高速度、低功耗和低价位,一直是衡量单片机性能的重要指标,也是单片机占领市场、赖以生存的必要条件。

早期单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以 后的 CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。

AVR单片机的推出,彻底打破这种旧设计格局,废除了机器周期,抛弃复杂指令计算机(CISC)追求指令 完备的做法;采用精简指令集,以字作为指令长度单位,将内容丰富的操作数与操作码安排在一字之中(指令集中占大多数的单周期指令都是如此),取指周期短,又可预取指令,实现流水作业,故可高速执行指令。当然这种速度上的升跃,是以高可靠性为其后盾的。

AVR单片机硬件结构采取8位机与16位机的折中策略,即采用局部寄存器存堆(32个寄存器文件)和单体高速输入/输出的方案(即输入捕获寄存器、输出比较匹配寄存器及相应控制逻辑)。提高了指令执行速度(1Mips/MHz),克服了瓶颈现象,增强了功能;同时又减少了对外设管理的开销,相对简化了硬件结构,降低了成本。故AVR单片机在软 /硬件开销、速度、性能和成本诸多方面取得了优化平衡,是高性价比的单片机。

AVR单片机内嵌高质量的Flash程序存储器,擦写方便,支持ISP和IAP,便于产品的调试、开发、生产、更新。内嵌长寿命的 EEProm可长期保存关键数据,避免断电丢失。片内大容量的RAM不仅能满足一般场合的使用,同时也更有效的支持使用高级语言开发系统程序,并可像 MCS-51单片机那样扩展外部 RAM。

AVR单片机的I/O线全部带可设置的上拉电阻、可单独设定为输入/输出、可设定(初始)高阻输入、驱动能力强(可省去功率驱动器件)等特性,使的得I/O口资源灵活、功能强大、可充分利用。

AVR 单片机片内具备多种独立的时钟分频器,分别供URAT、I2C、SPI使用。其中与8/16位定时器配合的具有多达10 位的预分频器,可通过软件设定分频系数提供多种档次的定时时间。AVR单片机独有的“以定时器/计数器(单)双向计数形成三角波,再与输出比较匹配寄存器 配合,生成占空比可变、频率可变、相位可变方波的设计方法(即脉宽调制输出PWM)”更是令人耳目一新。

增强性的高速同/异步串口,具有硬 件产生校验码、硬件检测和校验侦错、两级接收缓冲、波特率自动调整定位(接收时)、屏蔽数据帧等功能,提高了通信的可靠性,方便程序编写,更便于组成分布式网络和实现多机通信系统的复杂应用,串口功能大大超过MCS-51/96单片机的串口,加之AVR单片机高速,中断服务时间短,故可实现高波特率通讯。

面向字节的高速硬件串行接口TWI、SPI。TWI与I2C接口兼容,具备ACK信号硬件发送与识别、地址识别、总线仲裁等功能,能实现主 /从机的收/发全部4种组合的多机通信。SPI支持主/从机等4种组合的多机通信。

AVR单片机有自动上电复位电路、独立的看门狗电路、低电压检测电路BOD,多个复位源(自动上下电复位、外部复位、看门狗复位、BOD复位),可设置的启动后延时运行程序,增强了嵌入式系统的可靠性。

AVR 单片机具有多种省电休眠模式,且可宽电压运行(5-2.7V),抗干扰能力强,可降低一般8位机中的软件抗干扰设计工作量和硬件的使用量。

AVR单片机技术体现了单片机集多种器件(包括FLASH程序存储器、看门狗、EEPROM、同/异步串行口、TWI、SPI、A/D模数转换器、定时器 /计数器等)和多种功能(增强可靠性的复位系统、降低功耗抗干扰的休眠模式、品种多门类全的中断系统、具输入捕获和比较匹配输出等多样化功能的定时器/计 数器、具替换功能的I/O端口…… )于一身,充分体现了单片机技术的从“片自为战”向“片上系统SoC”过渡的发展方向。

综上所述,AVR单片机博采众长,又具独特技术,不愧为8位机中的佼佼者。

AVR系列单片机的选型

AVR单片机系列齐全,可适用于各种不同场合的要求。AVR单片机有3个档次:
低档Tiny系列AVR单片机: 主要有Tiny11/12/13/15/26/28等;

中档AT90S系列AVR 单片机:主要有AT90S1200/2313/8515/8535等; (正在淘汰或转型到Mega中)
高档ATmega系列AVR单片机:主要有ATmega8/16/32/64/128( 存储容量为8/16/32/64/128 KB)以及ATmega8515/8535等。

AVR器件引脚从8脚到64脚,还有各种不同封装供选择。

围观 385

1、EEPROM介绍

Electrically Erasable Programmable Read Only Memory 电气可拭除可编程只读存储器

发展过程:ROM – > PROM –> EPROM –> EEPROM

2、EEPROM和FLASH的区别

2.1 使用上的区别

  •  FLASH用于存放程序,在程序运行过程中不能更改。我们编写的程序是烧录到FLASH中的;
  •  RAM用作程序运行时的数据存储器;
  •  EEPROM用于存放数据,是用来保存掉电后用户不希望丢的数据,开机时用到的参数。运行过程中可以改变。

FLASH是用于存储程序代码的,有些场合也可能用它来保存数据,当然前提是该单片机的FLASH工艺是可以自写的(运行中可擦写),但要注意FLASH的擦写次数通常小于一万次,而且通常FLASH只能按块擦除。EEPROM不能用来存程序,通常单片机的指令寻址不能到这个区域。EEPROM的擦写次数应有百万次,而且可以按字节擦写。 EEPROM在一个PAGE内是可以任意写的,FLSAH则必须先擦除成BLANK,然后再写入,而一般没有单字节擦除的功能,至少一个扇区擦除。

2.2 结构上的区别

EEPROM和FLASH都是非易失性存储器。

FLASH的全称是FLASH EEPROM,但跟常规EEPROM的操作方法不同。

FLASH 和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低,因而适合用作程序存储器,EEPROM则更多的用作非易失的数据存储器。当然用FLASH做数据存储器也行,但操作比EEPROM麻烦的多,所以更“人性化”的MCU设计会集成FLASH和EEPROM两种非易失性存储器,而廉价型设计往往只有 FLASH,早期可电擦写型MCU则都是EEPRM结构,现在已基本上停产了。

3、EEPROM的使用方法

AVRGCC里面自带有EEPROM读写函数。

使用时需包含头文件#include <avr/eeprom.h>,部分读写函数如下:

#define eeprom_is_ready() bit_is_clear(EECR, EEWE)//检测EEPROM是否准备好。OK返回1(返回EEWE位)

#define eeprom_busy_wait() do {} while (!eeprom_is_ready())//等待EEPROM操作完成

extern uint8_t eeprom_read_byte (const uint8_t *addr);//读取指定地址的一个字节8bit的EEPROM数据

extern uint16_t eeprom_read_word (const uint16_t *addr);//读取指定地址的一个字16bit的EEPROM数据

extern void eeprom_read_block (void *buf, const void *addr, size_t n);//读取由指定地址开始的指定长度的EEPROM数据

extern void eeprom_write_byte (uint8_t *addr, uint8_t val);//向指定地址写入一个字节8bit的EEPROM数据

extern void eeprom_write_word (uint16_t *addr, uint16_t val);//向指定地址写入一个字16bit的EEPROM数据

使用示例:

/*-----------------------------------------------------------------------------
 *  从EEPROM中读取配置信息
 *----------------------------------------------------------------------------*/
uint8_t read_EEPROM_config(void)
{
    factory_mode               = eeprom_read_byte ( (uint8_t  *)0x10 );
    short_address              = eeprom_read_word ( (uint16_t *)0x11 );
    transmit_power_DBM_uin     = eeprom_read_byte ( (uint8_t  *)0x13 );
    pan_id                     = eeprom_read_word ( (uint16_t *)0x14 );
    channel_page               = eeprom_read_byte ( (uint8_t  *)0x16 );
    channel                    = eeprom_read_byte ( (uint8_t  *)0x17 );
    return 1;
}

/*------------------------------------------------------------------------------
 * 将从串口读出的配置信息存放于EEPROM中
 *-----------------------------------------------------------------------------*/
uint8_t write_EEPROM_config(void)
{
    eeprom_write_byte ( (uint8_t  *)0x10,factory_mode );
    eeprom_write_word ( (uint16_t *)0x11,short_address );
    eeprom_write_byte ( (uint8_t  *)0x13,transmit_power_DBM_uin );
    eeprom_write_word ( (uint16_t *)0x14,pan_id );
    eeprom_write_byte ( (uint8_t  *)0x16,channel_page );
    eeprom_write_byte ( (uint8_t  *)0x17,channel );

    return 1;
}

通过串口向单片机发送配置命令,单片机收到指令后,利用函数write_EEPROM_config()将相应的配置信息存放于EEPROM中。系统初始化时,利用函数read_EEPROM_config()从EEPROM中取出相应的数据,用于系统的初始化。

转自: Andy Cheung

围观 388

1、引言

USB接口以其数据传输快、连接简单、易于扩展、支持热插拔等特点已成为外设与PC通信的主要方式之一。随着嵌入式系统的发展,嵌入式微处理器需增加通用的USB接口,以便实现与PC等USB主机系统的通信。针对这样的需求,这里采用PHILIPS公司的USB接口器件PDIUSBD12和Atmel公司的AVR系列单片机ATmega8设计一种通用的USB接口模块。该模块可方便为各种嵌入式微处理器增加USB接口,从而实现与USB主机系统的高速通信。

2、系统硬件设计

该系统模块的控制核心是AVR高速单片机ATmega8。AVR单片机是新一代基于哈佛结构的高速RISC微控制器,具有速度快、价格低、可靠性高,I/O口线驱动能力强和片内集成外设资源丰富等特点,其内部集成有可进行ISP下载编程的Flash,EEPROM、熔丝位和锁定位。AVR单片机的ISP下载电缆制作简单、成本低廉,还有免费的下载软件(例如PONyProg)支持。PDIUSBD12是一款高性价比USB接口器件,完全符合USB1.l规范,易于与各种微处理器接口。

由于AVR单片机具有高速性,可利用I/O端口线以软件方式模拟PDIUSBD12的时序,对其读写。这种方式可根据不同的微处理器速度灵活控制PDIUSBD12的时序和地址,无需译码电路,从而简化硬件设计,降低成本。

由于ATmega8片内集成了UART,SPI,I2C等接口,该接口模块可利用这些接口与其他系统通信,使得该接口模块成为通用的接口转换器。

3、USB固件程序设计

本系统模块的USB固件程序采用符合ANSI C标准的GCC编译器设计,结合分层次的模块化结构,可移植性强,只需稍微修改硬件接口层即可将其移植到别的硬件平台,可重复利用代码。

USB固件程序设计是基于状态机和标准的前后台式程序架构。整个同件程序的模块化层次结构如图3所示。首先编写硬件接口层hal.c和PDIUSBD12器件的命令接口层,以供上层模块调用。硬件接口层含有对PDIUSBD12写指令和读写数据的函数,以供上层模块调用。当CPU不同时,只需修改这些函数即可。由于CPU访问PDIUS-BD12与普通存储器一样,只需根据硬件连接关系,在硬件抽象层中编写对PDIUSBD12写指令、写读数据的函数,供上层调用即可。实现PDIUSBD12的命令接口层需调用硬件抽象层函数,供上层模块调用。再设计前后台程序及标准设备请求程序模块。

先利用C语言的共用体与位域定义一个全局状态变量如下所示:
AVR单片机的通用USB接口模块设计
AVR单片机的通用USB接口模块设计
用户可根据需要增加相应的状态标志位,如UART,SPI,I2C等接口收发数据完成标志来满足各种情况下的需要,然后定义一个结构体变量用于存放USB的标准设备请求。

在前台主程序中首先初始化全局变量和其他外围设备,然后在while(1)的死循环中检测状态变量值有无变化,根据不同的状态变量值调用下层的相应函数完成相关操作。在后台的中断服务程序中,根据读取的中断寄存器值一方面将PDIUSBD12接收到的数据移入CPU内存或将内存中的数据写入PDIUSBD12发送端点的缓冲区;另一方面根据具体情况改变状态变量值。

以下给出了前台主程序的程序代码:以下为后台中断服务程序:
AVR单片机的通用USB接口模块设计
AVR单片机的通用USB接口模块设计

当前台主程序检测到状态变量收到SETUP包事件bEvent_flags.bits.setup_packet为1时,该标志位清零,再调用标准设备请求模块stdreq.c的control_handler()函数完成对USB设备的枚举。

设计标准设备请求模块,首先利用结构体定义USB枚举所需的各种描述符,以供不同设备请求使用,其次编写11个标准的设备请求处理函数。本层请求模块重要函数是协议控制子程序control han-dler(),它根据ControlData中标识的不同USB设备请求类型调用11个函数中的任意一个。除此之外,本层请示求模块还实现中断服务程序调用的控制端点接收与发送中断处理函数。

4、系统集成与应用

4.1 PC机驱动程序与应用程序的设计

利用该系统模块实现PC机通讯,需对PC机编写相关驱动程序和应用程序,可利用DriverStudio软件生成该系统模块在Windows环境下的驱动程序。应用程序的设计可使用诸如VB、VC、Delphi以及应用普遍的虚拟仪器软件开发工具LabVIEW等软件开发工具,直接调用驱动程序生成的动态链接库中的API函数,可根据具体任务编写相关应用程序。

4.2 应用于其他系统

利用AVR单片机的多种外设接口特点,例如UART、SPI、I2C接口等可以有效地实现与其他微处理器的通信,将该模块嵌入各种系统,实现与其他器件的通讯。固件程序中预留有UART、SPI、I2C等接口程序,只需通过简单的跳线连接就可选择相应的接口,从而实现应用系统增加USB接口。

4.3 固件程序移植其他平台

由于固件程序最大限度考虑到可移植性,所以将固件程序稍加修改即可应用于各种已拥有C语言编译器的微处理器,实现PDIUSBD12直接与微处理器的通讯。

移植固件程序主要工作有:根据硬件连接关系,修改硬件抽象层中的3个读写函数,实现CPU与器件之间的通信;通过调用PDIUSBD12命令接口层的读取芯片ID函数返回值是否为0x1012,测试CPU与器件之间的通讯是否正常。

5、在数据采集器中的应用

由于ATmega8片内集成有逐次比较型ADC,具有6路的模拟输入通道,所以只需要针对采集的物理量选用相应传感器,并将输出信号调整至0~Vcc的范围内就可利用该模块实现USB数据采集器。AVR单片机集成有ADC自带采样保持电路,具有内部参考电压和基于睡眠模式的噪声抑制器,从而大大提高ADC精度,实现高精度的数据采集。而设计只需在相应的固件程序巾增加获取ADC结果的函数,并设置相应的状态标志位即可完成USB数据采集器的设计。

6、结束语

以ATmega8和PDIUSBD12为核心,实现通用的USB接口模块设计,并应用于基于USB接口的数据采集器中。实验结果表明,该USB接口模块运行稳定可靠,通信速度快,易于修改移植,满足嵌人式系统对USB接口的需求,并能快速为各种微处理器增加USB接口,具有广泛的应用前景。

来源:21ic

围观 603

电子设备在汽车中的广泛应用被认为是汽车技术发展进程中的一次革命。随着汽车电子技术的发展和汽车控制单元的增加,汽车电子技术正朝着集中化、智能化、网络化和模块化方向发展。车内CAN/LIN总线网络的使用使得车内各个控制单元的数据可以共享,从而使在汽车嵌入式计算平台上采用多变量多目标的综合协调控制成为可能。另一方面,网络化拓展了汽车的服务领域,为汽车的移动通信、移动办公、娱乐、导航定位和远程诊断与维修提供了技术基础,逐步形成了汽车、家庭、社会一体化的互动体系。汽车嵌入式计算平台在该一体化体系中担当重要角色。

本文介绍了车载嵌入式计算平台,它为完成汽车辅助驾驶和安全监控、远程诊断和维修、在线/离线导航定位、娱乐、与家庭互动等各项功能提供了很好的软硬件平台。下面将从汽车/家庭/社会一体化体系结构、计算平台的硬件体系、软件体系三个方面进行说明。

1、汽车/家庭/社会一体化体系结构

汽车嵌入式计算平台为实现各种功能服务提供了良好的软硬件平台。车外网络和车内网络结合构成了汽车/家庭/社会一体化的互动体系结构。该体系结构示意图见图1,车内计算网络示意图见图2。

基于AVR单片机的实用车载空调控制器电路

在图1中,交通管理中心、汽车服务中心、互联网服务中心和娱乐服务中心等共同组成汽车远程服务平台,家庭/办公室和汽车组成汽车/家庭互动平台体系。其主要提供三类服务:

(1)汽车集成服务。

主要指汽车远程诊断服务和汽车最优控制方案服务。汽车计算平台通过CAN/LIN总线读取电子控制模块(ECM)诊断产生的故障代码,然后通过汽车网关利用无线通信技术发送至最近的汽车服务中心。汽车服务中心分析故障代码形成诊断方案并以服务的形式发送到汽车嵌入式网关,经过协议解析后再发送到汽车嵌入式计算平台,最后通过人机接口显示给驾驶员。汽车制造商同时向汽车提供下载最佳汽车控制方案的服务,以适合汽车在不同的行驶条件下运行。这些服务主要由汽车远程服务平台或汽车制造商提供。

(2)导航定位服务。

运行在车载嵌入式平台上的应用层软件接收GPS接收仪发送的数据,借助车载的地理信息系统(电子地图)实现导航。此外应用层软件还可以把GPS接收的数据发送到远程汽车服务平台或第三方服务提供商,再由他们把导航信息以服务的形式发送给汽车嵌入式平台。这些服务对准确性和及时性要求比较高。如何准确高效地传递这些信息成为决定这类服务质量的关键。

(3) 个人/娱乐信息服务。

汽车/家庭互动平台体系使人们可以在驾驶汽车的过程中了解家中的情况,将汽车-家庭连为一体。车载信息处理(TelematICs) 系统的地位日益突出。它通过无线通信技术将安全保密信息或娱乐信息以服务(Service)的方式传递至汽车。

2、汽车嵌入式计算平台的硬件体系结构

硬件平台的设计必须根据其要完成的功能来确定。本项目是将汽车嵌入式网关集成到计算平台中,因此,计算平台要完成的功能主要为:与远程服务中心的无线通信功能;导航功能;音视频播放的功能;通过CAN/LIN总线访问车内电子控制模块的功能等。基于32位ARM内核的EP9315处理器具有良好的计算能力和丰富的外围接口,在对其做了适当的外围扩展后设计出如图3所示的汽车嵌入式计算平台。

基于AVR单片机的实用车载空调控制器电路

EP9315是高度集成的片上系统处理器。它拥有200MHz ARM920T处理器及支持Linux、Windows CE和其他许多嵌入式操作系统的存储器管理单元(MMU)。EP9315内置一个高性能1/10/100 Mbps以太网媒体存取控制器(MAC)及外部接口,可连接SPI、I2S音频、Raster/LCD、IDE存储外设、小键盘和触摸屏等。该器件还集成了运行速度为12Mbps的三端口USB 2.0全速主机和3个UART。PCMCIA接口的无线网卡提供远程网络的访问功能,可以实现对远程服务中心网络服务器的访问。IDE接口的电子硬盘用来存放地理信息系统,为导航软件提供电子地图。GPS接收仪通过串口与EP9315处理器相连,提供实时的车辆地理位置信息。触摸屏是人机输入界面,用来完成各种用户信息的设置。LCD显示屏和扬声器是人机输出界面,可以播放MPEG4视频或提示语音报警信息。CAN/LIN总线接口可以挂接汽车内的 CAN/LIN总线,提供对车内CAN/LIN总线的访问。基于上述硬件平台所设计的软件能很好地完成计算平台所要完成的各项功能。

3、汽车嵌入式计算平台的软件体系结构

软件平台采用嵌入式Linux设计。上文已对软件部分要实现的功能进行了一定的描述。其中导航任务是一个实时任务,而Linux不具有实时功能,因此需要改进Linux,使其支持实时任务。基于实时Linux的软件体系结构如图4所示。

基于AVR单片机的实用车载空调控制器电路

系统上电后,首先启动LINux操作系统,然后启动QT引擎,再启动 QT主程序。在LCD显示屏上显示各个应用程序的选择按钮,通过触摸屏按下相应的按钮,即会启动相应的应用程序。下面介绍主要应用程序的执行流程。

(1)导航应用程序。

导航程序启动后,用户通过触摸屏输入旅程的起始地点和目的地点。导航软件把该起始地点和目的地点发送到导航服务中心(本项目中为无线局域网中一台计算机),并且每隔一定时间调用导航API从串口1接收GPS接收仪发送的当前车辆的实时地理位置数据,再调用通信API,通过无线网卡把该地理位置数据发送到导航服务中心。导航服务中心根据接收到的旅程起始地点和目的地点计算出最优行使路径,并且每接收到车辆位置信息时,都计算出当前车辆所在的位置,把包含当前车辆位置和应该行使路径的小范围的位置图像发送到车辆。车上的导航软件把接收到的图像在LCD上显示出来,通过该图像司机就可以了解车辆当前的位置和下一步要行使的路线。

(2)诊断应用软件。

诊断服务软件启动后,该软件调用诊断API读取连接在CAN/LIN总线上的各个ECU的故障代码,然后再调用通信API把这些代码发送到汽车服务中心(本项目中是与导航服务中心相同的计算机)。汽车服务中心分析故障代码,确定出汽车的具体故障情况,把最终结果通过无线网发送到汽车嵌入式平台。汽车嵌入式平台通过无线网卡接收这些数据,诊断服务软件读取该数据,并在LCD上显示。

(3)汽车/家庭互动应用软件。

当在汽车嵌入式平台上运行家庭/汽车互动系统软件时,该软件在LCD上显示家庭中的各个电器及其状态。当用户通过触摸屏发出改变某个电器状态的命令时,汽车/家庭互动软件调用家庭API函数把该命令发送到家庭网关(由社会第三方服务公司提供)。在家庭网关上运行着实现 OSGI协议的软件,该软件可以完成所接收到的命令,并把执行的结果发送到汽车嵌入式平台。

(4)安全监控软件。

CCD摄像头把汽车行驶车道的图像输入到DSP处理系统,DSP处理系统对图像数据进行分析,并把分析结果送到在汽车嵌入式平台上运行的安全监控软件,监控软件分析该数据。如果汽车偏离行驶车道,监控软件则调用多媒体API通过扬声器或者在LCD上显示信息提醒驾驶员,从而实现安全监控和报警功能。

转自:广电电器

围观 328

页面

订阅 RSS - AVR单片机