搜索
bottom↓
回复: 37

ATtiny13进入掉电模式后,引脚电平变化中断使能,请问可以用高电平唤醒吗?

[复制链接]

出0入0汤圆

发表于 2007-12-4 17:37:49 | 显示全部楼层 |阅读模式
现在遇到这么一个问题:ATtiny13进入掉电模式后,引脚电平变化中断使能,引脚电平由低到高无法唤醒MCU,如果用高到低就可以唤醒了。也不知道咋搞的?资料上又没有详细说明。

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2007-12-4 19:49:09 | 显示全部楼层
只能用低电平唤醒,电平变化不行!!!去看看资料有的

出0入0汤圆

 楼主| 发表于 2007-12-6 12:05:30 | 显示全部楼层
能指出在资料的哪个地方有介绍吗?俺实在找不到,也看不明白。(资料都看了N遍)
谢谢!

出0入0汤圆

 楼主| 发表于 2007-12-6 12:08:01 | 显示全部楼层
既然是引脚变化中断,那么应该不管是低到高,还是高到低都能唤醒,才对吗?实在不明白。请指点。谢谢!

出0入0汤圆

发表于 2007-12-6 13:13:38 | 显示全部楼层
可以的,楼上的理解正确。

出0入0汤圆

 楼主| 发表于 2007-12-6 16:11:01 | 显示全部楼层
理解归理解,但是实际应用中,引脚电平由低到高无法唤醒MCU,用高到低就可以唤醒,搞不明白。不知道是那个地方没有设置好,还是MCU的引脚变化中断本来就是这样。郁闷呀

出0入0汤圆

 楼主| 发表于 2007-12-6 16:15:43 | 显示全部楼层
有哪位兄弟用过这种功能呀?烦请赐教!

出0入0汤圆

发表于 2007-12-6 16:22:24 | 显示全部楼层
我用T13,引脚电平由低到高变化唤醒MCU,用做第二电源上电检测.(第二电源下电后T13休眠).

每上电10次大约T13能被唤醒2-5次. 实在没办法,后来放弃了

出0入0汤圆

发表于 2007-12-6 17:57:58 | 显示全部楼层

出0入0汤圆

发表于 2007-12-6 18:20:24 | 显示全部楼层


我的理解:
不会说你只设成下降沿触发isc01,00//1,0.
你设成isc01,00//0,1就会得到你想要的中断唤醒.

要是int0话只有电平中断.

出0入0汤圆

 楼主| 发表于 2007-12-6 22:28:51 | 显示全部楼层
楼上所说的,设置ISC01和ISC02,就可以达到目的。但是我觉得ISC01和ISC02好象是针对INT0所说的,对引脚变化中断能起作用吗?

出0入0汤圆

 楼主| 发表于 2007-12-6 22:41:42 | 显示全部楼层
楼上贴出来的资料,我早就看过好几遍,好象没有明确说明什么电平或触发沿能唤醒。主要讲的都是INT0。对引脚变化中断还是讲得有点模糊。

出0入0汤圆

发表于 2007-12-7 12:19:12 | 显示全部楼层
表格中的关于掉电模式只有两个中断能唤醒。一个是int0信号,另一个是看门狗。而且note:1 写得清清楚楚 INT0只有电平中断。

不知道楼主是怎么看好几遍的。怎么理解只有电平中断的含义,……

出0入0汤圆

发表于 2007-12-7 12:55:08 | 显示全部楼层
通病.

根本不看手册,或看不懂手册?!

出0入0汤圆

发表于 2007-12-7 15:46:17 | 显示全部楼层
低电平唤醒,可以用三极管反转一下,不就是高电平唤醒了吗?

出0入0汤圆

 楼主| 发表于 2007-12-7 22:20:47 | 显示全部楼层
原本想用高电平来唤醒,但是不知道怎么搞的,老是唤不醒。最后就用了个三极管将其转为低电平来唤醒,用低电平唤醒就很好使了。不过这样就会增加元件,产品成本增高。要是能用高电平唤醒那就多好呀。也不知道高电平到底能不能唤醒(引脚变化中断从掉电模式唤醒),烦请知道的兄弟告诉俺一下,要怎么设置才可以?谢谢!

出0入0汤圆

 楼主| 发表于 2007-12-7 22:26:35 | 显示全部楼层
对于8楼中的表格,我是这样理解的:INT0和引脚变化中断、看门狗可以将MCU从掉电模式中唤醒,但是INT0只能用电平来唤醒,而引脚变化中断就不是很清楚了,可不可以理解成高低电平和触发沿都可以唤醒呢?

出0入0汤圆

发表于 2007-12-7 22:34:48 | 显示全部楼层
8楼图:
引脚(除int0)变化中断,理解成高低电平和触发沿都可以唤醒.

出0入0汤圆

 楼主| 发表于 2007-12-7 22:43:26 | 显示全部楼层
请问17楼的,要怎么设置呀?我现在遇到的问题就是高电平唤不醒,低电平就可以,是不是哪里没有设置好呀?

出0入0汤圆

发表于 2007-12-8 00:32:28 | 显示全部楼层
手册上已经写得很清楚,掉电模式下所有的时钟都不工作,手册中只有(INT0与引脚变化)和(看门狗中断)打“X”,也就是说只有在这两种情况下可以使CPU从掉电模式中唤醒,在Note中还强调“INT0只有电平中断”。并且必须保持外部电平一定的时间,。什么INT0只有电平中断有效呢??因为引脚变化中断是需要I/O时钟工作的。所以你只能使用低电平唤醒。

出0入0汤圆

发表于 2007-12-8 01:47:43 | 显示全部楼层
.include "tn13def.inc"
        .DEF CONUM=R17
        .DEF TEMPN=R16
        .ORG 0X00
        RJMP RESET
        RJMP EX_INT0
        RJMP PCINT0_T
        RJMP TIM0_OVF
        RJMP EE_RDY
        RJMP ANA_COMP
        RJMP TIM0_COMPA
        RJMP TIM0_COMPB
        RJMP WATCHDOG
        RJMP ADCC


.ORG 0X000A
RESET:

                LDI R16,LOW(RAMEND)       
                OUT SPL,R16

               
               
                ldi r19,0xff
                ldi r20,0x00
       
                out ddrb,R20
               
                out portb,r19

;;//初始化程序//;;
;;
        LDI R22,0X02

        SEI;;置全局中断;;


        LDI TEMPN,0X60;;充许INT0中断;;
        OUT GIMSK,TEMPN;;通用中断屏蔽寄存器;;- INT0 PCIE - ,- - - -;;0X3B


;;        OUT GIFR,TEMPN;;通用中断寄存器;;- INTF0 PCIF - - - - -;;0X3A
       

        LDI TEMPN,0X10;;充许PCINT4引脚中断;;
        OUT PCMSK,TEMPN;;


    LDI TEMPN,0X02
        OUT TIMSK0,TEMPN;;定时t/c0中断屏蔽寄存器- - - - ocie0b ocei0a toie0 -;;0x39

        LDI TEMPN,0X00
        OUT TIFR0,TEMPN;;定时t/c中断寄存器;;- - - - ocf0b ocf0a tov0 -;;0x38

        LDI CONUM,0XFD
        OUT TCNT0,CONUM;;定时t/c存器;;0x32
   
        LDI TEMPN,0X03
        OUT MCUCR,TEMPN;;MCU控制器- PUD SE SM1 SM0 - SISC01 SISC00 ;;0X35

        LDI TEMPN,0X00
        OUT TCCR0A,TEMPN;;T/C控制寄存器A;;COM0A1 COM0A0 COM0B1 COM0B0 - - WGM01 WGM00;;0X2F
                ;;wgm2-wgm0波形产生模式;;000正常模式;;


        LDI TEMPN,0X07
        OUT TCCR0B,TEMPN;;T/C控制寄存器b;;FOC0A FOC0B - - // WGM02 CS02 CS01 CS00;;0X33
                ;;foc0a仅在wgm指明非pwm模式时才有效。
                ;;cs2-cs0;;00无时钟不工作
                ;;01clk/io1;02/clk/io/8;;03cli/io/64;;04clkio/256;;05cliio/1024;;
                ;;06时钟由t0引脚输入,下降沿触发
                ;;07早钟由t0引脚输入,上升沿触发;;T0/PB2/7脚







SBI DDRB,0
LOOP:

NOP

NOP
        SBI PORTB,0;;EN=H


        NOP
NOP
NOP

LDI TEMPN,0X33
        OUT MCUCR,TEMPN;;MCU控制器- PUD SE SM1 ,SM0 - SISC01 SISC00 ;;0X35

        SLEEP;;;;;;由表及3脚上升沿唤醒;;
        NOP
        NOP

      


        SBI PORTB,0;;EN=H


        NOP
        NOP
        NOP
        CBI PORTB,0;;EN=L
        NOP
        NOP


        SBI PORTB,0;;EN=H


        NOP
        NOP
        NOP
        CBI PORTB,0;;EN=L
        NOP
        NOP


RJMP LOOP       



LDI TEMPN,0X30
OUT MCUCR,TEMPN
SLEEP
NOP




NOP
CLI
LDI TEMPN,0X80
OUT CLKPR,TEMPN
LDI TEMPN,0X04
OUT CLKPR ,TEMPN
SEI
NOP




EX_INT0:
NOP
NOP


       

        NOP
        NOP
        NOP
        CBI PORTB,0;;EN=L
        NOP
        NOP

NOP
NOP
NOP
RETI


PCINT0_T:
NOP
SBI PORTB,0;;EN=H


RETI

TIM0_OVF:
;LDI TEMPN,0XF0
;OUT TCNT0,TEMPN
NOP

RETI

EE_RDY:

RETI

ANA_COMP:
RETI

TIM0_COMPA:

RETI

TIM0_COMPB:

RETI

WATCHDOG:

RETI

ADCC:

RETI

出0入0汤圆

 楼主| 发表于 2007-12-8 17:21:36 | 显示全部楼层
多谢楼上兄弟的指点。俺今天做了几个实验,最后得出的结论是:ATiny13处于掉电模式中,引脚变化中断使能,高、低电平可以使MCU进入引脚变化中断服务子程序,但高电平不能唤醒MCU,只有低电平才可以唤醒MCU。(能进入中断程序与MCU已被唤醒了应该是两码事。进入了中断程序,但并不意味着单片机已经唤醒了。)
各位同意兄弟的说法吗?请赐教!

出0入0汤圆

 楼主| 发表于 2007-12-9 18:00:32 | 显示全部楼层
顶!

出0入0汤圆

发表于 2007-12-9 23:12:51 | 显示全部楼层
芯片处在掉电模式中,你如何看出和得到"MCU进入了中断服务子程序"?

另外手册中根本没有高电平中断一说,你的"高电平"中断是如何设置的?

出0入0汤圆

 楼主| 发表于 2007-12-10 00:23:51 | 显示全部楼层
对于楼上提到的疑问,其实只要做些小实验就可以知道了。
实验:在引脚变化中断服务子程序中写一个灯闪的指令,对使能的引脚施加高或低电平,就可以看到灯闪提示,说明单片机已经进入了中断服务程序;此时还不能确认单片机是否被唤醒。需进一步做实验,可以在主函数中写些带有输出指示的指令。当在引脚变化中断使能的引脚上施加高电平时,只能看到灯闪现象,不能看到主函数中指令执行的现象,说明高电平能使单片机进入中断服务程序,但不能唤醒单片机;当在引脚变化中断使能的引脚上施加低电平的时候,可以看到灯闪现象,而且还可以看到主函数中指令执行情况,说明低电平能使单片机进入中断服务程序,还可以唤醒单片机。(确保主函数中带有输出指示的指令正确)


对于引脚变化中断,资料中没有明确指出什么(电平或触发沿)可以触发中断及什么可以唤醒单片机。更没有哪个寄存器可以针对这个去设置。(INT0就有ISC01和ISC02可设置触发中断的方式,而且只有电平才能唤醒单片机)


资料中把引脚变化中断和INT0放在一起讲叙的,但我们不能把他们想象成一样的,差别还是很大的。


大家认为呢??

出0入0汤圆

发表于 2007-12-10 08:22:52 | 显示全部楼层
本人用过M48的引脚变化中断,但手册中并没有说明变化的幅值多少以内会引发中断,此处让我大吃亏!实验中发现最低300mV的变化就能触发中断,如此微小的变化一般的干扰就可以实现,后来只能放弃引脚变化中断方案,改为直接读取引脚电平.
最后奉劝各位:慎用引脚变化中断!

出0入0汤圆

 楼主| 发表于 2007-12-10 10:13:13 | 显示全部楼层
引脚变化中断用作单片机唤醒还可以,如果要用它的中断服务程序,就象楼上所说的最好不要用。

出0入0汤圆

发表于 2007-12-10 15:38:05 | 显示全部楼层
M16的数据手册中写着的,除了低电平,别的方式都不行,楼主最好看下ATtiny13的数据手册中关于外部中断的一节,如果说边沿触发要用到I/O时钟的话就是不行的.

出0入0汤圆

 楼主| 发表于 2007-12-10 17:50:33 | 显示全部楼层
我是从实验中得出:引脚变化中断使能,低电平可以把MCU从掉电模式中唤醒,而高电平不行,不知道为什么?
哪位兄弟能从I/0口结构上分析一下为什么?悉耳恭听!(边沿触发是不能唤醒单片机的,这点俺已经明白了。原因就是在掉电模式下,I/O时钟是关闭的。)

出0入0汤圆

发表于 2007-12-10 18:01:14 | 显示全部楼层
楼主,我在27楼写了

出0入0汤圆

 楼主| 发表于 2007-12-11 12:08:22 | 显示全部楼层
我的意思是说:从I/O结构上分析(逻辑门),为什么高电平不能唤醒?

出0入0汤圆

发表于 2007-12-11 20:37:41 | 显示全部楼层
完全可以使用电平变化唤醒。本人一年半以前作过这个实验的,采用引脚中断模式。我当时遇到了跟你一样的问题,我问师傅,师傅告诉我说使用中断必须给引脚加上下拉电阻,我加了下拉电阻就OK了。楼主是不是没有加上下拉电阻!
呵呵,我师傅是研究生!

出0入0汤圆

 楼主| 发表于 2007-12-12 12:13:36 | 显示全部楼层
(1)如果是高到低唤醒(最后维持低),就使用上拉电阻;(2)如果是低到高唤醒(最后维持高),就使用下拉电阻。
但是第二种情况是无法唤醒的。不知道楼上唤醒是用那种情况?

出0入0汤圆

发表于 2007-12-12 13:26:30 | 显示全部楼层
(2(如果是低到高唤醒(最后维持高),上例程序就是用此方法唤醒。

出340入0汤圆

发表于 2009-12-20 15:14:26 | 显示全部楼层
我用的ATtiny13可以用INT0低电平复位掉电,不过复位后程序全部从头开始运行了,应该是运行掉电程序后一条命令才对啊...,有朋友遇到过么?

出0入0汤圆

发表于 2011-6-3 23:19:29 | 显示全部楼层
引脚中断的入口地址是多少啊?

出0入0汤圆

发表于 2012-2-26 15:17:56 | 显示全部楼层
mark!

出0入0汤圆

发表于 2012-10-15 13:51:50 | 显示全部楼层
不错的资料!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-12 15:39

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

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