[其它应用]

读电压电流有效值都是0

[复制链接]
376|8
手机看帖
扫描二维码
随时随地手机跟帖
pengf|  楼主 | 2020-3-1 16:59 | 显示全部楼层 |阅读模式
void EMU_init(void)
{
    EMUSR = 0x00; //清控制寄存器
    LDOCON = 0xA0;//开启计量模拟前端电源
    WriteEMU_REG(EMUCFG3, 0x0000E8);//开启Vref
    Delayms(1);
        WriteEMU_REG(EMUCFG2, 0x9FF333);
    //配置计量其它参数,如 W1GAIN,P1CAL,W1ATTOS 等
    Delayms(60);
        WriteEMU_REG(EMUCFG0, 0x000037);
        Delayms(1);
        WriteEMU_REG(EMUCFG0, 0x000007);
    EMUSR = 0x80;
        Delayms(1000);
        WDR;
    WriteEMU_REG(EMUCFG1,0x2000c5);
    EMUIE = 0x00; //禁止脉冲输出


}
uint32_t ReadEMU_REG(uint8_t sadr)
{
    uint32_t val;
   
    EA=0;
    val=0x00;
   
    EADR=sadr&0x7F;
   
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP

        _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    val = EDTAH;
        Delayus(32);
    val = val<<8;
    val |= EDTAM;
        Delayus(32);
    val = val<<8;
    val |= EDTAL;
   
    EA=1;
   
    return(val);
}


void WriteEMU_REG(uint8_t sadr,uint32_t val)
{
    EA=0;
    EADR=0x00;
   
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    EDTAH=(uint8_t)(val>>16)&0xFF;
        Delayus(32);
    EDTAM=(uint8_t)(val>>8)&0xFF;
        Delayus(32);
    EDTAL=(uint8_t)(val&0xFF);
        Delayus(32);
    EADR=sadr|0x80;
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    _nop_();  //一个 NOP
    EA=1;
        
}
系统初始化是这样的,不知道问题出在哪里,读电压电流有效值都是0.

使用特权

评论回复
pengf|  楼主 | 2020-3-1 17:02 | 显示全部楼层
没人用过这个芯片吗 带计量功能的 ??

使用特权

评论回复
zwll| | 2020-3-1 17:05 | 显示全部楼层
现在最新的应该用SH79F169B了。

使用特权

评论回复
pengf|  楼主 | 2020-3-1 17:08 | 显示全部楼层
看寄存器配置应该是正确的。1.量下AVCC和VREF电压是否正确;2、检查寄存器值是否写进去。

使用特权

评论回复
pengf|  楼主 | 2020-3-1 17:11 | 显示全部楼层
应该是我硬件的问题。我把VREF接到3.3V 上面去了。我在试试。谢谢你的提醒。十分感谢!!

使用特权

评论回复
yufe| | 2020-3-1 17:18 | 显示全部楼层
你好,我使用时器0,为何不进中断呢

使用特权

评论回复
pengf|  楼主 | 2020-3-1 17:22 | 显示全部楼层
那不可能的,51内核的单片机,使用起来跟51一样,看看自己总中断是否关闭了。寄存器配置是否正确。

使用特权

评论回复
huanghuac| | 2020-3-1 17:31 | 显示全部楼层

哦。定时器0我调了很久,都不进中断,后面不得已我改用定时器1就OK了。
定时器0初始化:
void Init_Timer0(void)
{                                                                          
   TCON1=Bin(00000000);         
   TMOD =Bin(00010001);                                 
   TL0  =T0_1MS_CNT&0x00ff;        
   TH0  =(T0_1MS_CNT>>8)&0xff;

   TF0=0;                           
   TR0 = 1;                                                         
   ET0 = 1;
}
中断函数:
void Timer0_ISP(void) interrupt 1
{
   static uint8 T0_ms4_cnt=4;
   static uint8 ms20_cnt=20;
   static uint16 Timer_2s=1000;

   EA        =        0;        
   TL0=T0_1MS_CNT&0xff;                                 
   TH0=(T0_1MS_CNT>>8)&0xff;
   
   if(--T0_ms4_cnt==0x00)
   {
      T0_ms4_cnt=4;
          gT_4ms_Flag=1;
   }
   if(--ms20_cnt==0)
   {
      ms20_cnt=20;
          Key_STATUS();
   }        
        
         if(--Timer_2s>0)
         {
                  Timer_2s--;
                 if(Timer_2s==0)
                 {
                        Timer_2s=1000;
                  Timer_1s_Flag=1;
                 }
         }

         
   TF0=  0;                                
   EA=1;        
}

定时器1初始化:
void Init_Timer1(void)
{                                                                          
   TCON1=Bin(00000000);         
   TMOD =Bin(00010001);                                 
   TL1  =T0_1MS_CNT&0x00ff;        
   TH1  =(T0_1MS_CNT>>8)&0xff;

   TF1=0;                           
   TR1 = 1;                                                         
   ET1 = 1;
}

中断函数:
void Timer1_ISP(void) interrupt 3
{
        static uint16 Timer_2s=100;
        
EA = 0;              
TF1 = 0;           
TL1=T0_1MS_CNT&0xff;           
TH1=(T0_1MS_CNT>>8)&0xff;  
  

        if(--Timer_2s>0)
         {
                  Timer_2s--;
                 if(Timer_2s==0)
                 {
                        Timer_2s=100;
                  Timer_1s_Flag=1;
                 }
         }
         
        Flag_KeyScan=1;
         
        if(Timer_OpreationRelay>0)
        {
                Timer_OpreationRelay--;
        }
        else
        {
                Relay_On_Disable();
                Relay_Off_Disable();
        }

EA=1;         
}

使用特权

评论回复
pengf|  楼主 | 2020-3-1 17:35 | 显示全部楼层

嗯,那我按大家的说法挨个排查一下,谢谢哈

使用特权

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

本版积分规则

718

主题

10129

帖子

3

粉丝