Затеялся тут с синтезатором на Si5351. Так как это моя первая программа на Си (не считая конечно "моргания" светодиодом), поэтому прошу больно не пинать.
Ситуация такая. При вращении валкодера изменение частоты на индикаторе происходит хаотично. То есть частота меняется не всегда на единицу, как должно быть, а иногда на 2,3. Иногда бывает, что валкодер как-бы не чувствует, что его вращают. Работает он по внешнему прерыванию INT0.
У меня есть подозрение, что задержка с выводом на индикатор происходит из-за того, что программа обработки прерывания цифру добавляет правильно, но на экран она выводится лишь тогда, когда программа дойдет до места вывода, а за это время может произойти следующее прерывание, добавится еще единица, и в последующем на индикатор будет выведено изменение уже не на единицу, а не две. Догадка в общем вроде подтверждается. После обработки прерывания по сигналу валкодера, ввел сразу вызов функции вывода на экран новой частоты. Теперь валкодер обрабатывает все четко, без всяких пропусков. Но, как мне кажется, это решение проблемы "в лоб".
Что еще не понятно. Эта программа мало отличается от варианта, который раньше был написан на Баскоме. Алгоритм практически тот же. Там правда была Мега8, здесь 168. И там, таких неприятностей не было.
Если у кого есть желание "поковыряться" внизу код. Там еще не все для синтезатора, но вопрос пока по работе с валкодером. В тексте можно видеть два вызова функции вывода на экран "lcd_init();", один вызов из функции main, второй сразу после обработки прерывания (это устранило проблему пропуска цифр).