ATtiny13进入掉电模式后,引脚电平变化中断使能,请问可以用高电平唤醒吗?
现在遇到这么一个问题:ATtiny13进入掉电模式后,引脚电平变化中断使能,引脚电平由低到高无法唤醒MCU,如果用高到低就可以唤醒了。也不知道咋搞的?资料上又没有详细说明。 只能用低电平唤醒,电平变化不行!!!去看看资料有的 能指出在资料的哪个地方有介绍吗?俺实在找不到,也看不明白。(资料都看了N遍)谢谢! 既然是引脚变化中断,那么应该不管是低到高,还是高到低都能唤醒,才对吗?实在不明白。请指点。谢谢! 可以的,楼上的理解正确。 理解归理解,但是实际应用中,引脚电平由低到高无法唤醒MCU,用高到低就可以唤醒,搞不明白。不知道是那个地方没有设置好,还是MCU的引脚变化中断本来就是这样。郁闷呀 有哪位兄弟用过这种功能呀?烦请赐教! 我用T13,引脚电平由低到高变化唤醒MCU,用做第二电源上电检测.(第二电源下电后T13休眠).
每上电10次大约T13能被唤醒2-5次. 实在没办法,后来放弃了 http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_185894.JPG http://cache.amobbs.com/bbs_upload782111/files_8/ourdev_185898.jpg
我的理解:
不会说你只设成下降沿触发isc01,00//1,0.
你设成isc01,00//0,1就会得到你想要的中断唤醒.
要是int0话只有电平中断. 楼上所说的,设置ISC01和ISC02,就可以达到目的。但是我觉得ISC01和ISC02好象是针对INT0所说的,对引脚变化中断能起作用吗? 楼上贴出来的资料,我早就看过好几遍,好象没有明确说明什么电平或触发沿能唤醒。主要讲的都是INT0。对引脚变化中断还是讲得有点模糊。 表格中的关于掉电模式只有两个中断能唤醒。一个是int0信号,另一个是看门狗。而且note:1 写得清清楚楚 INT0只有电平中断。
不知道楼主是怎么看好几遍的。怎么理解只有电平中断的含义,…… 通病.
根本不看手册,或看不懂手册?! 低电平唤醒,可以用三极管反转一下,不就是高电平唤醒了吗? 原本想用高电平来唤醒,但是不知道怎么搞的,老是唤不醒。最后就用了个三极管将其转为低电平来唤醒,用低电平唤醒就很好使了。不过这样就会增加元件,产品成本增高。要是能用高电平唤醒那就多好呀。也不知道高电平到底能不能唤醒(引脚变化中断从掉电模式唤醒),烦请知道的兄弟告诉俺一下,要怎么设置才可以?谢谢! 对于8楼中的表格,我是这样理解的:INT0和引脚变化中断、看门狗可以将MCU从掉电模式中唤醒,但是INT0只能用电平来唤醒,而引脚变化中断就不是很清楚了,可不可以理解成高低电平和触发沿都可以唤醒呢? 8楼图:
引脚(除int0)变化中断,理解成高低电平和触发沿都可以唤醒. 请问17楼的,要怎么设置呀?我现在遇到的问题就是高电平唤不醒,低电平就可以,是不是哪里没有设置好呀? 手册上已经写得很清楚,掉电模式下所有的时钟都不工作,手册中只有(INT0与引脚变化)和(看门狗中断)打“X”,也就是说只有在这两种情况下可以使CPU从掉电模式中唤醒,在Note中还强调“INT0只有电平中断”。并且必须保持外部电平一定的时间,。什么INT0只有电平中断有效呢??因为引脚变化中断是需要I/O时钟工作的。所以你只能使用低电平唤醒。 .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 多谢楼上兄弟的指点。俺今天做了几个实验,最后得出的结论是:ATiny13处于掉电模式中,引脚变化中断使能,高、低电平可以使MCU进入引脚变化中断服务子程序,但高电平不能唤醒MCU,只有低电平才可以唤醒MCU。(能进入中断程序与MCU已被唤醒了应该是两码事。进入了中断程序,但并不意味着单片机已经唤醒了。)
各位同意兄弟的说法吗?请赐教! 顶! 芯片处在掉电模式中,你如何看出和得到"MCU进入了中断服务子程序"?
另外手册中根本没有高电平中断一说,你的"高电平"中断是如何设置的? 对于楼上提到的疑问,其实只要做些小实验就可以知道了。
实验:在引脚变化中断服务子程序中写一个灯闪的指令,对使能的引脚施加高或低电平,就可以看到灯闪提示,说明单片机已经进入了中断服务程序;此时还不能确认单片机是否被唤醒。需进一步做实验,可以在主函数中写些带有输出指示的指令。当在引脚变化中断使能的引脚上施加高电平时,只能看到灯闪现象,不能看到主函数中指令执行的现象,说明高电平能使单片机进入中断服务程序,但不能唤醒单片机;当在引脚变化中断使能的引脚上施加低电平的时候,可以看到灯闪现象,而且还可以看到主函数中指令执行情况,说明低电平能使单片机进入中断服务程序,还可以唤醒单片机。(确保主函数中带有输出指示的指令正确)
对于引脚变化中断,资料中没有明确指出什么(电平或触发沿)可以触发中断及什么可以唤醒单片机。更没有哪个寄存器可以针对这个去设置。(INT0就有ISC01和ISC02可设置触发中断的方式,而且只有电平才能唤醒单片机)
资料中把引脚变化中断和INT0放在一起讲叙的,但我们不能把他们想象成一样的,差别还是很大的。
大家认为呢?? 本人用过M48的引脚变化中断,但手册中并没有说明变化的幅值多少以内会引发中断,此处让我大吃亏!实验中发现最低300mV的变化就能触发中断,如此微小的变化一般的干扰就可以实现,后来只能放弃引脚变化中断方案,改为直接读取引脚电平.
最后奉劝各位:慎用引脚变化中断! 引脚变化中断用作单片机唤醒还可以,如果要用它的中断服务程序,就象楼上所说的最好不要用。 M16的数据手册中写着的,除了低电平,别的方式都不行,楼主最好看下ATtiny13的数据手册中关于外部中断的一节,如果说边沿触发要用到I/O时钟的话就是不行的. 我是从实验中得出:引脚变化中断使能,低电平可以把MCU从掉电模式中唤醒,而高电平不行,不知道为什么?
哪位兄弟能从I/0口结构上分析一下为什么?悉耳恭听!(边沿触发是不能唤醒单片机的,这点俺已经明白了。原因就是在掉电模式下,I/O时钟是关闭的。) 楼主,我在27楼写了 我的意思是说:从I/O结构上分析(逻辑门),为什么高电平不能唤醒? 完全可以使用电平变化唤醒。本人一年半以前作过这个实验的,采用引脚中断模式。我当时遇到了跟你一样的问题,我问师傅,师傅告诉我说使用中断必须给引脚加上下拉电阻,我加了下拉电阻就OK了。楼主是不是没有加上下拉电阻!
呵呵,我师傅是研究生! (1)如果是高到低唤醒(最后维持低),就使用上拉电阻;(2)如果是低到高唤醒(最后维持高),就使用下拉电阻。
但是第二种情况是无法唤醒的。不知道楼上唤醒是用那种情况? (2(如果是低到高唤醒(最后维持高),上例程序就是用此方法唤醒。 我用的ATtiny13可以用INT0低电平复位掉电,不过复位后程序全部从头开始运行了,应该是运行掉电程序后一条命令才对啊...,有朋友遇到过么? 引脚中断的入口地址是多少啊? mark! 不错的资料!!!
页:
[1]