I have been working on a special clock circuit that is driven by an Int1 interrupt on the UNO. The interrupt runs at 1200 HZ. (833 microseconds between inrerrupts). Eventually the clock will have its own non-standard output display, but at first I was just shipping output to the serial monitor, which worked fine.
Then I tried to send the same data instead to an I2C-interfaced standard 4x20 LCD display. The LCD is wired up properly, and receives the startup message sent before the interrupt process begins. As soon as the "lcd.print(...)" command is called after the interrupts begin, the interrupt process shuts down, and the whole circuit just hangs.
I looked at the cpp code in the library for the LCD, and found quite a number of "delay(xxxx)" commands, associated with output to the LCD. Some of them are as long a one millisecond.
So the question is, does the delay function, which I suspect is setting an internal timer, cancel external interrupts? If so, is there a workaround?
You have not staated which version of the IDE you are using.
The way delay() is handled internally changed dramatically in version 0019.
You didn't say where you are calling the lcd output routines.
If this is in the ISR, then that is not good as while the ISR is running
all interrupts are blocked and since the lcd routines are synchronous,
the routines take a considerable amount of time (10's milliseconds depending on what is being done).
In the case of i2c, interupts are used to process the data, so if you attempt to use
a lcd library that uses i2c, it will not work (and will hang) if the lcd routines are called from an interrupt
routine since interrupts are masked while inside the ISR.
You should not be calling library routines from within interrupts. This includes input/ output and access to flash memory, filesystems and such.
Interrupts are only ever for dealing with events that must be - and can be dealt with promptly. Anything that requires more complex - and time consuming or time-dependent - handling, needs to be done by setting a semaphore which will be serviced by the main loop in due course (which may involve routines dependent on other interrupts).