PIC I2C时钟配置

时间:2019-04-04 07:10:20

标签: c frequency clock pic i2c

您好,我正在尝试使用PIC18F26K83与器件通信。根据设备数据手册,SCL的最大频率为1 Mhz。当我将I2C时钟设置为HFINTOSC(1 Mhz)时,它可以与设备通信(只要我的系统时钟在250 Khz和1 Mhz之间)。我什么都没有改变,只是将系统时钟从500 Khz更改为1 Mhz,并且它停止工作。怎么可能?我将HFINTOSC的I2C时钟设置为1 Mhz,这取决于系统时钟吗?

我的另一个问题又与I2C时钟有关。就像我说的那样,当我使用HFINTOSC作为I2C时钟时,只要系统时钟为500 kHz,它就可以工作。但是,当我尝试将Fosc或MFINTOSC与(500 kHz或1 MHz系统时钟)一起使用时,它不起作用。有人可以在这里引导我吗?因为我被困住了,所以我不为什么会这样。预先感谢。

用于设置内部振荡器的代码:

 //  OSCCON1 REGISTER
 NOSC2_BIT=1;
 NOSC1_BIT=1;
 NOSC0_BIT=0;//HF INTERNAL OSC
 //OSCFRQ REGISTER HFINTOSC FREQ. SELECTION
 FRQ3_BIT=0;
 FRQ2_BIT=0;
 FRQ1_BIT=0;
 FRQ0_BIT=0;    // 0010  : 4 MHz , 0000:1 MHZ
 NDIV3_BIT=0;
 NDIV2_BIT=0;
 NDIV1_BIT=0;
 NDIV0_BIT=1;//DIVIDE BY 2

I2C配置代码:

 //MODULE ENABLE
     I2C1CON0.B7=1;delay_ms(500);


          I2C1CON0.B7=1; //MODULE ENABLE
          I2C1CON0.B6=0;//RSEN=0,RESTART ENABLE
          I2C1CON0.B2=1;
          I2C1CON0.B1=0;
         I2C1CON0.B0=0;  //MASTER MODE   7 BIT*/

          I2C1CON1=0X80;
   // SDA SCL pin ayarları
     TRISC.RC4=0;  //I2C:SDA
     TRISC.RC3=0 ;//I2C:SCL
     LATC.RC4=0;
     LATC.RC3=0;
     ANSELC=0XE7;// Clear RC3,RC4 analog inputs
     ODCC4_BIT=1;//open drain control register, sink current only
     ODCC3_BIT=1;
     WPUC4_BIT=0;
     WPUC3_BIT=0;// WEAK PULL UP DISABLE
                     //RXYI2C SLEW RATE PULLUP VS
      RC3I2C=0X01;
      RC4I2C=0X01;

      SLRCONC.B4=0;   //NO SLEW RATE LIMITING
      SLRCONC.B3=0;
      //PPS AYARLARI
      PPSLOCK=0X55; //UNLOCK SEQUENCE
      PPSLOCK=0XAA;
      PPSLOCKED_BIT=0;
      RC3PPS=0b00100001;    //SCL OUTPUT  RC3
      I2C1SCLPPS=0b00010011; //SCL INPUT  RC3
      RC4PPS=0b00100010;    //SDA OUTPUT  RC4
      I2C1SDAPPS=0b00010100; //SDA INPUT  RC4
      PPSLOCK=0X55; //LOCK SEQUENCE
      PPSLOCK=0XAA;
      PPSLOCKED_BIT=1;
       //
       I2C1CON2=0X04;

以及用于I2C时钟选择的代码:

// I2C CLOCK
     I2C1CLK.B3 =0;
     I2C1CLK.B2 =0;
     I2C1CLK.B1 =0;
    I2C1CLK.B0 =1; //0010 HFINT OSC  0001 FOSC
                    //I2C FREQUENCY=1000/5=200KHz
                    //FME=0 MEANS DIVISION=5

这是当我使用500 Kbps系统时钟和HFINTOSC作为I2Cx CLK时的SCL引脚的图像。

SCL pin

编辑:我检查了使用MFINTOSC或Fosc作为I2CxCLK看到的内容,它为空。 0V。不幸的是,没有时钟。

0 个答案:

没有答案