PIC I2C конфигурация часов - PullRequest
0 голосов
/ 04 апреля 2019

Здравствуйте. Я пытаюсь связаться с устройством, используя PIC18F26K83.Максимальная частота для SCL составляет 1 МГц в соответствии с таблицей устройств. Когда я устанавливаю тактовую частоту I2C на HFINTOSC (1 МГц), она может обмениваться данными с устройством (если частота системных часов составляет от 250 кГц до 1 МГц).Я ничего не меняю, я просто меняю системные часы с 500 кГц на 1 МГц, и он перестает работать.Как это может быть?Я использую HFINTOSC, который настроен на 1 МГц для тактовой частоты I2C, это зависит от системных тактовых импульсов?

И другой мой вопрос снова связан с тактовой частотой I2C.Как я уже говорил, когда я использую HFINTOSC для тактовой частоты I2C, он работает до тех пор, пока системная тактовая частота составляет 500 кГц.Однако, когда я пытаюсь использовать Fosc или MFINTOSC с (системная тактовая частота 500 кГц или 1 МГц), это не работает.Кто-нибудь может направить меня сюда?Потому что я застрял, и я не знаю, почему это может произойти.Заранее спасибо.

Коды для настройки внутреннего генератора:

 //  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

Это изображение вывода SCL, когда я использую системные часы 500 Кбит / с и HFINTOSC для I2Cx CLK.

SCL pin

Редактировать: Iпроверил, что я вижу с MFINTOSC или Fosc как I2CxCLK, и он пуст.0В.К сожалению, нет часов.

...