分类:
2010-04-17 19:36:51
欢迎转载,如需转载请注明出处:embededgood.cublog.cn
本文以ATtiny13为例子来说明PWM,EEPROM,ADC。
具有PWM功能的8位 定时器/计时器0:
该PWM有四种工作模式:
一、普通模式:
普通模式(WGM02:0 = 0) 为最简单的工作模式。在此模式下计数器不停地累加。计到8比特的最大值后(TOP = 0xFF),由于数值溢出计数器简单地返回到最小值0x00 重新开始。
普通模式输出比较单元可以用来产生中断,当然也可以利用输出比较来产生波形,这样并不推荐,因为太占用CPU时间。
二、CTC(比较匹配时清零定时器)模式
此模式可以用来产生可变的频率变化。
为了在CTC模式下得到波形输出,可以设置OC
变量N 代表预分频因子(1、8、64、256 或1024)。
三、快速PWM模式
此模式可以用来产生可变的占空比变化。
快速PWM 模式可用来产生高频的PWM 波形。快速PWM 模式与其他PWM 模式的不同之处是其单斜坡工作方式。
输出的PWM 频率可以通过如下公式计算得到:
变量N 代表分频因子(1、 8、 64、 256 或1024)。
四、相位修正PWM模式
此模式可以用来产生可变的占空比变化。
相位修正PWM模式(WGM02:0 = 1 或5) 为用户提供了一个获得高精度相位修正PWM波形的方法。此模式基于双斜坡操作。
工作于相位修正模式时PWM 频率可由下式公式获得:
变量N 表示预分频因子 (1、 8、 64、256 或1024)。
例子:CTC模式程序
初始化
DDRB |= (1 << PB0);
TCCR
OCR
TCCR0B|=0x04; 启动pwm,256分频
TCCR0B&=0xf8;PORTB&=~(1<
EEPROM数据存储器
ATtiny13 包含64 字节的EEPROM数据存储器。它是作为一个独立的数据空间而存在的,
可以按字节读写。EEPROM 的寿命至少为100,000 次擦除周期。EEPROM 的访问由地
址寄存器、数据寄存器和控制寄存器决定。
EEPROM地址寄存器EEARL指定了64字节的EEPROM空间。EEPROM地址是线性的,
从0 到63。EEAR 的初始值没有定义。在访问EEPROM 之前必须为其赋予正确的数据。
写函数
void EEPROM_write(unsigned char ucAddress, unsigned char ucData)
{
/* 等待上一次写操作结束*/
while(EECR & (1<
;
/* 设置编程模式*/
EECR = (0<
/* 设置地址与数据寄存器*/
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、理论上的10位AD精度,实际上在一般的场合只能达到8位。
2、5/2^10= 0.0048,而5/2^8=0.0195,相差还是很多的。
3、电源电压不稳或有毛刺波纹等都会对AD的采样精度有影响,所以在电源前CLCπ形滤波处理,在电压进入AD之前加RC处理,采样过程中要多次采样,并使用软件滤波算法来减少AD的误差。
4、在模拟器件上,地和电源一组,信号线和地一组,分别编成双绞线,这样也会增加抗干扰,另外这些线越短越好。