Отключаемые счетчики электроэнергии на пульте. Все с документами пломбами, гарантией и без посредников!

Логгер температуры

 Попрактивовавшись с различной периферией (датчиками температуры, часами реального времени, микросхемами памяти) решил собрать все это в кучу и сделать устройство способное замерять температуру, фиксировать точки экстремума (максимума и минимума) температуры, запоминать время точек экстремума, высчитывать среднесуточную температуру и записывать все эти данные в энергонезависимую память микросхемы EEPROM.   В качестве базовой платы использован модуль с микроконтроллером Atmega32 и с дисплеем от Nokia 3310. В качестве памяти я использовал EEPROM микросхему 24LC08 с объемом памяти 1кб, этого хватит чтобы мониторить температуру в течении 2 месяцев.

 За временем следит специализированная микросхема DS1307, имеющая автономное питание от 3-х вольтовой батарейки, поэтому можно не опасаться за потерю настроек времени при пропадании основного питания. А измерением температуры занимается датчик температуры DS18b20

 Схема подключения обвеса микроконтроллера приведена ниже. Микроконтроллер работает на частоте 16МГц, тактирование от внешнего кварца.

  

 Напряжение питания (VCC) 5 вольт. Питание микроконтроллера на схеме не показано. Конденсаторы С1 и С2 у кварца Х2 номиналом 18-22 пФ. Не помешают так же керамические конденсаторы по 0,1 мкФ возле каждой микросхемы. Светодиод D1 служит для индикации работы с микросхемой памяти, когда происходит считывание или запись данных, светодиод загорается.

 Пока что у меня все это выглядит так.

 Принцип работы

 Несколько раз в минуту происходит считывание датчика температуры. Если считанное значение температуры больше или меньше зафиксированного значения, тогда фиксируется новое значение макс/мин температуры. Также записывается время когда был зафиксирован рекорд температуры (часы:минуты). Затем расчитывается средняя температура с учетом всех считанных значений температур в течении суток. Все эти данные хранятся в оперативной памяти микроконтроллера до наступления новых суток, при смене суток эти данные записываются в энергонезависимую память микросхемы 24LC08. После записи, все  значения пиков температур обнуляются чтобы для новых суток фиксировать новый максимум/минимум, и высчитывать новую среднесуточную.  Чтобы посмотреть записанные данные, нужно подключить устройство к терминалу и нажать кнопку PB1. Об этом чуть позже.

 

 Настройка часов

 Так как используются часы реального времени с автономным питанием, поэтому пока не стал уделять внимания настройке часов с помощью кнопок. В дальнейшем планирую организовать полноценный пользовательский интерфейс с менюшками, а пока настройка часов выглядела так:

$regfile = “m32def.dat”

$crystal = 16000000

$lib “ds1307clock.lib”                             ‘подключение библиотеки ds1307

‘конфигурируем scl и sda пины

Config Sda = Portb.0                               ‘ I2C Data

Config Scl = Portb.1                               ‘ I2C Clock

Const Ds1307w = &HD0

Const Ds1307r = &HD1

Dim Seco As Byte 

Dim Mine As Byte

Dim Hour As Byte

Dim Day As Byte

Dim Dat As Byte

Dim Month As Byte

Dim Year As Byte

 Seco = 0

 Seco = Makebcd(seco)

I2cstart

I2cwbyte Ds1307w

I2cwbyte 0

I2cwbyte Seco

I2cstop

 Mine = 13

 Mine = Makebcd(mine)

I2cstart

I2cwbyte Ds1307w

I2cwbyte 1

I2cwbyte Mine

I2cstop

 Hour = 15

 Hour = Makebcd(hour)

I2cstart

I2cwbyte Ds1307w

I2cwbyte 2

I2cwbyte Hour

I2cstop

 Dat = 4

 Dat = Makebcd(dat)

I2cstart

I2cwbyte Ds1307w

I2cwbyte 4

I2cwbyte Dat

I2cstop

 Month = 10

 Month = Makebcd(month)

I2cstart

I2cwbyte Ds1307w

I2cwbyte 5

I2cwbyte month

I2cstop

 Year = 11

 Year = Makebcd(year)

I2cstart

I2cwbyte Ds1307w

I2cwbyte 6

I2cwbyte Year

I2cstop

End

   Присваиваем переменным seco, mine, hour, dat, month, year  текущие значения, компилируем, прошиваем программой контроллер. Подключаем микросхему часов (если она еще не была подключена) и подаем питание. Все, часы настроены и будут исправно тикать, если конечно не вытаскивать батарейку.

 Организация памяти 

 Запись суточных данных происходит постранично (на одни сутки выделена одна страница памяти), что это и как происходит писал здесь. Распределение данных в ячейках памяти у меня выглядит так (одна страница):

 

 0 – число 

 1 – месяц

 2 – год

 3 – час максимальной температуры

 4 – минуты максимальной температуры

 5 – знак максимальной температуры

 6 – значение максимальной температуры

 7 – час минимальной температуры

 8 – минуты минимальной температуры

 9 – знак минимальной температуры

 10 – значение минимальной температуры

 11 – знак среднесуточной температуры 12 – значение среднесутчной температуры

 Оставшиеся 3 байта памяти (13-15) остаются пустыми, так что можно записать еще немного данных. 

 Если память полностью заполняется, снова происходит запись с первой страницы памяти, с затиранием самых старых данных.

  После записи всех данных на внешнюю EEPROM, происходит сохранение адреса, куда должна произойти следующая запись данных. Этот адрес сохраняется во строенной в микроконтроллер энергонезависимой памяти. Поэтому после появления питания, запись продолжится после записанных ячеек памяти и не произойдет затирание данных с прошлыми измерениями.

  Считывание данных

 Извлечение записанных данных из микросхемы памяти происходит при нажатии на кнопку РВ1. Во время считывания и отправки в терминал данных загорается светодиод D1.

Данные отправляются в терминал по UART. Для сопряжения с компьютером использовался  конвертер на микросхеме FT232RL. Отправка происходит на скорости 9600 бод. В терминале прочитанные данные выглядят следующим образом:

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

 После небольших махинаций, принятые данные вставляются в таблицу Excel и делается наглядный график. Вот что у меня вышло за время тестирования устройства:

 Итак наметки на будущее, то что нужно доработать в устройстве и в программной части:

 Пока все, если есть еще идеи интересно узнать.

 Архив с прошивкой и исходниками можно скачать ниже:

 СКАЧАТЬ (обновление от 11.10.11) 


Взято с: avrproject.ru


Категория: AVR
Метки:

Написать коментарий

*
= 5 + 4

Добавить изображение

Последние статьи