Salve Bruno,
ho visto i dettagli del PIC18F46K42, è troppo diverso dagli altri PIC18.
Modulo I2C e UART sono basati altri registri. Integrarlo in LTlib non è solo questione di di file di configurazione ma tutte le periferiche sono diverse.
Per ora ho creato comunque il file base di configurazione ma senza il PIC tra le mani è un'impresa troppo ardua cambiare il resto della libreria.
A che punto sei con la scheda?
Opzioni di usare il PIC18F46K22?
La Libreria LTlib supporta il modello ad 8 bit dell'mcp23017, ovvero mcp23008.
Continuando con quello che hai:
la libreria I2C è spesso di tipo bloccante, ovvero il controllo se il bus è in stato di idle o viene ricevuto correttamente l'ACK della periferica sono controlli bloccanti. Se qualche cosa non va, aspetta all'infinito per l'evento.
Problemi di resistori di output o configurazione errate dei pin IO possono creare problemi sul controllo di idle.
Se sbagli l'indirizzo della periferica mcp23017 non ricevi l'ACK e si blocca tutto.
Se esegui il programma passo passo (in modalità debug) puoi vedere dove si blocca il tutto.
Verifica che le linee SDA e SCL siano a livello alto con i resistori di pull-up.
Se hai un oscilloscopio controlla i dati inviati e dove si blocca.
Saluti,
Mauro