По каким-то, для меня непонятным причинам, иногда (достаточно редко) с АЦП в память попадает не текущее значение АЦП (точнее не то, что должно быть), а с предыдущего канала. Причём если я в данной точке останавливаюсь по JTAG, то в АЦП микросхемы вижу правильное значение. Например:
Код
127 default:
128 x0=Adc[TekChan].X1=ADCH; // Прочитать значение АЦП
\ ??pvPWWLvl1_7:
\ 000000B8 91300079 LDS R19, 121
\ ??pvPWWLvl1_9:
\ 000000BC 8334 STD Z+4, R19
\ 000000BE 2E23 MOV R2, R19
128 x0=Adc[TekChan].X1=ADCH; // Прочитать значение АЦП
\ ??pvPWWLvl1_7:
\ 000000B8 91300079 LDS R19, 121
\ ??pvPWWLvl1_9:
\ 000000BC 8334 STD Z+4, R19
\ 000000BE 2E23 MOV R2, R19
То есть по databreakpoint останавливаюсь в последней строчке и вижу в АЦП значение FF к примеру, а в ячейку уже занесено 83. Каналы и всё прочее выставляется верно.
Создаётся впечатление, что АЦП не успевает завершить операцию. Но, как я уже писал, при увеличении времени в разы сама ошибка остаётся.
Может я чего не знаю. Может необходимо как то обновить значение. Типа прочитать два раза или что-то ещё.
Я в непонятках.