打印

5437低功耗降不下去,8.6MA,而且AD数据采集一直不变 急

[复制链接]
1200|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuyuqiong1|  楼主 | 2014-7-14 10:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
int main(void)  
{
    WDTCTL = WDTPW + WDTHOLD;                   // 停止看门狗  

//    clock_config();                             // 初始化时钟  
    adc12_config();                             // 初始化ADC12  
    uart_config();                              //初始化UART  

    TA1CCTL0 = CCIE;                            // 使能TA1CCR0,比较匹配中断  
    TA1CCR0 = 1092;                            // 初始化最大值,发生比较匹配中断频率 32768/32768 = 1Hz  
    TA1CTL = TASSEL_1 + MC_1 + TACLR;           // 选择ACLK,最大值为CCR0,清除计数值  

    _EINT();                                    // 初始化全局中断  

    P1DIR = BIT0|BIT1;  //控制LED1,2 输出

    P8SEL &= 0xFE;
    P8DIR |= BIT0;
    P8OUT &= 0xFE;  //IC9 en 拉低输出2.8V供电


    P7SEL &= 0xFB;
    P7DIR |=BIT2;
    P7OUT |=BIT2;  //p7.2   驱动放大器使能


    P4SEL = 0x00;
    P4DIR |= BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6;
    P4OUT = 0x20;//使能IO,驱动几个芯片的
    P7OUT &= 0xFB;


    P4OUT &= 0xF9;
    __delay_cycles(5000);
    P4OUT |= 0x06;
//    __delay_cycles(1000);
//    P4OUT &= 0xF9;
//    __delay_cycles(5000);
//    P4OUT |= 0x04;
//   __delay_cycles(1000);
//    P4OUT &= 0xF9;
//        SelectChannel(0);

    while(1)  
    {  

            switch(channelset)
            {
              case 0:
                SelectChannel(0);
                 while ( !(ADC12IFG & BIT0) );           // 等待转换完成  
                ADC_DATA = ADC12MEM0;
                XZhou_LOW = (ADC_DATA &0x00ff);
                XZhou_HIG = (ADC_DATA &0xff00) >> 8;
                ++channelset;
               break;
              case 1:
                SelectChannel(1);
                 while ( !(ADC12IFG & BIT0) );           // 等待转换完成  
                ADC_DATA = ADC12MEM0;
                YZhou_LOW = (ADC_DATA &0x00ff);
                YZhou_HIG = (ADC_DATA &0xff00) >> 8;                 
                ++channelset;
                ++channelset;               
               break;
              case 2:
                break;
            case 3:
                SelectChannel(3);
                 while ( !(ADC12IFG & BIT0) );           // 等待转换完成  
                ADC_DATA = ADC12MEM0;
                ZZhou_LOW = (ADC_DATA &0x00ff);
                ZZhou_HIG = (ADC_DATA &0xff00) >> 8;
                channelset = 0;              
                break;
            default:
              break;


            }


            if(second_flag)
            {
              second_flag = 0;
              tx_buf[0] = 0xAA;
              tx_buf[1] = XZhou_LOW;
              tx_buf[2] = XZhou_HIG;
              tx_buf[3] = YZhou_LOW;
              tx_buf[4] = YZhou_HIG;
              tx_buf[5] = ZZhou_LOW;
              tx_buf[6] = ZZhou_HIG;
              tx_buf[7] = 0xBB;
              tx_buf[8] = crc_xor(tx_buf,8);
              uart_send(tx_buf,9);
            }
       __bis_SR_register(LPM4_bits + GIE);     // Enter LPM4, Enable interrupts
       __no_operation();                       // For debugger

    }


}  





#pragma vector=TIMER1_A0_VECTOR  
__interrupt void TIMER1_A0_ISR(void)  
{  
    second_flag = 1;

   __bic_SR_register_on_exit(LPM4_bits);             // Enter LPM3  每隔30毫秒1次
        
}




程序如上,去掉
__bis_SR_register(LPM4_bits + GIE);     // Enter LPM4, Enable interrupts
       __no_operation();                       // For debugger

  __bic_SR_register_on_exit(LPM4_bits);             // Enter LPM3  每隔30毫秒1次

这三句话,程序正常运行,电流大概在8.6MA,可以采集到实时数据,并每隔30毫秒串口发出,
但是,加入低功耗,AD采集数据一直不变,且三组数据都是一样的一组,低功耗也没降下电流还是8.6MA请问怎么回事呢?急急~~~~~~~~

相关帖子

沙发
vivilzb1985| | 2014-7-14 14:43 | 只看该作者
这个问题的还是需要看下你的AD采集的,有可能是你的AD还在采集的,你就进入了LMP3低功耗模式。

使用特权

评论回复
板凳
vivilzb1985| | 2014-7-14 14:44 | 只看该作者
让系统进入低功耗模式不要让定时进入的,而是让执行完Ad采集的再让进入的即可的。

使用特权

评论回复
地板
dirtwillfly| | 2014-7-14 15:16 | 只看该作者

按照正常的工作顺序:定时唤醒进行采样,采样结束进入低功耗状态。而不是定时进入低功耗状态
你可以观察一下你的AD采样需要多长时间,

使用特权

评论回复
5
shenmu2012| | 2014-7-14 23:07 | 只看该作者
低功耗的话需要关掉响应的模块外设的,当然还有那些不用的IO口的,最好是设置成输入状态的高阻态的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

168

帖子

2

粉丝