Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 1 4. Режимы энергосбережения и сторожевой таймер 385 Перед выходом из процедуры расчета показаний датчика и вывода результатов не забываем полностью выключить АЦП (установкой всех битов регистра ADCSRA в нули) - включенный АЦП потребляет примерно 300-3 50 микроампер даже в по­ кое, и в режиме «сна>> они будут совершенно лишние. R1 5,1 к +5 В С 1 Т о. 1 +5 В С2 J--1 1 .о т 4 МГц c:::J + 5 8 МТ-1 0Т1 1 1 Reset 2 RXD 3 TXD 4 1NTO (PD2) 5 INT1 (PD3) 6 PD4 (TO) 7 Vcc 8 GND 9 XTAL1 1 0 XTAL2 11 PDS (Т1 ) 1 2 PD6 13 PD7 14 РВО (ADC5) РС5 28 (ADC4) РС4 27 (ADC3) РС3 26 (ADC2) РС2 25 (ADC1 ) РС1 24 (PCO) ADCO 23 GND 22 AREF 21 AVCC 20 SCK 1 9 MIS0 1 8 MOSl 1 7 (ОС1 В) РВ2 1 6 (ОС1А) РВ1 1 5 ATmega8 I c 3 0,1 Рис. 1 4.2. Экономичный термометр на дисплее МТ- 1 ОТ1 1 В части чтения датчика предлагаемая программа аналогична программе тестирова­ ния прерывания АЦП из главы 1 1 . Перевод в физические величины данных с дат­ чика ТМР36 мы также уже обсуждали. Ориентировочные калибровочные коэффи­ циенты можно вывести из указанных в этой главе условий : для датчика ТМР36 и опорного напряжения 2, 56 вольта величина кода АЦП будет лежать в пределах от 40 до 600 с крутизной 4 единицы кода на 1 °С и значением при О 0С, равном 200. Все эти величины приблизительflые и должны быть уточнены при калибровке . Величина «подставки» k0, равная в нашем случае 20 0 , - это значение кода, при ко­ тором характеристика «ломается» : выше его температура положительная, ниже - такая же, но отрицательная . Как показано в главе 1 1 , мы сначала должны сравнить код с этой «подставкой». Если он больше или равен k0, то из величины кода «под­ ставка» вычитается, если меньше - из «подставки» вычитается код. Полученный результат мы должны умножить на а1 - коэффициент крутизны, который вычис­ ляется из второго условия : он в нашем случае будет равен 2,5 градуса на единицу кода. Чтобы совершить целочисленное умножение, поступим так, как рекомендуется в главе 8: передвинем это число в целочисленный диапазон, умножив его на подхо­ дящую степень двойки. В нашем случае достаточно умножить на 256, получив

RkJQdWJsaXNoZXIy MTExODQxMg==