Цитата(=GM= @ Apr 10 2007, 16:08)

Так не годится. Ну вот вы решили добавить некую функцию, добавили её, а все времена у вас поплыли. Кроме того, нет гарантии, что сложные библиотечные функции, не ваши типа printf, будут всегда выполняться за одно и то же время, там может быть много ветвлений с разными временами выполнения. В итоге набежит ошибка. Возможно, в данной задаче такая ошибка не играет роли, хотя автор утверждает, что времена расходятся, но в общем так лучше не делать.
Да, и у автора однократный режим, он переключается с канала на канал и разово запускает АЦП.
Цитата(gormih @ Apr 10 2007, 22:24)

Вы имеете ввиду добавить функцию в прерывание АЦП? В таком случае ставьте ее уже после перезапуска ацп, и ничего не поплывет. Перезапуск АЦП в режиме ADCRUN на сколько я помню в атмеге происходит после считывания старшего байта результата. Вот после этого можете что угодно делать в прерывании, лишь бы время выполнения не превысило время преобразования АЦП :-) То есть первое, что следует сделать в прерывании - считать его значение, дальше заниматься своими делами и ничего не поплывет.
ADC на AVR (да и не только на нем) штука исключительно синхронная (с MCU),
так что при острой необходимости, нет никаких препятствий для запуска ADC
синхронно с каким-нибудь таймером,
как и нет никаких препятствий для того чтобы воспользоваться ADC как еще одним таймером
при нехватке оных(правда только в режиме переполнения)