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.

[参考译文] CCS/MSP430G2553:在理想时间内将 DCO 设置为较低的频率

Guru**** 2580125 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/611857/ccs-msp430g2553-setting-the-dco-to-lower-frequency-during-ideal-time

器件型号:MSP430G2553

工具/软件:Code Composer Studio

您好!

我正在实施一个程序、每15分钟将模拟值记录到 SD 卡中、在理想的时间内、DCO 浪费大量电能、而不执行任何操作(不能使用 VLO、因为它太不准确、无法跟踪时间)。 我的逻辑是在15分钟间隔内显著降低 DCO 速度、然后将其增加到默认的 DCO 值。 DCO 时钟速度正在降低(我可以通过寄存器值和低电流消耗来补偿)、但它不会恢复到原始 DCO 配置。 任何人都能提供建议。

DCOCTL 和 BCSCTL1设置为0x0、但它们不会混响回原始配置、即 DCOCTL = 0xA0和 BCSCTL1 = 0x8F

(下面粘贴的代码和寄存器值)

#include "msp430g2553.h"
#include 
#ifndef TIMER0_A1_VECTOR
#define TIMER0_A1_VECTOR TIMER1_VECTOR
#define TIMER0_A0_VECTOR TIMER0_VECTOR
#endif
#include 
#include 
#include 
#include "spi.h"
#include "pfatfs.h"
#define cs_pin 8. //芯片选择引脚
#define READ_BUFFER 128 //读取缓冲
区的大小(以字节为单位) unsigned short int bw、br;
char buffer[read_buffer];
int rc;
DIR dir; /*目录对象*/
FILINFO fno; /*文件信息对象*/
uint32_t sensor1;
uint32_t sensor2;
uint32_t sensor3;
uint32_t Sensor4;
uint8_t StringLength = 0;
char buf[50];
uint32_t counter = 0;
uint32_t AccStringLength = 0;uint32_t




t2 = 0;t int32_t t2 =
0;uint2 = 0;t int32_t t2 = 0;t int2 = 0;t int2 = t int2 = 0;t int32

void setup()
{
analogReference (INTERNAL2V5);
引脚模式(9、输出);
PinMode (10、输出);
FatFs.begin(cs_pin);
digitalWrite (10、高电平);
delay (200);
digitalWrite (10、低电平);
delay (200);
}

void loop ()
{
digitalWrite (9、HIGH);
sensor1 = analogRead (2);
delay (5);
t1 = sensor1;
sensor2 = analogRead (3);
延迟(5);
T2 = sensor2;
sensor3 = analogRead (5);
延迟(5);
T3 = sensor3;
Sensor4 = analogRead (6);
delay (5);
T4 = Sensor4;

digitalWrite (9、low);

RC = FatFs.open ("log.TXT");
delay (5);
bw=0;
sprintf (buf、"%lu 输出为%lu、%lu、%lu、%lu\r\n"、counter、t1、t2、t3、t4);
counter++;
FatingLength = strlen (buf);
RC = FatingStr.lseek (AccStringLength);
Acc&StringLength =

0、twrite = tf (rc);FatFs = 0、tf (rc = tft.rc = tf)、tf (twrite = tf);
//关闭文件

BCSCTL1 = 0x0;//设置范围
DCOCTL = 0x0;
延迟(1000);
BCSCTL1 = 0xA0;//设置范围
DCOCTL = 0x8F;
}

1)初始时钟寄存器值( DCOCTL = 0xA0和 BCSCTL1 = 0x8F)

2) 2)代码运行时的时钟寄存器值(DCOCTL 和 BCSCTL1已变为0x0、但它们不会混响回原始配置、即 DCOCTL = 0xA0;和 BCSCTL1 = 0x8F)  

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

    你好,Tapas

    我尝试了类似的东西、但没有观察到同样的行为。 一切似乎都正常。 但是、我认为这不是节能的最佳方法。 您是否考虑在空闲时间内使用外部32kHz 晶体来提供 ACLK、然后从 ACLK 运行计时器? ACLK 在 LPM3中保持有效并且电流非常低。 这可以在数据表的低功耗模式电源电流(流入 Vcc)部分看到:

    此致、  

    Caleb Overbay

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

    感谢 Caleb、在减少延迟后、似乎可以正常工作、经过广泛测试后、我将报告有关此主题的更多信息。  

    由于 PCB 已经制成、因此我无法使用晶体。 我的赌注是使用 VLO 时钟源、但它会随着电压变化而显著漂移。 另外一个问题是、快速更改循环中的 DCO 时钟寄存器是否会影响控制器的使用寿命和性能。  

    此致、

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

    你好,Tapas

    使用 VLO 库查看也可能会有所帮助 、该库详细介绍了如何测量器件上的 VLO 频率、以便您可以通过使用该库获得更高的精度。 请告诉我这是否有帮助。

    此外、我不知道快速更改 DCO 时钟寄存器会产生什么问题。 这不是 DCO 的典型用例、因为它通常在执行开始时设置、不会再次更改。

    此致、  

    Caleb Overbay