Мне нужно связаться с устройством с помощью SMBus и отобразить SOC на семисегментном дисплее. Я использую PIC18F26K83. Семисегментный дисплей требует подключения I2C. Проблема в том, что я буду использовать 2 разных модуля I2C с 2 разными часами I2C. SMBus должен быть между 10 кГц и 100 кГц. Я использую тактовую частоту 8 МГц. С семисегментной частью дисплея я не могу заставить ее работать без установки регистра 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;
}
Затем я вызываю эту функцию InitTimer2 () в основном методе. После этого я выбираю I2CxCLK в качестве постмоделированного вывода TMR2 (0110). Тем не менее, это не работает ... Если я непосредственно установить I2CxCLK HFINTOSC, то это работает. (Во всех случаях частота MCU составляет 8 МГц). Итак, мои вопросы:
Это правильная инициализация таймера?
Влияет ли частота моего MCU на частоту таймера?
- Есть ли другие способы выбора тактовых сигналов I2C 100 кГц и 250 кГц с частотой микроконтроллера 8 МГц?