读了ATmega48/88/168/64L的中英文手册,由如下问题不解,请大家指教,不胜感激!
问题1:关于ADC的。 之一:在ATmega8/16/32的手册中,我没有弄明白ADC单次转换是如何设置的。手册中这样说道:“如果使能了自动触发方式,置位ADCSRA寄存器中的ADSC位将启动单次转换”。我想,既然使能了自动触发,那么位域ADS2:0将确定一种自动触发方式,即便置位ADSC能启动转换,但无论如何,ADC的启动还是会受到自动触发源的触发而进行转换,而这不是我所希望的. 我这样理解对么? 如果我的理解正确的话,那么能否通过将触发源设为模拟比较方式,然后禁止模拟比较方式,这样只依靠置位ADSC来启动转换。这样做行吗?还有别的方法吗? 如果我的理解错误的话,那么我该如何实现单次转换? 之二:对于ATmega48/88,如果只需要8位ADC的话,那么在精度指标最高的条件下,ADC时钟频率可设到多高?对8Mhz系统时钟来说,32分频可否?
之三:未看到有对ADC In和数字IO口进行选择的配置项目,我只想用3~4个ADC通道,余下的做普通IO,是否可以通过读PINx来完成?
问题2:关于T/C的PWM功能的。 之一:若T/C0工作于8位相位修正PWM模式下来产生PWM,而且允许比较匹配中断。那么会不会出现如下情况:在一个PWM周期中,当TCNT0上升计数和下降计数到与比较寄存器值相等时将各产生一次比较匹配中断? 如果会的话,在比较匹配ISR中我该如何区分这两次中断呢? 之二:更新PWM中的比较寄存器的值后,是否在下一个计数周期开始时(T/C0回到0)才生效?
之三:我想使用多路PWM,如何做到在不更改PWM占空比设置的情况下,禁止引脚OCnX(n=0/1/2,X=A/B,下同)的输出,而把该引脚当成普通的I/O口使用?我看到手册中有这样的描述:“设置位域COMnX1:COMnX0为00时,将执行正常的端口操作,不与引脚OCnX相连”。是否这样设置时,即便PWM将仍然 工作,只是引脚OCnX的输出改为由PortX决定,若重新设置COMnX1:COMnX0,则PWM波形将会重新加载在对应引脚上?如果是的话,那么此时的比较匹配中断还会发生吗?
其实这样问题我本应该自己在硬件上测试,无奈尚无硬件,AVR单片机也是刚刚接触,不甚了解,故发到这里来劳烦大家,望指点一二,谢谢!
|