Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3004107
  • 博文数量: 523
  • 博客积分: 11908
  • 博客等级: 上将
  • 技术积分: 5475
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-03 15:50
文章分类

全部博文(523)

文章存档

2019年(3)

2013年(4)

2012年(71)

2011年(78)

2010年(57)

2009年(310)

分类:

2010-04-17 19:36:51

欢迎转载,如需转载请注明出处:embededgood.cublog.cn

 

本文以ATtiny13为例子来说明PWMEEPROMADC

 

具有PWM功能的8 定时器/计时器0

 

PWM有四种工作模式:

一、普通模式:

普通模式(WGM02:0 = 0) 为最简单的工作模式。在此模式下计数器不停地累加。计到8比特的最大值后(TOP = 0xFF),由于数值溢出计数器简单地返回到最小值0x00 重新开始。

普通模式输出比较单元可以用来产生中断,当然也可以利用输出比较来产生波形,这样并不推荐,因为太占用CPU时间。

 

二、CTC(比较匹配时清零定时器)模式

此模式可以用来产生可变的频率变化。

为了在CTC模式下得到波形输出,可以设置OC0A在每次比较匹配发生时改变逻辑电平。这可以通过设置COM0A1:0 = 1 来完成。在期望获得OC0A 输出之前,首先要将其端口设置为输出。波形发生器能够产生的最大频率为fOC0 = fclk_I/O/2 (OCR0 A= 0x00)。频率由如下公式确定:

 

变量N 代表预分频因子(1864256 1024)

 

三、快速PWM模式

此模式可以用来产生可变的占空比变化。

快速PWM 模式可用来产生高频的PWM 波形。快速PWM 模式与其他PWM 模式的不同之处是其单斜坡工作方式。

输出的PWM 频率可以通过如下公式计算得到:

 

变量N 代表分频因子(1 8 64 256 1024)

 

四、相位修正PWM模式

此模式可以用来产生可变的占空比变化。

相位修正PWM模式(WGM02:0 = 1 5) 为用户提供了一个获得高精度相位修正PWM波形的方法。此模式基于双斜坡操作。

工作于相位修正模式时PWM 频率可由下式公式获得:

 

变量N 表示预分频因子 (1 8 64256 1024)

 

例子:CTC模式程序

初始化

DDRB |= (1 << PB0)

TCCR0A |= (1 << WGM01) | (1 << COM0A0);//CTC

OCR0A = 27;

TCCR0B|=0x04;  启动pwm256分频

TCCR0B&=0xf8;PORTB&=~(1<关闭pwm

 

EEPROM数据存储器

ATtiny13 包含64 字节的EEPROM数据存储器。它是作为一个独立的数据空间而存在的,

可以按字节读写。EEPROM 的寿命至少为100,000 次擦除周期。EEPROM 的访问由地

址寄存器、数据寄存器和控制寄存器决定。

 

EEPROM地址寄存器EEARL指定了64字节的EEPROM空间。EEPROM地址是线性的,

0 63EEAR 的初始值没有定义。在访问EEPROM 之前必须为其赋予正确的数据。

 

写函数

void EEPROM_write(unsigned char ucAddress, unsigned char ucData)

{

   /* 等待上一次写操作结束*/

   while(EECR & (1<

   ;

   /* 设置编程模式*/

   EECR = (0<>EEPM0);

   /* 设置地址与数据寄存器*/

   EEARL = ucAddress;

   EEDR = ucData;

   /* 置位EEMWE */

   EECR |= (1<

   /* 置位EEWE 以启动写操作*/

   EECR |= (1<

}

 

读函数

unsigned char EEPROM_read(unsigned char ucAddress)

{

   /* 等待上一次写操作结束*/

   while(EECR & (1<

   ;

   /* 设置地址寄存器 */

   EEARL = ucAddress;

   /* 设置EERE 以启动读操作*/       

   EECR |= (1<

   /* 自数据寄存器返回数据*/

   return EEDR;

}

 

注意点:

EEPROM数据存储器使用最重要的就是要防止EEPROM数据丢失。

若电源电压过低,CPU EEPROM 有可能工作不正常,造成EEPROM 数据的毁坏(

)。这种情况在使用独立的EEPROM 器件时也会遇到。因而需要使用相同的保护方案。

由于电压过低造成EEPROM 数据损坏有两种可能:一是电压低于EEPROM 写操作所需

要的最低电压;二是CPU 本身已经无法正常工作。

 

EEPROM 数据损坏的问题可以通过以下方法解决:

一、当电压过低时保持AVR RESET 信号为低。这可以通过使能芯片的掉电检测电路BOD

实现。如果BOD 电平无法满足要求则可以使用外部复位电路。若写操作过程当中发生了

复位,只要电压足够高,写操作仍将正常结束。

二、在上电后要延时一段时间再读取EEPROM存储器中的数据。

 

模数转换器(ADC

• 10 位精度

• 0.5 LSB 的非线性度

• ± 2 LSB 的绝对精度

• 13 - 260 μs 的转换时间

最大精度达到15 kSPS

四路复用单端输入通道

可选的向左调整ADC 读数

• 0 - VCC ADC 输入电压范围

可选的 1.1V ADC 参考电压

连续转换或单次转换模式

通过中断源自动触发的ADC 转换启动

• ADC 转换结束中断

基于睡眠模式的噪声抑制器

 

实际使用注意事项:

1、理论上的10AD精度,实际上在一般的场合只能达到8位。

25/2^10= 0.0048,5/2^8=0.0195,相差还是很多的。

3、电源电压不稳或有毛刺波纹等都会对AD的采样精度有影响,所以在电源前CLCπ形滤波处理,在电压进入AD之前加RC处理,采样过程中要多次采样,并使用软件滤波算法来减少AD的误差。

4、在模拟器件上,地和电源一组,信号线和地一组,分别编成双绞线,这样也会增加抗干扰,另外这些线越短越好。

 

 

阅读(3055) | 评论(0) | 转发(0) |
0

上一篇:etc-inittab文件说明

下一篇:minigui介绍

给主人留下些什么吧!~~