Приветствую, Господа!

Делал я штуку, в которой LCD по 4-х проводной схеме управлялся портом B и на этих же линиях сидела клавиатура из 4-х кнопок развязанная резисторами и подающая "0" (точно как на картинке, только все 4 линии (LCD) и pullup's только от AVR . Имел точно такойже эффект.

Вскрытие показало, что сигнал на входе порта не успевает принять желаемое значение за время от переключения порта на считывание до собственно считывания этого порта в прерывании. Одновременно выяснилось, что развязывающие резисторы 5.6к многовато.

Помогло:
- уменьшение резисторов до 3.6К
- разнесение момента переключения и считывания порта на 100мкс (это удобная для меня дискретность, обусловленная особенностью программы).

В процессе вскрытия выяснилась еще одна интересная вещь: если у LCD отключить питание, а на AVR оставить ("завешивал" и плюс и минус по очереди) потребляемый ток остается почти такой же, как и при подключеном питании LCD - т.е он начинает кормиться со входов.

Интересно, а осцилограф включали?

Не легко бороться со схемой, когда нельзя залезть внутрь с паяльником (этоя я про LCD).