This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PGA113:由MSP430F6659通过SPI进行控制

Guru**** 2380860 points
Other Parts Discussed in Thread: PGA113, MSP430F6659
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/amplifiers-group/amplifiers/f/amplifiers-forum/579085/pga113-controls-by-msp430f6659-via-spi

部件号:PGA113
主题中讨论的其他部件: MSP430F6659

您好,

我试图通过SPI使用MSP430F6659来运行PGA113。 首先,我在第一个8位和第二个8位之间延迟了35.6 Us,如下一张照片所示:



我唯一能解决这一问题的方法是再次写入缓冲区,而不询问它是否可用, 如ISR所示

UCA0TXBUF= PGA_Data1;//eSCRIBE有效期
UCA0TXBUF= PGA_Data2;//eSCRIBE菜单有效

我正在使用SPI模式10。 我发送的数据是0x2A21 (Gain = 5 CH=1)或0x2A20 (Gain = 5 CH=0)。 Vref=GND,AVDD=DVDD=5V。  数据在PGA启用的时间间隔内正确发送

在不连接SPI引脚的情况下,如果CH0/CH1连接至GND,则输出为0v。  当我将直流电源连接到CH1或CH0 (根据命令),并且输入电压从0v到0.5V不等时,输出仍为0v。  这些值是我用其他PGA113制造的第二个PCB的值,第一个和相同的条件下输出是1.23v或3V,其中的一些值,但它也没有通过改变输入来改变。

我认为我的问题是沟通上的问题,但我看不到。  我也认为我尊重SPI计时

我的代码是:

main.c:

// MSP430F6659
// --------
// /|\\| |//
|| |//
--|RST WFP 1.0 |-> LED
// | |//
| WFP 2.4 (UCA0SIMO)|-> Data Out (UCA0SIMO)
//(数据输出) | |//
| WFP 2.5 |<-数据输入(UCA0SOMI)
// | |//
PGA CS <-|WFP 5.2





	
	
		

	
		



串行时钟输出(UCA0CLK)#include <MSP40.0.h>#include "SPI.h"#define LED_DIR P1DIR #define LED_OUT P1OUT #define 2.3 BIT0 #define PGA_DIR P5DIR #define PGA_OUT P5OUT //POR 5.2 引脚28 #define PGA_DataCS BIT2 int P1= 0;0 = 0;0 = 0

;0 = 0;0;0 = 0;0;0 = 0;0;0;0;0 = 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; //Ganancia 5 CH0

void main(void){

	WDTCTL = WDTPW | WDTHOLD;//	停止看门狗计时器

	Port_Mapping();//LLamo funcion que me mapea los Puertos del SPi.

INIT_SPI();//LLamo funcion que配置SPI

PGA_DIR |= PGA_CS;//定义como salida WFP 3.0 que es el CS del PGA
PGA_OUT |= PGA_CS;//解氧度PGA
__enable_interrupit(); //重新启用所有中断

LED_DIR || LED;//定义COO SALIDA EL WFP 1.0
LED_OUT &=~ LED;//Apago el LED

while (1){//---------------



		Tx SPI PGA-----------------------------------
					__delay_cycles(50);

					PGA
					

					
					

					
					^&=~ PGA_CS;//Habilito PGA (activo por bajo)__delay_cycles(50);n=1;UCA0IE |= UCTXIE;// Habilito中断转换(al hito Deshabilta Salta a la })__delay_cycles(50);!-------- PGA
					输出--------------
		

		
}


}//------------------



RUTINA DE INTERRUPCION SPI------------------
#pragma vector=USI_A0_vector //vector de inter流,hay uno solo para transmicion y reconcion

__interrupt void USI_A0_ISR(void)
{
SWITCH(__偶 数_IN_RANGE(UCA0IV,4))//Pregunta por UCA0IV, que es registro de vectores de interrupt on
/
	genericio

案例0:中断; //矢量0 -无中断//无干草中断点
案例2:中断; //矢量2 - RXIFG //se recebio un Dato
案例4:								//矢量4 - TXIFG //El buffer de transmision esta libre
交换机(n){
	案例0:
		UCA0IE &=~ UCTXIE;// Deshabilita interrupion
		中断;
	案例1:
		UCA0TXBUF= PGA_Data1;//eSCRIBE有效期
		UCA0TXBUF= PGA_Data2;//eSCRIBE菜单有效
		UCA0IE &=~ UCTXIE;// Deshabilita interrupion
		中断;
	案例2:
		中断;
	默认值:break;
	}

默认值:break;
}//----------------------------------




SPI.h:

#include <MSP40.0.h>

#define SPI_MODO _00	0
#define SPI_MODO _01	1
#define SPI_MODO _10	2
#define SPI_MODO _11	3

#define MSP4S_SPI_MODO SPI_MODO SPI_10 //cambiar quiel modo de ****************************************************************************************************************************************************************************************************************************************//ACA****



// Funcion:Port_Mapping
// Configuracion el mapeo de Puertos para el SPI
//****************************************************************************************************************************************************************************************
void Port_Mapping(void);
//********************************************************************************************************************************************************

//********************************************************************************************************************************
//功能:init_spi
//配置acion del USCI A0 SPI
//****************************************************************************************************************************************************************
void Init_SPI (void);
//************************************************************************************************************************************************************************


SPI.C:


#include "SPI.h"

//********************************************************************************************************************************************************************************************************************************************************
// Funcion:Port_Mapping
// Configuracion el mapeo de Puertos para el SPI
//****************************************************************************************************************************************************************************************
void Port_Mapping(void){__disable_interrupti();//
	在更改端口映射寄存器

		PMAPKEYID=PMAPKEY;//esribir
		la key 2D52h me garantiza acceso de esura crita todos los registros de control de mapeo de Puertos

		//Para cada port pin Px.y que tiene la regularunable pista, mapponesa.

	P2MAP3 = PM_UCA0CLK;//WFP 2.3 conecto el CLK (15号插针博内拉)
	P2MV4 = PM_UCA0SIMO;//WFP 2.4 conecto el SIMO (16号插针硼拉)
	P2MAP5 = PM_UCA0SOMI;//WFP 2.5 2.3 2.5 2.3 2.5 conecto el SOMI (Pin 17 bornera)

		PMAPKEYID = 0;//Escribendo cualendo cualquier valor desabilito el accesso al Port Mapping



		SEL 2DIR |= BIT3|BIT4|BIT5;//SelectivoPOR 2.4 funciono/
		
		~2= 2.4




//********************************************************************************************************************************
//功能:init_spi
//配置acion del USCI A0 SPI
//****************************************************************************************************************************************************************
void Init_spi (void){

UCA0CTL1 |= UCSWRST;//**将状态机置于RESET状态**

#IF (MMSP430_SPI_MODO == UCA0CTL0|=
UCMST|UCSYNC|UCMSB;// 3引脚,8位极性主控,MSB,Modo 0:时钟fase,SPI_NC_UCCM1= 0

,USPI0SPI_UCCM1=
0 时钟fase low y时钟极性高
#endif
(MSP430_SPI_MODO == SPI_MODO)
UCA0CTL0 |= UCMST|UCSYNC|UCMSB|UCCSPI KPH;// 3引脚,8位主控,MSB,MODO 1 0:时钟频率高,时钟极性#ENDIF|UCCSPL|USPI=8


引脚,UCCSPI_B|SPIF_UCCSPIB|MPH_UCCSPIF= 时钟频率高y时钟极性高
#endif


UCA0CTL1 || UCSSEL_2;// SMCLK (定义时钟)
UCA0BR0 = 0;// Si quisiera dividir el SMCLK cambiar ACA
UCA0BR1 = 0;//
UCA0MCTL = 0;//无调制

UCA0CTL1 &=~ UCSWRST;//**初始化USCI状态机**

}//************************************************************************************************************************************************************************

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Fernando,

    我不清楚您在设备DC测试中做了什么,但似乎该设备实际上尚未启用。 在您的代码中,我没有看到您发出SDN_DIS write命令来启用设备的任何地方。 数据表中有一个脚注:"SDN =关机模式。 通过发出SDN_EN命令进入关机模式。 通过SDN_DIS命令或任何有效的Write命令清除关闭模式(返回到最后一个有效的写入配置)。" 因此,如果您发出有效的写入命令,设备应自动启用。 但是,您说您使用的是SPI模式10,但PGA113只支持SPI模式00和11,所以我担心您实际上从未发出过有效的写入命令,因此该设备保持禁用状态。 请尝试更改SPI模式,以查看是否可以解决问题。 如果没有,我们可以让MSP430团队的一些工程师参与进来,因为他们在数字通信方面拥有更多的专业知识,并且能够更好地为您提供帮助。

    此致,
    Zak Kaye
    精密放大器应用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Zack,在我的DC测试中,我将DC电源连接到输入(CH0或CH1),并将未使用的输入保持接地。 我也认为设备未启用。
    我不明白为什么我必须使用SDN_DIS写入命令。 我使用有效的write命令看到设备时,设备会自动启用。 我知道该器件仅支持模式00或11,我阅读了MSP430数据表,对我来说,MSP的模式10等同于PGA中的00,但我不确定,所以我尝试了模式00和10。 如果您可以为我清除此问题,这将很有用,但它不能解决我的问题。
    此致,
    费尔南多
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    费尔南多

    PGA113和MSP430的SPI模式00应该相同。

    MSP430上使用的电源电压是多少? 从您的示波器图解中,我假设它大约为3.5V。 如果您在PGA113上使用5V DVDD,那么为了读取逻辑高电平,MSP430必须输出至少0.7 x DVDD或3.5V。 由于您正处于这一边缘,PGA113可能无法将您的输入识别为有效信号。 作为快速测试,您可以稍微降低DVDD电源,然后查看直流测试是否输出您所期望的输出。

    此外,如何驱动PGA113上的CS引脚? 在您的代码中,我看不到您映射此PIN的任何位置。 从数据表中:"如果CS低(下降边缘)和CS高(上升边缘)之间没有16个时钟(即16,32,64等)的偶数增量,则设备不会采取任何操作。" 希望这能有所帮助!

    此致,
    Zak Kaye
    精密放大器应用
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Zack,

    我在MSP430F6659上使用3.3V电源电压。 我还拥有一个MSP430F5529LP,我也在测试该产品,并且电源也是3.3V。 在第22-24行和第40-41行中,我绘制了PGA的CS,在第54行和第62行中使用了CS。 我没有注意到逻辑高必须至少是0.7 DVDD,我的输出是3.4v,你是对的。 阅读您的帖子后,我尝试将DVDD从3.3 连接到4.5V,但它不起作用。  我还计算了CLK的增量,我有16个。

    在做探针时,我注意到当我只连接3根SPI线时,DVDD引脚I得到2.36v,VOUT I得到0.86v。 连接好两个不同的电源后,DVDD=1.5v,AVDD=5V,CH1=0.4v,一切都保持不变。 后来当我将DVDD递增到大于2.4V的值时,例如3V,情况就会发生变化,在DVDD引脚中,我得到3V,在VOUT中,我得到3V,当我增加DVDD时,它会跟踪DVDD的值。

    继续测试,我断开3条SPI线并保持其他电源连接,现在VOUT=VDD,即使DVDD<2.4V。 我不知道这项测试是否告诉你一些事情,让我知道。 谢谢!

    这是我的PCB的波浪式

    此致,

    费尔南多