Для того чтобы дальше разбираться с TWI модулем, нужно ознакомиться с его регистрами, и сейчас нам придется проделать эту нудную работу. Разбор регистров будет вестись на примере микроконтроллера atmega16. В других микроконтроллерах возможны небольшие отличия. 

В составе некоторых микроконтроллеров AVR есть модуль двухпроводного последовательного интерфейса (Two -wire Serial Interface или TWI). Модуль предназначен для организации обмена данными между микросхемами, подключенными к двухпроводной шине. Основное преимущество этого интерфейса перед SPI и UART`ом - это возможность организации сети из нескольких устройств. 

Двухпроводный интерфейс является аналогом I2C интерфейса фирмы Philips, только в случае AVR, не поддерживает высокие скорости передачи данных (свыше 400 kbit/s). Соображения, по которым Atmel использует другое названия, видимо связано с нежеланием платить Philips за лицензию.

В этом материале мы разберемся с основами двухпроводного последовательного интерфейса, а в следующих перейдем к работе с TWI модулем AVR.

Один из самых простых модулей микроконтроллеров AVR - это аналоговый компаратор. Он сравнивает между собой два напряжения и запоминает результат сравнения в регистре. Также он может вызывать прерывания, если результат сравнения изменился, и управлять схемой захвата таймера Т1 (конечно если он есть). 

Обычно аналоговый компаратор используется как однобитный АЦП. Например, компаратором можно отслеживать уровень заряда батареи или момент перехода переменного напряжения через ноль. Еще он может быть задействован для измерения длительности аналоговых сигналов и в ряде извращений нестандартных решений. Таких как многоразрядный АЦП последовательного приближения. 

В этой статье мы разберемся, как пользоваться аналоговым компаратором на примере atmega16.


Написал простой парсер для разбора данных. Он имеет минимальный, но достаточный функционал для организации программы управления микроконтроллером с компьютера или какого-нибудь другого устройства. 

Парсер принимает в буфер поток символов и разбирает их на слова. Под словами в данном случае подразумевается один или несколько символов отделенных пробелами. Количество пробелов неважно, все они заменяются в буфере одним символом окончания строки ('\0'). Прием данных выполняется до первого символа перевода каретки ('\r'). Если внутренний буфер переполняется, данные перестают приниматься, но символ перевода каретки все равно ожидается.

Когда входная последовательность символов (входная строка) обработана, мы получаем следующий результат - в буфере лежат принятые слова, мы знаем количество этих слов и имеем указатели на каждое из них.

Далее нам нужно только написать интерпретатор принятых слов. Для этого в программном модуле парсера есть несколько дополнительных функций - функции для сравнения строк и функции для перевода строки в число.




Следующий режим работы таймера Т0 - это режим CTC (Clear Timer on Compare) или "сброс при совпадении". Таймер в этом режиме работает следующим образом. 

При инициализации таймера мы очищаем счетный регистр TCNT0, а в регистр сравнения OCR0 загружаем число. Затем устанавливаем режим СТС и требуемый коэффициент предделителя. 

Таймер начинает работу. По каждому импульсу тактового сигнала счетный регистр увеличивает свое значение на единицу. Когда значение счетного регистра совпадет с регистром сравнения, установится флаг OCF0, счетный регистр сбросится и счет продолжится с нуля.