Компаратор это единственная периферия в AVR которая включена по умолчанию. Поэтому, если он не используется, его следует выключать. Допустимая ошибка (напряжение смещения) не более 40мВ, время отклика не более 0,5 мкс. Рабочие пины: прямой AIN0 и инверсный AIN1. Так же AIN0 называют положительным, а AIN1 отрицательным. Результат заносится в ACO бит регистра ACSR.
Официальный datasheet на ATmega168: http://www.atmel.com/images/doc2545.pdf работа компаратора описана в главе 23.2 на странице 246
Я потратил немного времени на перевод официального руководства, с которым и предлагаю далее ознакомится.
Компаратор управляется через регистр "Analog comparator control and status register" т.е. ACSR:
Ультразвуковые дальнометры HC-SR04 черезвычайно популярны в любительской робототехнике из-за своей дешевизны и простоты. Я тоже не остался в стороне, когда баловался с Arduino, теперь же хочу разобрать работу с сенсором на "низком уровне" и напсать пример работы на чистом Си.
Есть один принципальный момент. Часто работу с сенсором HC-SR04 реализуют через внешние прерывания. Но. В ATmega8 их всего два, и если сенсор будет работать на колесном шасси, то внешние прерывания будут заняты колесными энкодерами. Однако, как я говорил в посте про прерывание захвата, оно работает аналогично внешнему, т.е. есть смысл попытаться его задействовать.
Заглянем в datasheet HC-SR04 и посмотрим на протокол работы сенсора: