微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI模拟硬件电路设计 > ADS7818读数?

ADS7818读数?

时间:10-02 整理:3721RD 点击:

尝试用硬件SPI调试7818,但是关于读数的问题有点不清楚

uint Read_Data(void)
{
uint convdata_H,convdata_L,convdata;
float Voltage;

CONV_0;
TXBUF0 = 0x00;
TXBUF0 = 0x00;
while ((IFG1 & URXIFG0) == 0); // USART0 RX buffer ready?
convdata_H = RXBUF0;
while ((IFG1 & URXIFG0) == 0); // USART0 RX buffer ready?
convdata_L = RXBUF0;
CONV_1;
convdata_H = convdata_H << 4;
convdata_L = convdata_L >>4;
convdata = convdata_H+convdata_L;

Voltage=convdata*4.999/4096;
Disp_float_num(1,2,Voltage);

return convdata;
}

/************主函数************/

#include <msp430x16x.h>
#include "ADS7818.h"
#include "cryfuncs.h"

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
Ini_Lcd();
ME1 |= USPIE0; // Enable USART0 SPI mode
UCTL0 |= CHAR + SYNC + MM; // 8-bit SPI Master **SWRST**
UTCTL0 |= CKPH + SSEL1 + SSEL0 + STC; // SMCLK, 3-pin mode
UBR00 = 0x02; // UCLK/2
UBR10 = 0x00; // 0
UMCTL0 = 0x00; // no modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
P3SEL |= 0x0E; // P3.1-3 SPI option select
P3DIR |= 0x01; // P3.0 output direction
CONV_1;
showADS7818();

while (1) // Loop
{
volatile unsigned int i;
i = Read_Data();
}
}

这样写可以吗?运行以后有数据但是数据不对而且乱跳,不知道是哪里的问题。。

先验证一下时序波形, 特别是 SPI 的波形边沿设置是否匹配

看了一下时钟的波形是对的,但是输出的波形就很奇怪了。。

CONV+SCLK

这样看CONV和时钟的间隔没有符合手册上的5us。。

DATA+SCLK..... 

 (什么鬼。。。)

此时输入1V

还有就是用示波器的探头接到单片机的地的时候,读数是对的,但是会有400-500多mv的偏差,把探头的地松开,读数就不对了,这是为什么?

ps:芯片用的模拟地和模拟VDD,我试过用数字供电,但结果不对

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top