定时器输出的PIC I2C时钟

问题描述 投票:0回答:1

我需要使用SMBus与设备通信并在七段显示器上显示SOC。我用的是PIC18F26K83。七段显示需要I2C连接。问题是我将使用2个不同的I2C模块和2个不同的I2C时钟。 SMBus需要介于10 kHz和100 kHz之间。我使用8 MHz MCU时钟。如果没有将I2CxCLK寄存器设置为HFINTOSC(0010),则七段显示部分无法工作。我尝试使用TMR2后缩放输出。定时器代码如下:

void InitTimer2(){

T2CLK =0b00000101; //500 kHz
T2CON.B7 = 1; //Timer 2 is on
T2CON.B3=0;
T2CON.B3=0;
T2CON.B3=0; //Timer 2 PostScaler = 1:2 (500/2 = 250 kHz)
T2CON.B3=1;
}

然后我在main方法中调用此InitTimer2()函数。之后,我选择I2CxCLK作为TMR2后缩放输出(0110)。但是,它不起作用...如果我直接设置I2CxCLK HFINTOSC然后它的工作原理。 (在所有情况下,MCU时钟均为8 MHz)。所以我的问题是:

  1. 定时器初始化是否正确?
  2. 我的MCU频率是否影响定时器频率?
  3. 为了获得具有8 mHz MCU频率的100 kHz和250 kHz I2C时钟,我还有其他方法可供选择吗?

I2C clock selection register

pic i2c
1个回答
1
投票

不应该是InitTimer2函数如下:

void InitTimer2(){

T2CLK =0b00000101; //500 kHz
T2CON.B7 = 1; //Timer 2 is on
T2CON.B3=0;
T2CON.B2=0;
T2CON.B1=0; 
T2CON.B0=1;  //Timer 2 PostScaler = 1:2 (500/2 = 250 kHz)
}

另请检查PIC的PMD功能。请参见数据表的第275页和第277页。确保TMR2MD = 0。

© www.soinside.com 2019 - 2024. All rights reserved.