世纪电源网社区logo
社区
Datasheet
标题
返回顶部
未解决

求各位大神帮忙看看TDC-GP2时间测量函数

[复制链接]
查看: 1578 |回复: 4
1
ad304581
  • 积分:17
  • |
  • 主题:1
  • |
  • 帖子:3
积分:17
LV1
本网技工
  • 2016-8-14 21:34:33
30问答币
void spi_init(void)
{
P6DIR |=BIT0;//SCK
P6DIR |=BIT1;//SSN
P6DIR &=~(BIT2);//SO
P6DIR |=BIT3;//SI
P6OUT &=~(BIT0);//SCK
P6OUT |=BIT1;//SSN
}
void spi_write32(unsigned long wbuf32)
{
unsigned char cnt;
unsigned long tmp=0x80000000;
spi_enable();
for(cnt=32;cnt>0;cnt--)
    {
     if((wbuf32&tmp)>0)
       send_one();
     else
       send_zero();
     tmp /=2;
    }
  spi_disable();
return;
}
///////////////////////////////////////

/////////////读数据//////////////////
unsigned long spi_read()   
{
unsigned char cnt;
unsigned long tmp=0x80000000;
unsigned long  rbuf32=0x00000000;
spi_disable();
for(cnt=32;cnt>0;cnt--)
    {
     P6OUT |=BIT0;//SCL
     _NOP();
    if((P6IN &0X04)>0X00)//P6.2 SO
       rbuf32 |=tmp;
     tmp /=2;
     P6OUT &=~(BIT0);//SCL
     _NOP();
    }
  spi_disable();
return(rbuf32);
}
void GP2_TMSTAT()
{
unsigned char STAT=0xB4;
unsigned long a;
unsigned int  b;
unsigned char BZ1=0x00;
while((P6IN&0x10)==0x01)//判断中断置位否
      _NOP();
spi_write8(STAT);
_NOP();
a=spi_read();
b=(a>>16);
if((b&0x0600)==0)
    BZ1 &=0xfe;
else
    BZ1 |=0x01;//置溢出预计数器或溢出TDC标志
}
//===========================================//

//=============GP2时间测量START信号==========//
void GP2_START(void)
{
P5OUT &=~(BIT2);//START
_NOP();
P5OUT |=(BIT2);
_NOP();
P5OUT &=~(BIT2);
_NOP();
return;
}
//===========================================//

//========读取测量结果子程序=================//
unsigned long GP2_JG()
{
unsigned long RES_0;
unsigned char RES_0_ADR=0XB0;
//float T_JG;
spi_write8(RES_0_ADR);
_NOP();
RES_0=spi_read();
return(RES_0);
}   
//==========================================//




//============测试GP2程序==============
unsigned long test(void)
{
   unsigned long M=0x00000000;
unsigned long REG1=0x80983412;
unsigned char cnt;
unsigned char tmp=0x80;   //WRITE_ADR
unsigned char test_reg=0xB5;
unsigned char test_reg0=0x00;
unsigned char start_cycle=0x01;  //START_CYCLE
unsigned char TDC_init=0x70;      //INIT

//============测试通讯===============//
spi_write32(REG1);
spi_write8(test_reg);
_NOP();
for(cnt=8;cnt>0;cnt--)
    {
     P6OUT |=BIT0;//SCL
     _NOP();
     if((P6IN &0X04)>0X00)//P6.2 SO
        test_reg0 |=tmp;
     tmp /=2;
     P6OUT &=~(BIT0);//SCL
     _NOP();
    }
spi_disable();

//===================================//
//==========脉冲产生测试=============//
spi_write8(start_cycle);
_NOP();
spi_disable();

//===================================//

//============时钟校准===============//
GP2_cal();

spi_disable();

//===================================//
//======时间测量测试=========//
spi_write8(TDC_init);
P5OUT |=(BIT3);//EN_START
P5OUT |=(BIT1);//EN_STOP
GP2_START();
//_NOP();
//_NOP();
//_NOP();
//_NOP();
// _NOP();
// _NOP();
//_NOP();
//_NOP();
//_NOP();
//_NOP();
_NOP();
P5OUT |=BIT0;//STOP信号
_NOP();
GP2_TMSTAT(); //GP2状态读取
M=GP2_JG();
spi_disable();
return M;

}
void lcdint()
{
  WDT_Init();
                    //看门狗设置

           //系统初始化,设置IO口属性
    Port_init();                        //系统初始化,设置IO口属性
    delay_ms(100);                      //延时100ms
    LCD_init();                         //液晶参数初始化设置
    LCD_clear();                        //清屏
    LCD_Desk();
}
void main(void)
{
   lcdint();
P5DIR |=BIT1;//EN_STOP   P5.1结束
P5DIR |=BIT2;//START
P5DIR |=BIT3;//ENSTART  p5.3 开始
P6DIR &=~(BIT4);//INTN
P6DIR |=BIT5;//RSTN
P5OUT &=~(BIT1);
P5OUT &=~(BIT2);
P5OUT &=~(BIT3);
P5OUT &=~(BIT0);//stop
//display_numl(GP2_JG());
spi_init();//SPI口初始化
GP2_RESET();//上电复位
GP2_init();//GP2初始化
  display_numl(test());  //测试程序


}
应用模拟测量,但是测量结果一直是00000000,弄了好久都没成功,向大神帮忙指点!!!!

caijiantai
  • 积分:1948
  • |
  • 主题:1
  • |
  • 帖子:451
积分:1948
LV6
高级工程师
  • 2016-8-15 11:50:09
  • 倒数4
 
这论坛应该搞硬件的偏多。。
ad304581
  • 积分:17
  • |
  • 主题:1
  • |
  • 帖子:3
积分:17
LV1
本网技工
  • 2016-8-15 12:14:46
  • 倒数3
 
我是在做msp430和tdc-gp2的超声波测距,但现在单片机对tdc-gp2的控制都没实现,所以求给位大神帮忙看看,已经搞了几个月了,谢谢!!!!

DB_GP21_cn.pdf

4.93 MB, 下载次数: 45, 下载积分: 财富 -2

GP2的官方文件

running
  • 积分:105
  • |
  • 主题:0
  • |
  • 帖子:1
积分:105
LV2
本网技师
  • 2016-8-18 16:49:02
  • 倒数2
 
用示波器抓下时序,看看和文档要求的是否一模一样,如果一样的话还不能读数据,那就是硬件问题了
ad304581
  • 积分:17
  • |
  • 主题:1
  • |
  • 帖子:3
积分:17
LV1
本网技工
最新回复
  • 2016-8-30 16:55:30
  • 倒数1
 
谢谢,感觉是超声波驱动电路的问题,正在想办法替代!这是一篇论文的驱动电路图
捕获.PNG
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2023 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号