The remote is handled by the same PIC, yes, but only on a pass-through basis. The remote is the safest option for dimmer adjustments as it doesn't tie the PIC in a busy loop to send info back to the host.

When we signal to the display PIC, we pull the comms line high for 100ms to let it finish what it's currently doing and sync up with the main board - then we clock in 8 bits. When the PIC is "synced up" (ie, displaycontrol line high) it is doing nothing else - not processing IR, buttons, or rotary events. It's in a busy loop looking for a short (<2us) low or a long (>5us) low of the first bit.

The short low has to be long enough for the PIC to notice it; this shouldn't be an issue really, as the PIC runs at 20MHz (hence 5 mips) and the loop is only a few instructions. Maybe the delay is currently too short in kernel and it misses a bit. If the line stays low for too long (like milliseconds), the PICs watchdog kicks in; this way we can force a pic reboot if we need to.

Ah, this might be the problem actually - looking at the pic code, there should have been a watchdog reset in the code that waits for the first low. Maybe setting the kernel /* Wait 100ms */ delay a bit shorter will help, as I suspect the pic is rebooting several times whilst waiting for the first bit.

Hugo