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.

[参考译文] MSP430F5529:IIC 屏幕未正确显示

Guru**** 2595160 points
Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1047549/msp430f5529-the-iic-screen-does-not-display-properly

器件型号:MSP430F5529

问题:

客户使用 MSP430f5529计时器周期方法来实现频率测量功能、当输入频率过高时、IIC 屏幕不能正确显示。

#include <msp430.h>
#include "oled.h"
#include "type.h"
#include "bmp.h"//配置IIC
#include"stdint.h"
#include<stdio.h>
#include<stdlib.h>
/**
 * main.c
 */
int  overflow_counter;
int DETA_counter;
int input_one_capture;
int capflag;
int input_one_counter;
int sample_times;
int avarge_period;
int f;
float f2;
int f3;
//void InitSys();
int main(void)
{
    WDTCTL = WDTPW | WDTHOLD;   // stop watchdog timer
    OLED_Init();
    P2SEL |= BIT4;//(p2.4为捕捉频率口)
          TA2CTL = TACLR;     TA2CTL=TASSEL_2+ID_0+MC_2+TAIE;     TA2CCTL1=CCIE +CAP +CCIS_0 +CM_1 + SCS;
          OLED_Clear();
          while(1){
          f=(int)1/(avarge_period*0.000001);
                 f2=f*0.05;
                 f3=f+f2;
                 OLED_ShowString(20,1,"fget=",20);
                 OLED_ShowNum(30,4,avarge_period,8,20);
          __bis_SR_register(LPM0_bits +GIE);
          }

}
#pragma vector=TIMER2_A1_VECTOR
__interrupt void TIMER2_A1_ISR(void)
{
    switch(TA2IV)
{
    case 2:  sample_times = 0;
              avarge_period= overflow_counter*65536-input_one_capture+TA2CCR1;
              input_one_capture = TA2CCR1;
              input_one_counter = DETA_counter;
              overflow_counter=0;
              capflag++;
break;
    case 4:
        break;
    case 6:
        break;
    case 8:
        break;
    case 10:
        break;
    case 12:
        break;
    case 14:overflow_counter++;
        DETA_counter++;
        break;

}
}

请帮您检查它吗?

非常感谢!

此致、

樱桃周

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

    您好、欢呼!

    出现问题时的频率是多少?  屏幕显示的值是多少?

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

    您好、Allen、

    频率为 16kHz、OLED 显示流程。

    感谢您的帮助并期待您的回复!

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

    当 MCLK = 1MHz 且信号为16kHz 时、必须在1M/16k = 62.5 CPU 时钟周期内处理每个捕捉、这非常严格。  (除了完成的任何工作外、我通常估计 ISR 的20-30个 CPU 时钟开销。)

    如果超出预算、捕获将超限;可以检测到超限、但不容易修复。 如果您使用中断驱动的 I2C 驱动 OLED、这将增加溢出的可能性。

    如果16kHz 是您的规范的高端、您可以通过(a)加速 MCLK 和/或(b) DMA 获得一点额外的余量。

    对于高信号速率下的频率计数、我建议使用信号作为 TA2CLK 并让计时器进行计数。

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

    您好、Cherry、

    就像 Bruce 所说的那样、尝试设置一个更快的时钟来保持更大的裕度。