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.

[参考译文] MSP430F2132:在不通过 MSP-FET430UIF 接口的情况下工作 A2D 代码不规则

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/964043/msp430f2132-working-a2d-code-irratic-when-not-through-msp-fet430uif-interface

器件型号:MSP430F2132
主题中讨论的其他器件:MSP-FET430UIFCD74HC4511MSP-FET

你好、

改装一台旧机器让我困扰了几个星期的难题。
在我的代码中看不到毛刺脉冲,因此可能在 MSP-FET430UIF 接口应用手册中看到我错过的内容。

简单的 a2d 转换器、可显示3块7段共阴极 LED 显示屏。
MSP430F2132至 CD74HC4511 (单/ 7段)。
无多路复用、简单切换解码器使能。
用于目标内调试的 MSP-FET430UIF 接口。
A2D 输入来自3.3V 供电的10k 电位器、在 A4输入引脚的电位计抽头上具有1k 电阻器。
所有未使用的 MSP430F2132 I/O 引脚接地。

由台式稳压电源提供的目标 cct 电源、在目标板上额外添加了滤波稳压器(5V 和3.3V)。
示波器显示了平坦直流电压波形。
CD74HC4511使能信号是直接来自 MSP430F2132的3.3V 信号、所有 CD74HC4511的5V 电压都在其主电源上提供支持。
CCT 返修是干净的、没有任何短路、所有导联都完好无损、并将导联送至应有的位置。

情况是代码在初始化时运行顺畅、并通过 MSP-FET430UIF 从 PC 运行到目标。
7段数字是稳定的、不同于标准电位器输入器件预期的位1 (0至1至0)上的随机抖动。
当 cct 独立运行时、a2d 值为任何低于稳定值的值、显示值的差异高达100+。
独立=从 PC 和 MSP-FET430UIF 接口断开、MSP430F2132引脚7 (RST)连接高电平、所有 cct 器件通过台式电源激活
认为这是一个时序问题或可能的噪声问题。

已尝试:
- POT 上的二极管+和-
输入电位计+/-上的各种齐纳二极管、以稳定读数
高精度10转10K 电位器
ADC10SC、SMCLK、MCLK 时钟参数和用于 a2d 转换的所有时钟分频器
-raw a2d 值直接到 CD74HC4511
将 a2d 值直接缩放到 CD74HC4511
-将 a2d 值解码为单独的数字、以传输到 CD74HC4511
-多种延迟序列,可减缓/加快显示和 a2d 进程
     -在独立操作期间、逐渐降至每位数1秒的照明仍然会产生非静态显示
隔离接地以否定接地环路
-5V 独立接地台式电源、用于运行 CD74HC4511器件
不同 PC

系统中集成的关闭/关闭开关(不是随附代码的一部分)允许停止 a2d 并记录显示 O/P
尽管值最初是随机的、但一旦记录足够的值、显示之间的计数值就会明显显示为4或5。
4的空间差异比5大(即687、691、696、680、684)

我是一个失手,没有太多头发可以拉出。
如果有任何建议,将不胜感激。
L.

#include "io430.h"
#include "in430.h"
#include "intrinsics.h" //库
#include "stdint.h"
#include "stdio.h"

//固件变量
unsigned int a2d_result = 0; //从 a 到 d 转换的二进制结果
unsigned int cnt_val = 0; // LED_Display ()值
unsigned int delay_val = 5; //延迟例程计数
unsigned int display_val = 0; //发送到单个7段的值显示
unsigned int old_a2d = 0; //保留当前 a2d 值
unsigned int save_num = 0; // LED_Display()
中的持有者变量 unsigned int x = 0; //通用延迟计数器变量

//端口1 -数字 I/O
#define DISPLAY_FET_ON P1OUT |= BIT4 //
在#define beep 关闭时显示7段电源 P1OUT &=~BIT6 //关闭系统警报

//端口3数字 I/O
#define O_ENABLE_HI P3OUT |= BIT6 // CD74HC4511使能/禁用信号(x3)
#define O_ENABLE_LO P3OUT &=~BIT6
#define T_ENABLE_HI P3OUT |= BIT5
#define T_ENABLE_LO P3OUT &=~BIT4
#define H_ENABLE_HI P3OUT |= BIT4
#define H_ENABLE_LO P3OUT &=~BIT4

空延迟(空) //常规延迟
{for (x = delay_val;x > 0;-x)
{while (!(TA0CCTL0 & CCIFG)){;}
TA0CCTL0 &=~CCIFG; //清除计时器溢出标志
}

void A2D_Sample (void)
{old_a2d = a2d_result; //主段
ADC10CTL0 &=~ENC 中为比较而保存的之前的 a2d 值; //复位 ADC10XTL0寄存器
ADC10CTL0 = ADC10SHT_2 + ADC10ON; //采样和保持时间16个时钟周期、ADC10
在(ADC10CTL1 & ADC10BUSY)时有效; //等待 ADC10内核已经处于活动
状态 ADC10SA =(无符号整型)&a2d_result; // a2d 值自动从 ADC10MEM
ADC10CTL0转移到 a2d_result |= ENC + ADC10SC; //开始采样例程
delay_val = 5;
delay(); // a2d 进程稳定延迟
cnt_val =((int)(a2d_result * 0.977)); //将 a2d 值缩放到3位-在 LED_Dispaly()
中使用}

空 Cnt_Send (空)
{switch (display_val)
{case 0:P1OUT |= 0x00;break; //要发送到 BCD 数据总线
的"0"值大小写1:P1OUT |= 0x01;break; //要发送到 BCD 数据总线
的"1"值大小写2:P1OUT |= 0x02;break; //要发送到 BCD 数据总线
的"2"值大小写3:P1OUT |= 0x03;break; //要发送到 BCD 数据总线
的"3"值大小写4:P1OUT |= 0x04;break; //要发送到 BCD 数据总线
的"4"值大小写5:P1OUT |= 0x05;break; //要发送到 BCD 数据总线
的"5"值大小写6:P1OUT |= 0x06;break; //要发送到 BCD 数据总线
的"6"值大小写7:P1OUT |= 0x07;break; //要发送到 BCD 数据总线
的"7"值大小写8:P1OUT |= 0x08;break; //要发送到 BCD 数据总线
的"8"值 case 9:P1OUT |= 0x09;break; //要发送到 BCD 数据总线
的"9"值}

void LED_Display (void) //将 a2d 值分解为单个数字(100s、10s 1)
{display_val =(cnt_val / 100); //数百显示值
save_num =(display_val * 100); //保存要在10 `s 计算
P1OUT &= 0xF0中使用的数百个值(整数形式); //重置端口1,位1到位3 - BCD 数据总线
Cnt_Send (); //端口1位0至3数据总线准备例程
H_ENABLE_LO; // 100位 CD74HC4511使能信号 on
delay_val = 10;
delay();
H_ENABLE_HI; // 100位 CD74HC4511使能信号 off
delay_val = 10;
delay();

display_val =((((cnt_val -(save_num))/ 10)); //十个显示值
save_num =(save_num)+(display_val * 10); //保存要在10 `s 计算中使用的数百个值(整数形式)
P1OUT &= 0xF0; //重置端口1,位1到位3 - BCD 数据总线
Cnt_Send (); //端口1位0至3数据总线准备例程
T_ENABLE_LO; // 10位 CD74HC4511使能信号 on
delay_val = 10;
delay();
T_ENABLE_HI; // 10位 CD74HC4511使能信号 OFF
DELAY_Val = 10;
DELAY();

display_val =(cnt_val -(save_num)); //一个显示值
P1OUT &= 0xF0; //重置端口1,位1到位3 - BCD 数据总线
Cnt_Send (); //端口1位0至3数据总线准备例程
O_ENABLE_LO; delay_val
= 10时// 1位 CD74HC4511使能信号;
delay ();
O_ENABLE_HI; // 1的数字 CD74HC4511使能信号 OFF
DELAY_Val = 10;
delay ();
P1OUT &= 0xF0; //确保所有 CD74HC4511使能信号都关闭
cnt_val = 0; //将 cnt_val 重置为0000 (用于确保每次通过的 cnt_val 中有新值的调试工具)
}

#pragma vector=TIMER0_A0_vector // timer_A 中断
__interrupt void Timer0_A0 (void)
{}

void main (void)
{WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器
BCSCTL1 = XT2OFF; //振荡2关闭

P1DIR = 0xFF; //端口1:所有输出
P1SEL = 0x00; //端口1:数字 I/O
P1REN = 0x00; //端口1:P1OUT
= 0x20上拉电阻; //端口1:除 P1.5 LED 关闭(1)、P1.6蜂鸣器关闭(0)之外的所有低电平状态输出

P3DIR = 0xFF; //端口3:所有输出
P3SEL = 0x00; //端口3:所有数字 I/O
P3REN = 0x00; //端口3:P3OUT
= 0xFF 上拉电阻器; //端口3:引脚1-6 hi (bcd 至7 seg 芯片使能关)(1111 1111)
__ENABLE_INTERRUPT ();//启用所有中断

// TA0 - ALARM & DELAY ()定时器
TA0CCR0 |= 990; //材料计数器和延迟计时器
TA0CCTL0 |= CCIE; //在计数溢出时启用 TA0CCR0中断标志
TA0CTL = tassel_2 + MC_1 + ID_0 + TACLR; // smclk 源,向上计数模式,/1,清除计数器

ADC10CTL0 = SREF_0 + ADC10SHT_2 + ADC10ON; //*16、ADC10寄存器有效
ADC10CTL1 = INCH_4 + ADC10DIV_0 + ADC10SSEL_0 + CONSEQ_0; // A4、ADC10SC 位、
ADC10AE0 |= 0x04; //使能控制寄存器-模拟输入 A4使能
ADC10DTC1 = 0x001; //启用数据传输控制寄存器、1块传输

DISPLAY_FET_ON; //翻转7段显示电源
delay_val = 5; // 7段显示稳定延迟
();
LED_Display (); //初始速度显示-需要点亮显示

while (1)
{A2D_Sample (); // a2d 样本
如果(((a2d_result + 3)< old_a2d)||((a2d_result - 3)> old_a2d) // a2d 值变化> 3计数
LED_Display();
} } 

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

    您好、L Beck、

    您指示当 MSP-FET 断开连接时、RST 被拉高。 您使用什么值的电阻器?  RST 接地端是否还有1nF 电容?

    您是否有一个显示 MSP-FET 与 MSP430连接的简单图?

    您在任何其他 JTAG 引脚上是否有任何电阻器/电容器?

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

    Dennis、感谢您的快速回复。

    我在 MSP-FET 和 MSP430之间的连接是标准的2线 JTAG 配置、如 MSP430硬件工具用户指南第22页所述。 没有偏离 T.I.的 cct。

    RST 直接为3.3V、无电阻器或电容器。 我从未想过过滤 RST 引脚上的差异。

    我将执行该操作。

     L.

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

    我在这里有点困惑...如果您将 RST 直接连接到3.3V、那么在编程期间 MSP-FET 如何控制该引脚?  作为编程/调试操作的一部分、它需要将其拉低。

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

    对这种混乱表示歉意。 RST 仅在独立运行期间连接高电平。 编程期间、一个跳线被提升以将 RST 引脚与3.3V 隔离、从而使其可用于 MSP-FET。  

    根据您的建议、我使用1nf 电容运行了多几次测试、在独立运行期间、RST 引脚上具有和不具有一系列电阻器值/滤波器。 遗憾 的是、当不通过 MSP-FET 进行控制时、非静态 a2d 显示屏的结果是相同的。 由于这仅是双面板内部迹线短路不是问题。

    受测的 cct 有第二组3个7段显示(显示运行计数值)、它们的段输入连接在总线配置中、与用于表示 a2d 值的显示屏的相应元素相连。 从1到1、从10到10、从100到100。 (并非所有连接在8线总线中的显示元件的所有相同段)。

    我将 MSP430F2132 -用于 CD74HC4511 使能信号的端口3引脚分配交换到 a2d 显示屏、再交换到 Port1计数器值显示屏的引脚分配使能器将 a2d 值移动到第二组7个段。 irratic a2d 值行为在重定向至第二组显示块后出现计数值、现在显示在原始 a2d 显示屏上、与 MSP-FET 操作和独立运行时一样保持稳定。

    如果噪声问题源自 a2d 显示屏7段阴极、滤波电容也会脱落。 没有区别。
    我确信这一错误正使我望而定。

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

    好的、这看起来越来越像它与 A/D 相关

    为了消除其他可能、您可能已经尝试过这种方法、但如果不将 A/D 结果写入显示屏、则写入一个固定值、无论是否使用调试器?

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

    在我发布帖子之前的几天、我也有过同样的想法。

    在所有 a2d 代码消隐且设置了固定值以显示的情况下、通过界面实现稳定的视觉效果、并单独进行温和的不规则运行。 与持续的 a2d 计算相比、我有点轻率地说、这似乎加剧了这个问题。

    由于 MSP_FET 在所有设计和用途中都能实现实时运行目标、因此在使用或不使用 MSP-FET 的情况下、由于数据从 PC 性能传输而导致的执行力仅会轻微延迟。 假设这些条件、除了 MSP-FET 中存在异常或错过参数的可能性、或者处理器已经迷失方向之外、我无法得出任何其他结论。 最终希望我不必通过隧道来更换零件。

    我认为我必须接受 MSP-FET 可能会补偿出现故障的处理器中的问题、我将更换芯片、或重新设计。  

    感谢您加强并为 Dennis 提供帮助。 我将以“已解决”状态来解决此问题,并从故障电路的角度继续。

    再次感谢您、

     l。

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

    在我们介绍毛巾之前、我将查看 CD74HC4511规格、看看您可能不符合5V 的 VIH 规格。

    也许、当 MSP-FET 被连接时、并且根据您的配置方式、它可能有助于将您的本地+3V3拉高一点、这足以满足 VIH 规格。  使用和不使用 MSP-FET 测量+3V3并查看其是否发生变化。

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

    在我发布之前进行的原始 I/O 分析:通过 MSP-FET 在 BCD 输入端提供3.28V 电压、3.21V 独立电压、完全符合规格。

    使能引脚上的电压分别为3.34V 和3.27V。

    经 MSP-FET 测试且功能齐全。

    由于馈送全部六个7段块的组件是相同的、因此计数器值也会受到电压不足的影响、而不是受到电压不足的影响。

    7段数据线被占用、所有 BCD 输入值都源自相同的4个处理器输出引脚。

    不规则值跟随显示 a2d 值被发送到的3个块、计数值在另一个块上稳定、显示 ENABLE 和 BCD 信号 O/PS 未损坏。

    同样、降低显示闪烁速率显示错误重复4次、这将使所有错误都恢复到我原始帖子中所述的4次错误情况。

    指示故障处理器 a2d、BCD 解码器之前的状态。

    感谢你能抽出时间。

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

    您好、L Beck、

    在这里、您可能会尝试一些简单的事情、并让我知道您发现的内容。

    1) 1)请尝试转换 CH10上的内部温度传感器或 CH11上的(VCC-VSS)/2、而不是转换 CH4。

    2) 2)与上述1)结合使用、尝试使用 ADC10内部 REF2_5或 REF1_5、而不是 VCC。

    3)看起来您使用的是 ADC10OSC (5MHz)内部时钟源。 尝试 MCLK。