搜索
bottom↓
回复: 12

求助:avr PWM调速,中断导致lcd1602无法显示

[复制链接]

出0入0汤圆

发表于 2014-8-10 20:22:40 | 显示全部楼层 |阅读模式
用atmega8  timer1 做pwm输出,timer0做光栅计数,timer2作定时器,lcd1602用来显示测量速度。当使用timer1时,可能是中断的原因,导致lcd1602显示程序无法执行了,将lcd1602显示程序写进中断是不是是时间太长了。有什么好的方法?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-8-10 20:37:44 | 显示全部楼层
在写lcd的时候最好不要中断掉,先可以在操作lcd的时候关掉中断看一下,是否正常了

出0入0汤圆

 楼主| 发表于 2014-8-10 20:45:14 | 显示全部楼层
digitaltek 发表于 2014-8-10 20:37
在写lcd的时候最好不要中断掉,先可以在操作lcd的时候关掉中断看一下,是否正常了 ...

关掉timer1 显示正常

出0入0汤圆

发表于 2014-8-10 21:50:11 | 显示全部楼层
显示程序无法执行,那可能是中断太频繁了吧

出0入0汤圆

 楼主| 发表于 2014-8-10 22:04:39 | 显示全部楼层
本帖最后由 破烂王 于 2014-8-10 22:08 编辑
digitaltek 发表于 2014-8-10 21:50
显示程序无法执行,那可能是中断太频繁了吧


是这样,怎么才能对显示程序隔一断时间显示一次,写到中断里?timer1 是做为PWM工作模式,是这个定时器引起显示数据端口数据得不到时更新

出0入0汤圆

发表于 2014-8-10 22:07:26 | 显示全部楼层
一般显示程序执行的时间都比较长,写到中断的话估计会影响PWM的调整。照理pwm是硬件的,不应该非常频繁的进中断,不知道你的pwm频率达到多少

出0入0汤圆

 楼主| 发表于 2014-8-10 22:10:38 | 显示全部楼层
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;
}

出0入0汤圆

发表于 2014-8-10 22:33:55 | 显示全部楼层
按你的代码算了一下,每次中断之间能执行25×8 = 200条指令,可能比较少,降低PWM频率试试是否有改善

出0入0汤圆

发表于 2014-8-10 23:38:49 | 显示全部楼层
可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时关闭

出0入0汤圆

发表于 2014-8-10 23:45:45 | 显示全部楼层
wujin715 发表于 2014-8-10 23:38
可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时关闭 ...

楼上得可行 我就是对PWM计次 显示的

出0入0汤圆

 楼主| 发表于 2014-8-12 20:55:22 | 显示全部楼层
本帖最后由 破烂王 于 2014-8-12 21:04 编辑
wujin715 发表于 2014-8-10 23:38
可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时关闭 ...


运行timer1就不行,屏蔽就好,原来lcd1602_init 在几个定时器的下面,挪到现在的位置就好了,今天修改timer0和timer2 又不行了,不知为什么lcd1602 初始化受timer1的影响?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-8-12 21:15:33 | 显示全部楼层
如果没有IO口复用 应该不会 方法“可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时关闭”你试过了吗?

出0入0汤圆

 楼主| 发表于 2014-8-12 21:21:12 | 显示全部楼层
wujin715 发表于 2014-8-12 21:15
如果没有IO口复用 应该不会 方法“可以设定进入多少次中断以后 刷新一下1602 在刷新1602 的时候把中断暂时 ...

timer1在pwm模式不受sei()控制,只受TCCR1B=0x00; 控制,我在timer1 初始化中使这语句有效,现在只能间歇性显示,也就是pwm停止显示,启动不显示
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-4 02:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表