Приветствую, Господа!
Делал я штуку, в которой LCD по 4-х проводной схеме управлялся портом B и на этих же линиях сидела клавиатура из 4-х кнопок развязанная резисторами и подающая "0" (точно как на картинке, только все 4 линии (LCD) и pullup's только от AVR . Имел точно такойже эффект.
Вскрытие показало, что сигнал на входе порта не успевает принять желаемое значение за время от переключения порта на считывание до собственно считывания этого порта в прерывании. Одновременно выяснилось, что развязывающие резисторы 5.6к многовато.
Помогло:
- уменьшение резисторов до 3.6К
- разнесение момента переключения и считывания порта на 100мкс (это удобная для меня дискретность, обусловленная особенностью программы).
В процессе вскрытия выяснилась еще одна интересная вещь: если у LCD отключить питание, а на AVR оставить ("завешивал" и плюс и минус по очереди) потребляемый ток остается почти такой же, как и при подключеном питании LCD - т.е он начинает кормиться со входов.
Интересно, а осцилограф включали?
Не легко бороться со схемой, когда нельзя залезть внутрь с паяльником (этоя я про LCD).