С помощью датчиков автоматизируется большая часть технологических процессов в промышленности. Большинство этих датчиков, таких как датчики паров аммиака, температуры и им подобные, являются резистивными устройствами, электрическое сопротивление которых изменяется – в большинстве случаев нелинейно – при изменении условий окружающей среды. Сопротивление датчиков может лежать в диапазоне от 1 милиома до 10 Мом. На рис. 1 приведена схема измерения сопротивления. В качестве контроллера в ней используется AVR-микроконтроллер с восемью выводами, Tiny13V, компании Atmel. Микроконтроллер Tiny13V работает в диапазоне напряжения питания от 1,8 до 5,5 В. В этой конструкции используется аналог генератора, работающий на принципе асинхронного мультивибратора в Tiny13 (рис. 2). Генератор не имеет стабильного состояния, и его выходной сигнал постоянно находится в одном из двух квазистабильных состояний. Этот генератор вырабатывает частоту, зависящую от величины сопротивления. Когда сопротивление возрастает, частота уменьшается, соответственно, чтобы узнать величину сопротивления вы можете просто измерить частоту генератора.
Сопротивление, которое вы хотите измерить подключается между двумя линиями ввода-вывода общего назначения и конденсатором, C1, известного номинала, подключенного параллельно к сопротивлению и другой линии ввода-вывода общего назначения. Обратите внимание, что PB0 и PB1 всегда находятся в противоположном состоянии для реализации схемы НЕ. PB2 считывает низкое или высокое напряжение на резисторе R1.
Первоначально, PB0 находится в высоком состоянии, PB1 в низком, а PB2 находится в высокоомном состоянии. В результате, конденсатор начинает заряжаться с постоянной времени RC. Обратите внимание, что в первый момент конденсатор работает как короткое замыкание, и с PB2 считывается высокий уровень. По мере заряда конденсатора, напряжение на резисторе уменьшается, и когда на PB2 будет низкий уровень, PB1 перейдет в высокое состояние, а PB0 в низкое. После чего, по мере разряда конденсатора, напряжение на резисторе будет возрастать, и когда на PB2 появится высокий уровень, PB0 перейдет в высокое состояние, а PB1 в низкое. Таким образом, измерение частоты или половины количества переключений PB0 в секунду дает величину обратно пропорциональную сопротивлению, R1 (на рис. 1), с частотой f: R1=k/f, где k - коэффициент пропорциональности. Результат передается в ПК через последовательный интерфейс RS-232. Так как Tiny13 не имеет аппаратный блок UART, создана программа программной эмуляции UART и программа для измерения сопротивления.