求助:avr PWM调速,中断导致lcd1602无法显示
用atmega8timer1 做pwm输出,timer0做光栅计数,timer2作定时器,lcd1602用来显示测量速度。当使用timer1时,可能是中断的原因,导致lcd1602显示程序无法执行了,将lcd1602显示程序写进中断是不是是时间太长了。有什么好的方法? 在写lcd的时候最好不要中断掉,先可以在操作lcd的时候关掉中断看一下,是否正常了 digitaltek 发表于 2014-8-10 20:37在写lcd的时候最好不要中断掉,先可以在操作lcd的时候关掉中断看一下,是否正常了 ...
关掉timer1 显示正常 显示程序无法执行,那可能是中断太频繁了吧 本帖最后由 破烂王 于 2014-8-10 22:08 编辑
digitaltek 发表于 2014-8-10 21:50
显示程序无法执行,那可能是中断太频繁了吧
是这样,怎么才能对显示程序隔一断时间显示一次,写到中断里?timer1 是做为PWM工作模式,是这个定时器引起显示数据端口数据得不到时更新
一般显示程序执行的时间都比较长,写到中断的话估计会影响PWM的调整。照理pwm是硬件的,不应该非常频繁的进中断,不知道你的pwm频率达到多少 digitaltek 发表于 2014-8-10 22:07
一般显示程序执行的时间都比较长,写到中断的话估计会影响PWM的调整。照理pwm是硬件的,不应该非常频繁的进 ...
20Khz
void Timer1_init()
{
//TCCR1B=0x00; //停止定时器
//TIMSK|=(1<<OCIE1A)|(1<<OCIE1B);
TIMSK=0x59;
TCCR1A=0xE0; //8 Mode, OC1A and OC1B Ouput,OC1A=~OC1B
TCCR1B=0x12;//8分频
ICR1=0x0019;//20kHz
OCR1A=0x000B;
OCR1B=0x000B;
} 按你的代码算了一下,每次中断之间能执行25×8 = 200条指令,可能比较少,降低PWM频率试试是否有改善 可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时关闭 wujin715 发表于 2014-8-10 23:38
可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时关闭 ...
{:lol:} 楼上得可行 我就是对PWM计次 显示的 本帖最后由 破烂王 于 2014-8-12 21:04 编辑
wujin715 发表于 2014-8-10 23:38
可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时关闭 ...
运行timer1就不行,屏蔽就好,原来lcd1602_init 在几个定时器的下面,挪到现在的位置就好了,今天修改timer0和timer2 又不行了,不知为什么lcd1602 初始化受timer1的影响? 如果没有IO口复用 应该不会 方法“可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时关闭”你试过了吗? wujin715 发表于 2014-8-12 21:15
如果没有IO口复用 应该不会 方法“可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时 ...
timer1在pwm模式不受sei()控制,只受TCCR1B=0x00; 控制,我在timer1 初始化中使这语句有效,现在只能间歇性显示,也就是pwm停止显示,启动不显示
页:
[1]