Схема. Регистратор температуры
В этом проекте используется датчик температуры, который показывает на дисплее окружающую температуру в градусах Цельсия и Фаренгейта. Он также отображает минимальные и максимальные температуры, записанные регистратором. На рис. 4.10 приведена блок-схема проекта. Дисплей Nokia 3310 служит для отображения показаний. Кнопка на плате переключает режим индикации. В одном случае отображаются показания температуры (попеременно в градусах Цельсия и Фаренгейта), в другом — выводится график изменения температуры во времени. Устройство питается от батарей.
Спецификации проекта
Цель проекта — создать систему регистрации температуры, которая будет показывать температуру окружающей среды в градусах Цельсия или Фаренгейта, а также ее минимальные и максимальные значения. Устройство также должно отображать температуру как функцию от времени. Чтобы переносить и устанавливать устройство в любом месте, следует предусмотреть питание от батарей.
Описание устройства
На рис. 4.11 изображена принципиальная схема регистратора температур. Поскольку в проекте используется дисплей Nokia, то для него требуется напряжение питания от 2,7 до 3,3 В. Источник питания выполнен на основе повышающего преобразователя постоянного тока TPS61070, который выдает 3,3 В от одной батарейки в 1,5 В. Батарейка подключается к клеммам SL3. Поскольку защиты от неправильной полярности нет, следует тщательно следить за правильным подключением батарейки. Дисплей Nokia подключается при помощи шины SPI через разъем SL1.
Самый важный компонент системы — датчик температуры. Это может быть термистор, термопара или полупроводниковый датчик. Последний использовать проще всего.
Существуют разные полупроводниковые датчики температуры. Некоторые датчики выдают аналоговый сигнал (напряжение которого пропорционально температуре); другие датчики выдают цифровое значение в градусах Цельсия или Фаренгейта. Мы воспользовались температурным датчиком DS1820, который преобразует температуру в 9-разрядное число (представляющее температуру в градусах Цельсия или Фаренгейта). Точность отсчета температуры — 0,5 градуса Цельсия или 0,9 градуса Фаренгейта (в диапазоне от -55 до +125 °С или от -67 до +257 °F).
Преобразованные данные можно считать с интерфейса датчика. На принципиальной схеме датчик DS1820 обозначен как SL2. На схеме показаны также четыре кнопки (S1-S4), но в данном проекте задействована только одна. Остальные кнопки потребуются в других проектах этой главы. В устройстве применен микроконтроллер Tiny44 в корпусе SMD с 14 контактами и 4 Кбайт памяти для программ. При включении питания или сбросе микроконтроллер инициализирует дисплей, опрашивает датчик DS1820 и отображает температуру (в градусах Цельсия или Фаренгейта) на дисплее. Он также хранит наблюдавшиеся минимальное и максимальное значения температуры. Пользователь может в любой момент нажать кнопку, и система переключится в другой режим, где на индикаторе вычерчиваются значения температуры как функции от времени. Система постоянно выполняет замеры температуры, но сохраняет только одно значение каждые десять минут (и вычерчивает график на дисплее). Предусмотрено хранение не более 40 значений, поэтому изменения температуры отображаются за последние 400 минут. Данные, хранящиеся в буфере, постоянно сдвигаются (для размещения новых отсчетов), более старые значения стираются.
Конструкция
Плата односторонняя (на стороне компонентов есть всего несколько перемычек). Стороны печатной платы показаны на рис. 4.12 и 4.13. Сначала следует смонтировать преобразователь напряжения и его навесные элементы. Паять микросхему TPS61070 нужно очень осторожно. Затем, до установки остальных компонентов необходимо протестировать напряжение на выходе TPS61070. Внешний вид дисплея регистратора в разных режимах показан на рис. 4.14 и 4.15.
Программирование
Тактовая частота равна 1 МГц. Микроконтроллер запрограммирован при помощи STK500 в режиме программирования ISP. Датчик температуры DS1820 выполняет операции чтения и записи через однопроводной интерфейс Далласа, реализованный программно. Чтобы понять суть, вы можете заглянуть в спецификацию датчика температуры. Самые важные фрагменты кода иллюстрирует листинг 4.4.
Листинг 4.4
int ds1820_read(void)
{
char busy=0;
unsigned char temp1,temp2;
int result;
onewire_reset();
onewire_write(0xCC);//Пропустить команду Rom
onewire_write(0x44);
//Команда преобразования температуры
while (busy == 0)
busy = onewire_read();
onewire_reset();
onewire_write(0xCC);//Пропустить команду Rom
onewire_write(0xBE);
//Прочитать команду Scratchpad
temp1 = onewire_read () ;
temp2 = onewire_read () ;
onewire_reset () ;
result = temp1*5;
//Точность 0.5 градусов Цельсия
//Результат в десять раз больше, чем фактическая температура
return result;
}
Функция ds1820_read опрашивает датчик DS1820 и возвращает значение, которое в десять раз больше фактической температуры в градусах Цельсия (после выполнения необходимого масштабирования). Главный бесконечный цикл программы работает в двух режимах. В первом режиме отображается текущая температура (вместе с ее минимальным и максимальным значениями) в градусах Цельсия и Фаренгейта. Во втором режиме отображается график изменения температуры. График рисуется при помощи функции graph1, которая извлекает значения для вычерчивания пикселов из массива data. Функция setlcd служит для рисования осей на экране LCD. Остальные фрагменты кода выполняют инициализацию LCD и графического режима. Кнопка S4 (РА1) переключает режим. Переход из режима рисования графика к отображению температуры (и обратно) не приводит к удалению графических данных.
Прилагаемые файлы: Temperature_Plotter.rar