Я давно работаю с MikroC и сейчас начинаю кодировать с xc8-mplab X.
Я работаю в проекте, который состоит из сопряжения ds1307 и pic18f46k22 (i2c).С MikroC у меня уходит около 20 минут, но понимание драйверов MCC сводит меня с ума.
Я перечитал таблицу данных pic18f46k22 и руководство xc8 v2.05.
Я набрал много кодов, ноу меня никто не работал (версии xc8, библиотеки не поддерживаются, работает только в pic16, конфликтует с mcc ...)
У меня работает этот код (под Proteus & I2CDebugger):
flagStartI2c1 = i2c1_driver_open(); // Init i2c1
i2c1_driver_start(); //S Start
__delay_ms(20);
i2c1_driver_TXData (0xD0); //address DS1307
__delay_ms(20);
i2c1_driver_TXData (0x07); //Register SQW/Out
__delay_ms(20);
i2c1_driver_TXData (0x90); // Out Enable 1Hz
__delay_ms(20);
i2c1_driver_stop();
analyzer: **S D0 A 07 A 90 A P**
simulation: **works OK**
Проблема запускается при отправке условия перезапуска / RXEnable
inline void i2c1_driver_startRX(void)
{
SSP1CON2bits.RCEN = 1;
}
inline void i2c1_driver_restart(void)
{
SSP1CON2bits.RSEN = 1;
}
Это приводит к "обнаружению ложного" или "???????????"в I2CDebugger:
//Option 1
i2c1_driver_start();
i2c1_driver_TXData (0xD0);
i2c1_driver_TXData (0x00);
i2c1_driver_restart();----> MALFUNCTION (Spurious detected)
i2c1_driver_startRX();-----> MALFUNCTION (????? in analyzer)
sec = i2c1_driver_getRXData();---> broke tx, doesnt arrive data
min = i2c1_driver_getRXData();
hora = i2c1_driver_getRXData();
.....
analyzer: **S D0 A 00 A FF ?????????????**
//Option 2
i2c1_driver_start();
i2c1_driver_TXData (0xD0);
i2c1_driver_TXData (0x00);
sec = i2c1_driver_getRXData(); --->nothing in SSP1BUF
min = i2c1_driver_getRXData(); --->nothing in SSP1BUF
hora = i2c1_driver_getRXData(); --->nothing in SSP1BUF
....
analyzer: **S D0 A 00 A ...and nothing happens**
Рабочий процесс в Mikroc:
driverOpen-> Start-> Tx (D0) -> Tx (00) -> Restart-> Tx (D1)-> Rx (сек) -> Rx (мин) -> Rx (час) -> ..... NACK-> Stop.
Я признаю, что я новичок в этом, но может кто-то помочьмне писать, по крайней мере, рабочий процесс функций драйвера, сгенерированных mcc?или ссылка на любую библиотеку, которая имеет простые функции (init, start, tx, rx и stop), которые работают в xc8 и pic18?
Заранее большое спасибо