首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自计时器输出的PIC I2C时钟

来自计时器输出的PIC I2C时钟
EN

Stack Overflow用户
提问于 2019-04-02 05:29:04
回答 1查看 104关注 0票数 0

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

代码语言:javascript
复制
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,那么它就能工作。(在所有情况下,单片机时钟为8 MHz)。所以我的问题是:

  1. 计时器初始化正确吗?
  2. 我的单片机频率,会影响计时器频率吗?
  3. 还有其他的方法,我可以选择,以便有100个kHz和250个kHz I2C时钟与8 mHz单片机的频率?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-04 19:10:39

不应该是InitTimer2函数,如下所示:

代码语言:javascript
复制
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功能。见数据表的pg.275和pg.277。确保TMR2MD=0。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55467512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档