Разработка автоматизированной системы контроля и управления бытовой техникой на основе Linux и микроконтроллера AVR

Обеспечение удалённого и централизованного автоматизированного управления устройствами бытовой техники и контроля за помещением. Разработка микропрограммы для микроконтроллера AVR под управлением Linux и отладка клиентского программного обеспечения.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 15.09.2012
Размер файла 2,7 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Обнаружив импульс RESET, ведомое устройство приводит свои внутренние узлы в исходное состояние и формирует ответный импульс PRESENCE, как следует из рисунка - не позже 60 микросекунд после завершения импульса RESET. Для этого устройство переводит в низкий уровень линию DQ и удерживает ее в этом состоянии от 60 до 240 микросекунд. Конкретное время удержания зависит от многих параметров, но всегда находится в указанном диапазоне. После этого устройство так же "отпускает" шину. Но после завершения импульса PRESENCE устройству дается еще некоторое время для завершения внутренних процедур инициализации, таким образом, микроконтроллер должен приступить к любому обмену с устройством не ранее, чем через 480 микросекунд после завершения импульса RESET. Итак, процедура инициализации интерфейса, с которой начинается любой обмен данными между устройствами, длится минимум 960 микросекунд, состоит из передачи от микроконтроллера сигнала RESET и приему от устройства сигнала PRESENCE. Если сигнал PRESENCE не обнаружен - значит на шине 1-Wire нет готовых к обмену устройств.

Теперь рассмотрим процедуры обмена битами информации, которые осуществляются определенными тайм-слотами. Тайм-слот - это по существу определенная, довольно жестко лимитированная по времени последовательность смены уровней сигнала в линии 1-Wire. Различают 4 типа тайм-слотов: передача «1» от микроконтроллера, передача «0» от микроконтроллера, прием «1» от устройства и прием «0» от устройства. Любой тайм-слот всегда начинает микроконтроллер путем перевода шины 1-Wire в низкий логический уровень. Длительность любого тайм-слота должна находиться в пределах от 60 до 120 микросекунд. Между отдельными тайм-слотами всегда должен предусматриваться интервал не менее 1 микросекунды (конкретное значение определяется параметрами ведомого устройства).

Тайм-слоты передачи отличаются от тайм-слотов приема поведением микроконтроллера: при передаче он только формирует сигналы, при приеме, кроме того, еще и опрашивает (т.е. принимает) уровень сигнала в линии 1-Wire. Следующий рисунок демонстрирует временные диаграммы тайм-слотов всех четырёх типов: вверху показаны тайм-слоты передачи от микроконтроллера, внизу - приема от устройства.

Рисунок 20 - Структура тайм-слотов

Тайм-слот передачи «0» заключается просто в удержании шины 1-Wire в низком уровне в течение всей длительности тайм-слота. Передача «1» осуществляется путем "отпускания" шины 1-Wire со стороны микроконтроллера не ранее чем через 1 микросекунду после начала тайм-слота, но не позже чем через 15 микросекунд. Ведомое устройство опрашивает уровень в шине 1-Wire в течение временного интервала, условно показанного в виде серого прямоугольника, т.е. начиная с 15-й микросекунды от начала тайм-слота и заканчивая 60-й микросекундой от начала. Типичный момент ввода уровня в устройство (т.е. характерный для большинства устройств) - около 30-й микросекунды от начала тайм-слота. Заштрихованная область - это область "нарастания" уровня в шине 1-Wire, которая зависит от емкости линии и сопротивления подтягивающего резистора, она приведена для справки.

Тайм-слоты приема информации отличаются тем, что микрокотроллер формирует только начало тайм-слота (абсолютно так же, как при передаче «1»), а затем управление уровнем шины 1-Wire берет на себя устройство, а микроконтроллер осуществляет ввод этого уровня так же в определенной зоне временных интервалов. Зона эта, как видно из рисунка, довольно мала. Как и раньше, заштрихованная область - область неопределенности, поэтому для ввода контроллеру остается даже не промежуток, а скорее конкретный момент, когда он должен ввести уровень сигнала из линии. Этот момент времени - 14-я или 15-я микросекунда от начала тайм-слота. Если линия имеет малую емкость, а подтягивающий резистор мал, зона опроса несколько расширяется.

Микроконтроллера начинает тайм слот с выдачи в шину 1-Wire "0" в течение 1 микросекунды. Последующий уровень зависит от типа тайм слота: для приема и передачи "1" уровень должен стать высоким, а для передачи "0" - оставаться низким вплоть до конца тайм-слота, т.е. не менее 60 и не более 120 микросекунд. Если микроконтроллер принимает данные, то опрос уровня в шине он должен сделать на промежутке от 13-й до 15-й микросекунде тайм-слота. Микроконтроллер должен обеспечить интервал между отдельными тайм-слотами не менее 1 микросекунды. Важно понимать, что следует очень тщательно подходить к обеспечению в шине 1-Wire требуемых временных интервалов, т.к., например, увеличение длительности тайм-слота вывода "0" свыше рекомендованного значения может привести к ошибочному восприятию этого тайм-слота, как сигнала RESET. Следует учитывать влияние самой линии на длительность фронтов импульсов. Все сигналы, которые должен формировать микроконтроллер, следует формировать по принципу необходимого минимума длительности (т.е. немного больше, чем указанная минимальная длительность), а от устройства следует ожидать сигналов по принципу наихудшего (т.е. ориентироваться на самые худшие варианты временных параметров сигнала). Мною проверено, что соединение по свитым вручную обычным монтажным проводам при типовом подтягивающем резисторе однозначно возможно на расстоянии до 9м, для подключения датчиков температуры этого более, чем достаточно.

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

При рассмотрении протокола обмена мы будем исходить из принципа, что на шине 1-Wire имеется более одного устройства. В этом случае перед микроконтроллером встают 2 проблемы: определение количества имеющихся устройств и выбор (адресация) одного конкретного из них для обмена данными. Решение первой проблемы осуществляется двумя путями: универсальным и гибким, но требующим довольно сложного программно-реализуемого алгоритма, и простым, но с большими ограничениями. Более простой заключается в том, что номера всех используемых в схеме 1-Wire-устройств известны заранее, и они просто используются как константы в программе. Эти номера нанесены прямо на корпусе датчиков, но в любом случае узнать их просто, написав не сложную программу. Все номера устройств 1-Wire на шине уже известны, поэтому алгоритм следующий. Микроконтроллер посылает, импульс RESET, и все датчики выдают PRESENCE. Затем микроконтроллер посылает в шину команду, которую принимают все устройства. Команд определено несколько общих для всех типов 1-Wire-устройств, а так же могут быть команды, уникальные для отдельных типов, в нашем случае это команды для чтения температуры. Среди общих команд нас интересуют следующие:

Таблица 13 - Общие команды для 1-Wire устройств

Команда

Значение байта

Описание

SEARCH ROM

0xF0

Поиск адресов - используется при универсальном алгоритме определения количества и адресов подключенных устройств

READ ROM

0x33

Чтение адреса устройства - используется для определения адреса единственного устройства на шине

MATCH ROM

0x55

Выбор адреса - используется для обращения к конкретному адресу устройства из многих подключенных

SKIP ROM

0xCC

Игнорировать адрес - используется для обращения к единственному устройству на шине, при этом адрес устройства игнорируется (можно обращаться к неизвестному устройству)

В случае с датчиками температуры мы будет использовать также:

Таблица 14 - Команды датчиков температуры

Команда

Значение байта

Описание

CONVERT

0x44

Конвертирование температуры в цифровой формат

READ SCRATCHPAD

0xBE

Чтение температуры

Получаем, что алгоритм работы с датчиками такой:

1. Посылаем сигнал RESET.

2. Ожидаем сигнала PRESENSE.

3. Посылаем команду «0xCC», т.е. адресуем дальнейшие команды всем датчикам ни линии

4. Посылаем команду «0x44», т.е. команду получить текущую температуру в цифровом виде.

5. В течении нескольких секунд удерживаем линию в состоянии высокого уровня, чтобы датчиках хватило питания.

После этого для каждого из датчиков выполняем следующую последовательность:

1. Посылаем сигнал RESET.

2. Ожидаем сигнала PRESENSE.

3. Посылаем команду «0x55», указывая, что обращаемся к конкретному датчику.

4. Посылаем серийный номер опрашиваемого датчика.

5. Посылаем команду «0xBE» для чтения данных.

6. Читаем 9 байт данных.

7. Декодируем полученные данные и получаем температуру.

Отрывок из получившейся программы:

void DS1820_Update()

{

iButtonDDR &= ~((1 << MasterPinTX) + (1 << MasterPinRX));

iButtonPORT &= ~((1 << MasterPinTX) + (1 << MasterPinRX));

unsigned int res, i, sens, b;

unsigned char Data[9];

// Чтение данных с сенсоров

for (sens = 0; sens < SensorsCount; sens++)

{

iButton_Master_TX(500);

res = 0;

for (i = 0; i < 500; i++)

{

if (iButton_Master_RX) res = 1;

_delay_us(1);

}

if (res == 0)

{

DS1820_temp[sens][0] =

DS1820_temp[sens][1] = 0xAA;

} else {

cli();

SendByte(0x55); // Match ROM

for (b = 0; b < 8; b++)

SendByte(pgm_read_byte(&SensorsSerials[sens][b])); SendByte(0xBE);

for (i = 0; i < 9; i++) Data[i] = ReadByte();

sei();

if (CheckCRC(Data, 9))

{

DS1820_temp[sens][0] = Data[0];

DS1820_temp[sens][1] = Data[1];

} else

DS1820_temp[sens][0] = DS1820_temp[sens][1] = 0xAA;

}

}

// Конвертирование данных,

// которые мы прочитаем при следующем опросе

iButton_Master_TX(500);

res = 0;

for (i = 0; i < 500; i++)

{

if (iButton_Master_RX) res = 1;

_delay_us(1);

}

if (res > 0)

{

cli();

SendByte(0xCC); // Skip ROM command

SendByte(0x44); // Convert!

iButton_StrongPullup;

sei();

}

}

На время опроса датчиков прерывания отключаются вызовом «cli» и включаются вызовом «sei». Делается это для того, чтобы не было искажений при отсчёте времени, которое в данном случае критично.

Для декодирования данных была написана функция «DS1820_GetTemp». Некоторые затруднения возникли в связи с тем, что микроконтроллер ATMEGA16 не поддерживает работу с дробными числами, а единица измерения у датчиков - 0,5°C. Поэтому моя функция выводит температуру уже в текстовом виде. Используется это только для вывода температуры на дисплей, при передаче через USART температура передаётся в не декодированном виде.

2.1.5 Работа с ДУ приёмником

ДУ приёмник TSOP1736 выдаёт на выходе низкий сигнал, когда в зону его действия попадает инфракрасный свет от пульта ДУ. Со стороны микроконтроллера остаётся только декодировать последовательность этих сигналов. Было реализовано декодирование протокола RC5, т.к. он самый распространённый на сегодняшний день и используется почти в любой бытовой технике. Исключение составляет только продукция компании SONY, которая использует свой собственны протокол. При необходимости можно доработать программу для работы и с их пультами.

В стандарте RC5 используется бифазное кодирование, также известное как код Манчестер. Частота несущей равна 36кГц. Начало передачи определяют 2 стартовых бита. Следом идет «toggle» бит. Если нажать кнопку на пульте и держать, будут генерироваться посылки (DataWord) с одинаковым значением toggle bit. Если отпустить кнопку и нажать снова, пойдут те же посылки, но уже с инверсным значением toggle bit. Следующие 5 бит - адрес источника, остальные 6 - код команды. Длина пакета (dataword) равна 24.9мс, период повторения пакета 114мс. Длина одного битового интервала ~ 1.8мс (Рисунок 22).

Рисунок 21 - Структура данных

Рисунок 22 - Манчестерское кодирование

Основной трудностью было то, что временные интервалы очень маленькие, т.е. надо очень часто опрашивать приёмник. Поэтому было решено воспользоваться встроенным таймером, который позволяет вызывать прерывание через строго определённый момент времени. Для работы с ДУ приёмником был написан модуль «tsopir.c», который предоставляет функции для опроса датчика, выдающие коды кнопок в числовом виде.

2.1.6 Разработка протокола для обмена данными

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

Таблица 15 - Структура пакета

Инициализирующая часть, состоящая из трёх символов «+», указывает на начало нового пакета. Соответственно длина части равна трём байтам.

Код пакета. Указывается на тип передаваемых данных. Длина этой части всегда равна одному байту.

Данные, смысл которых зависит от кода пакета. Длина данных варьируется.

Коды пакетов при приёме и при отправке у меня разные, т.к. передаются совсем разные типы данных. При получении данных программа микроконтроллера рассматривает пакеты как в следующей таблице.

Таблица 16 - Команды для основного блока

Код пакета

Длина данных

Значение данных

1

3

Синхронизация часов, три байта - это соответственно часы, минуты и секунды.

2

1

Запрос на получение основных данных от блока, это список доступных устройств, их состояние и пр.

3

48

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

4

1

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

5

48

Вывод второстепенной информации на дисплей, которая будет отображаться только одну секунду. 48 байт - это соответственно 48 символов.

6

2

Команда на включение или выключение устройства. Первый байт - номер устройства, второй определяет задание: «0» - выключение, «1» - включение.

7

1

Команда, сбрасывающая таймер отсутствия движения. Применяется для уведомления основного блока о том, что в помещении кто-то есть, чтобы предотвратить ложные срабатывания датчика движения. Один байт игнорируется.

8

1

Команда указывает, что кнопки управления основным блоком на пульте ДУ надо игнорировать. Используется для управления другими устройствами и ПО. Один байт данных игнорируется.

9

1

Команда обратная предыдущей, возвращает кнопки в обычный режим работы. Один байт данных игнорируется.

При передаче пакетов от микроконтроллера другим устройствам используется уже совсем другие команды:

Таблица 17 - Команды основного блока

Код пакета

Длина данных

Значение данных

1

1

Сигнал, который посылается после включения блока, указывая на начало работы. Данные - любой байт.

2

4

Данные о температуре. По два байта на каждый датчик, в моём случае это соответственно 4 байта.

3

1

Пакет указывает, что на основном блоке была нажата кнопка. Один байт данных - номер кнопки.

4

4

Команда указывает, что на пульте ДУ была нажата кнопка. 4 байта данных - код кнопки.

5

5

Команда указывает, что на пульте ДУ удерживается кнопка. 4 байта данных - код кнопки.

6

1

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

7

1

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

8

23

Названия устройств. Первый байт - номер устройства, остальные 22 байта - название.

9

1

Информация о движении в комнате. Один байт данных, «1» - движение есть, «0» - движение отсутствует.

В итоге прерывание, обрабатывающее входящие данные, выглядит так:

ISR(USART_RXC_vect)

{

unsigned char b;

while (UCSRA & (1<<RXC))

{

b = UDR;

if (b == '+')

{

command_pluscount++;

if (command_pluscount >= 3)

{

command_state = 1;

command_pluscount = 0;

}

} else command_pluscount = 0;

switch (command_state)

{

case 1: command_state = 2; break;

case 2:

3;

command_num = b;

command_len = 0;

command_complete = 0;

break;

case 3:

if (command_len < 64)

{

command_buf[command_len] = b;

command_len++;

}

if (

((command_num == 1) && (command_len >= 3 )) || (command_num == 2) ((command_num == 3) && (command_len >= 48 )) ||

(command_num == 4) ||

((command_num == 5) && (command_len >= 48 )) ||

((command_num == 6) && (command_len >= 2 )) ||

(command_num == 7) ||

(command_num == 8) ||

(command_num == 9)

) command_complete = 1;

break;

}

}

}

Здесь переменные «command_pluscount», «command_state», «command_num» и «command_len» - это глобальные целочисленные переменные, которые определяют на какой стадии происходит получение данных. «command_buf» - это буфер, в который принимаются сами данные. Возвращение из прерывания в основную программу должно происходить как можно быстрее, поэтому выполнение полученной команды происходит в основном коде программы, где с очень небольшим интервалом времени происходит проверка на новые команды (переменная «command_complete»).

2.1.7 Функции основного блока

Подведу итоги, пояснив какие функции выполняет основной блок, и по какой схеме он работает:

· Непосредственно управление устройствами и техникой, включение и выключение управляющих реле.

· Отображение на дисплее текущего времени и температуры.

· Возможность управлять устройствами непосредственно с основной панели блока, используя интуитивно понятные меню на дисплее.

· Возможность управлять устройствами с пульта ДУ.

· Автоматическое отключение определённых устройств при долговременном отсутствия движения в помещении.

· Полное взаимодействие с другими устройствами через RS-232: произвольный вывод текста на дисплей, передача нажимаемых кнопок.

Более полный листинг исходных текстов представлен в приложении А.

2.2 Разработка серверного и клиентского программного обеспечения

В третьей части своей дипломной работы раскрывается вопрос разработки программного обеспечения, которое будет работать с комплексом. Серверная часть будет работать на устройстве с ОС «Linux», для этого был выбран роутер «ASUS WL-500gP», который прошёл модернизацию по установке в него последовательных портов типа RS-232. Таким образом, было сделано идеальное устройство для работы с основным блоком. Способствуют этому следующие факторы:

· Маленький размер

· Низкое электропотребление

· Полное отсутствие шума

· Возможность подключать дополнительные устройства

Клиентское программное обеспечение легко разработать под любую платформу и операционную систему, которая может работать с сетью. Далее будет рассмотрен пример разработки такого приложения для ОС «Microsoft Windows».

2.2.1 Разработка серверной части для ОС «Linux».

Операционная система Linux уже давно зарекомендовала себя для серверных решений, когда программному обеспечению необходимо работать круглосуточно без вмешательства человека. Далее это рассматривается более подробно на примере rrdtool.

Серверная часть представляет собой программу, которая читает и пишет в последовательный порт, обмениваясь, таким образом, командами с основным блоком, передавая эти команды по сети подключившимся клиентам, число которых теоретически не ограничено (Рисунок 23).

Рисунок 23 - Схема взаимодействия модулей сервера

2.2.2 Модификация роутера для работы с комплексом

Внутри роутера ASUS WL-500gP тоже есть два USART порта, аналогичных тем, что встроены в микроконтроллер. Они идеально подходят для работы с основным блоком, но этому препятствуют два фактора:

· Порты находятся внутри роутера и наружу не выведены

· Для совместимости USART с интерфейсом RS-232 необходимо установить конвертер уровней.

Эти проблемы легко решаются аппаратной модификацией роутера. Было решено использовать конвертер напряжений MAX3232, т.к. в роутере используется процессор с пониженным напряжением в 3.3 вольта. Таким образом, задача свелась к разработке и установке дополнительного модуля внутрь корпуса роутера. Для этих целей была разработана плата (см. рис. 24).

Рисунок 24 - Печатная плата для конвертера напряжений

На этой плате была размещена микросхема MAX3232 в SOIC корпусе и пять конденсаторов. Затем она была установлена в корпус роутера и соединена проводами с выводами USART и гнёздами DB-9, которые являются стандартными для интерфейса RS-232. Первый вывод используется роутером для подключения консоли, второй же можно использовать для произвольных целей, что и было сделано.

В Linux все устройства представляются в виде файлов. В случае с этими портами это:

· /dev/tts/0

· /dev/tts/1

Если в эти файлы производить запись или чтение, то соответственно будет производиться запись в порт или чтение из порта. С точки зрения ОС «Linux» всё это «прозрачно». Таким образом, проверить работоспособность модификации можно простой командой «echo test > /dev/tts/1». Если всё работает, то произойдёт запись в порт, и подключенное к нему устройство получит строку «test». Единственное отличие от работы с обычными файлами заключается в том, что у портов есть ряд параметров: скорость, чётность, контроль передачи и пр. Поэтому перед началом работы с портом необходимо его инициализировать, задав нужные настройки. В данном проекте используется скорость 38400 бод, 8 бит данных и один стоповый бит.

2.2.3 Разработка клиентского ПО для Microsoft Windows

Рассмотрим разработку клиентской программы, которая позволяет управлять бытовой техникой с использованием компьютера под управлением ОС «Microsoft Windows». Основной целью было разработать программу, которая выполняет следующие функции:

· Подключение к серверу, который работает под ОС «Linux» и синхронизация, получение информации о состоянии устройств, их названиях и пр.

· Возможность включать и выключать устройства, используя простой и приятный интерфейс.

· Получение от сервера информацию о кнопках, нажимаемых на пульте ДУ и последующей рассылке их программам, работающим в системе, используя протокол WinLIRC.

· Приём произвольных DDE сообщений от других программ и передача их серверу для вывода на дисплей основного блока.

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

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

Моя программа запускается в фоне при запуске системы, проявляя себя только значков в системном трее. Через пять секунд она подключается к серверу. Двойным кликом по значку вызывается основное окно программы (Рисунок 25).

Рисунок 25 - Основное окно клиентской программы

Главное окно программы разделено на несколько вкладок. В первой вкладке можно увидеть самые основные данные:

· Есть ли соединение с сервером

· Названия и состояния устройств

· Показания датчиков температуры

· Последняя нажатая кнопка на ПДУ (для проверки)

· Есть ли в помещении движение

· Подробный отчёт о движении в помещении

На второй и третьей вкладке можно настроить пульт ДУ - ассоциировать коды кнопок с названиями кнопок и сделать отдельные режимы для разных приложений (Рисунок 26).

Рисунок 26 - Настройка кнопок ПДУ

2.2.4 Пример использования сторонних приложений

ОС Linux на роутере позволяет устанавливать дополнительные приложения и писать скрипты, чтобы сделать весь комплекс более удобным для пользователя. Рассмотрим это на примере установки утилиты веб-сервера и утилиты «rrdtool».

В качестве веб-сервера был выбран «lighttpd», он не очень требователен к аппаратной части роутера и при этом поддерживает всё, что нам нужно, включая язык PHP.

Серверная часть комплекса при получении пакета с температурой выполняет скрипт «tempstats.sh», передавая ему в параметрах командной строки данные датчиков. Вот содержимое скрипта:

/opt/bin/rrdtool update /opt/home/Cluster/tempstats/temp.rrd -t temp_out:temp_in N:$1:$2

date > /opt/home/Cluster/tempstats/tempnow

echo $1 >> /opt/home/Cluster/tempstats/tempnow

echo $2 >> /opt/home/Cluster/tempstats/tempnow

Первая строка вызывает утилиту «rrdtool», о ней написано чуть ниже. Остальные строки осуществляют запись текущей температуры в текстовый файл, который мы можем открыть внешней программой.

Теперь рассмотрим отрывок из PHP скрипта, который доступен через веб-сервер:

$temp = file('/opt/home/Cluster/tempstats/tempnow');

echo ("Данные по температуре ( за " . $temp[0]. "):<br>");

echo ("Температура на улице: <b>" . $temp[1] . "</b><br>");

echo ("Температура в комнате: <b>" . $temp[2] . "</b><br>");

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

Помимо этого данные о температуре передаются утилите «rrdtool». Эта утилита позволяет генерировать различные графики, исходя из произвольных данных.

Следующий CGI скрипт производит генерацию таких графиков по запросу к веб-серверу:

#!/opt/bin/rrdcgi

<RRD::GRAPH temp1.png --lazy --imgformat PNG --end now

--start end-86000s --width 480 --height 400 DEF:temp_out=/opt/home/Cluster/tempstats/temp.rrd:temp_out:AVERAGE CDEF:zero=temp_out,0,* LINE1:zero#000000 LINE2:temp_out#0000FF:"Outside temperature" DEF:temp_in=/opt/home/Cluster/tempstats/temp.rrd:temp_in:AVERAGE LINE2:temp_in#00FF00:"Inside temperature ололо пыщь пыщь">

<RRD::GRAPH temp2.png --lazy --imgformat PNG --end now

--start end-7d --width 480 --height 400 DEF:temp_out=/opt/home/Cluster/tempstats/temp.rrd:temp_out:AVERAGE CDEF:zero=temp_out,0,* LINE1:zero#000000 LINE2:temp_out#0000FF:"Outside temperature (avg)" DEF:temp_in=/opt/home/Cluster/tempstats/temp.rrd:temp_in:AVERAGE LINE2:temp_in#00FF00:"Inside temperature (avg)">

<RRD::GRAPH temp3.png --lazy --imgformat PNG --end now

--start end-30d --width 480 --height 400 DEF:temp_out=/opt/home/Cluster/tempstats/temp.rrd:temp_out:AVERAGE CDEF:zero=temp_out,0,* LINE1:zero#000000 LINE2:temp_out#0000FF:"Outside temperature (avg)" DEF:temp_in=/opt/home/Cluster/tempstats/temp.rrd:temp_in:AVERAGE LINE2:temp_in#00FF00:"Inside temperature (avg)">

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

Рисунок 27 - Внешний вид графика

3. Оценка экономической эффективности проекта

3.1 Определение затрат на разработку проекта

В данном разделе определяется эффективность реализации первого этапа разработки комплекса.

Основными факторами, влияющими на стоимость разработки, являются:

· затраты на оплату труда разработчиков;

· затраты на детали для устройств;

· количество амортизационных отчислений на срок разработки;

· стоимость машинного времени на срок разработки.
Расходы на помещение рассчитываются по формуле:

Зпом = Кпл * Кчел * Дразр * Сар ,

где Зпом - затраты на помещение, руб.;

Кпл -- площадь, приходящаяся на одного оператора ПЭВМ, м2/чел.;

Кчел -- количество человек, занятых разработкой, чел.;

Дразр -- длительность разработки, лет;

Сар -- амортизация здания, руб/год*м

Затраты на машинное время рассчитываются по формуле:

Змвр = Скомп * Ккомп * Драз ,

где Змвр -- затраты на машинное время, руб.;

Скомп -- стоимость машинного времени, руб./год*шт.

Ккомп -- количество компьютеров, шт.

Затраты на оплату труда разработчиков рассчитываются по формуле:

Зтр = ЗПразр * Дразр * Кчел ,

где Зтр -- затраты на оплату труда разработчиков, руб.;

ЗПразр -- зарплата разработчика, руб./год*чел.

При оценке стоимости разработки используются данные представленные в таблице 18.

Таблица 18 - Данные для оценки стоимости разработки

Количество человек, занятых в разработке

1 чел

Длительность разработки:

1 этап

1/4 года

Стоимость оплаты труда разработчика - (включая выплаты)

20 000 руб/мес.

Стоимость аренды одного квадратного метра помещения

1 000 руб./год

Стоимость машинного времени одного компьютера

4 000 руб./год

Площадь, приходящаяся на одного оператора ПВЭМ

3 м2

Таким образом, стоимость разработки составит:

20000 * 12 * ? * 1 + 3 * ? * 1 * 1000 + 4000 * ? * 1 = 63500

Таким образом, стоимость разработки составляет 63500 рублей.

3.2 Определение затрат на производство

Стоимость производства системы может варьироваться и зависит от следующих факторов:

· используемые компоненты и их цена;

· количество устройств, управление которыми осуществляется;

· количество и тип используемых датчиков;

· платформа, которая будет осуществлять работу ОС «Linux».

В случае использования описанных компонентов общая их стоимость составляет примерно 2000 руб.

В случае использования ротуера ASUS WL-500gP для запуска ОС «Linux» цена платформы составляет 4000 руб.

Стоимость производства макетной платы и сборки составляет около 1000 руб.

Итого: 2000+4000+1000 = 7000 руб.

Стоимость производства комплекса составляет 7000 руб.

4. Безопасность жизнедеятельности

4.1 Санитарно-гигиенические требования при работе с ПЭВМ

В соответствии с СанПиН: 2.2.2.542-96 "Гигиенические требования к ВДТ и ПЭВМ. Организация работы"

Все вредности возникающие при работе ВДТ и ПЭВМ можно разделить на три группы:

· Параметры рабочего места и рабочей зоны

· Визуальные факторы (яркость, контрастность, мерцание изображения, блики)

· Излучения (рентгеновское, электромагнитное излучение ВЧ и СВЧ диапазона, гамма-излучение, электростатические поля)

Внедрение ЭВМ имеет как положительные, так и отрицательные моменты. С одной стороны, это обеспечение более высокой эффективности производства за счет совершенствования технологического процесса и повышение производительности труда, а с другой - увеличение нагрузки на работающих в связи с интенсификацией производственной деятельности и специфическими условиями труда.

Условия труда работающих с ЭВМ характеризуются возможностью воздействия на них следующих производственных факторов: шума, тепловыделений, вредных веществ, статического электричества, ионизирующих и неионизирующих излучений, недостаточной освещенности, параметров технологического оборудования и рабочего места.

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

Для снижения шума и вибрации в помещениях вычислительных центров оборудование, аппараты необходимо устанавливать на специальные фундаменты и амортизирующие прокладки, предусмотренные нормативными документами.

Уровень шума на рабочих местах не должен превышать 50 дБА. Нормируемые уровни шума обеспечиваются путем использования малошумного оборудования, применением звукопоглощающих материалов (специальные перфорированные плиты, панели, минераловатные плиты). Кроме того, необходимо использовать подвесные акустические потолки.

В помещениях с избытком тепла необходимо предусматривать регулирование подачи теплоносителя для соблюдения нормативных параметров микроклимата. Микроклиматические условия на рабочих местах в помещениях с вычислительной техникой должны соответствовать требованиям, указанным в таблице 19.

Таблица 19 - Микроклиматические условия

Период года

Температура воздуха, oС

Скорость движения воздуха, м/с

Относительная влажность воздуха, %

Холодный

22-24

до 0,1

40-60

Теплый

23-25

0,1-0,2

40-60

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

Кондиционирование воздуха должно обеспечивать поддержание параметров микроклимата в необходимых пределах в течение всех сезонов года, очистку воздуха от пыли и вредных веществ, создание необходимого избыточного давления в чистых помещениях для исключения поступления неочищенного воздуха. Температура подаваемого воздуха должна быть не ниже 19oС.

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

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

ПЭВМ являются источниками широкополостных электромагнитных излучений:

· мягкого рентгеновского;

· ультрафиолетового 200-400 нм;

· видимого 400-750 нм;

· ближнего ИК 750-2000 нм;

· радиочастотного диапазона 3кГц;

· электростатических полей.

Экспозиционная мощность дозы рентгеновского излучения в любой точке пространства на расстоянии 5 см от поверхности ПЭВМ не должна превышать 7,74·10-12 А/КГ, что соответствует эквивалентной дозе 0,1 мБэр/ч или 100 мкр/ч, согласно санитарным нормам и правилам работы с источниками рентгеновского излучения. Ультрафиолетовое излучение в диапазоне 200-315 нм не должно превышать 10 мкВт/м2, излучение в диапазоне 315-400 нм и видимом диапазоне 400-750 нм -0,1 Вт/м2, в ближнем ИК-диапазоне - 2000нм - 1мм-4 Вт/м2. Уровни напряженности электростатического поля не должны превышать 15 кВ/м.

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

Наряду с этим нужно устанавливать в помещении с ВДТ ионизаторы воздуха, чаще проветривать помещение и хотя бы один раз в течение рабочей смены очищать экран от пыли.

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

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

Для работы на ЭВМ с ВДТ рекомендуются помещения с односторонним боковым естественным освещением с северной, северо-восточной или северо-западной ориентацией светпроемов. Площадь световых проемов должна составлять 25% площади пола. Удовлетворительное естественное освещение проще создать в небольших помещениях на 5-6 рабочих мест, а больших помещений с числом работающих более 20, лучше избегать. В случае, если экран ПЭВМ обращен к окну, должны быть предусмотрены специальные экранизирующие устройства.

Искусственное освещение в помещениях и на рабочих местах должны создавать хорошую видимость информации на экране ЭВМ. При этом в поле зрения работающих должны быть обеспечены оптимальные соотношения яркости рабочих и окружающих поверхностей. Наиболее оптимальной для работы с экраном является освещенность 200 лк, при работе с экраном в сочетании с работой над документами - 400 лк.

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

Для освещения рабочих мест применяется комбинированное освещение (общее плюс местное), хотя более предпочтительно общее освещение из-за большего перепада яркостей на рабочем месте при использовании светильников местного освещения.

Для общего освещения используются в основном потолочные или встроенные светильники с люминесцентными лампами. Яркость должна быть не более 200 кд/м2. Источники света лучше использовать нейтрально-белого или "теплого" белого цвета с индексом цветопередачи не менее 70. Для исключения засветки экранов прямыми световыми потоками светильники общего освещения располагают сбоку от рабочего места, параллельно линии зрения оператора.

Наиболее подходящими светильниками являются светильники типа ЛПО 36, ЛБ, ЛПО 36 с ВУПРА и другие аналогичные. При использовании светильников с люминесцентными лампами необходимо принимать меры по ограничению пульсации освещенности в пределах до 5 %.

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

Так как при работе на компьютере основная нагрузка ложится на глаза, поэтому большие требования предъявляются к видеотерминальным устройствам (экранам). Предпочтительным является плоский экран, позволяющий избежать наличие на нем ярких пятен за счет отражения световых потоков. Особенно важен цвет экрана. Он должен быть нейтральным. Допустимы ненасыщенные светло-зеленые, желто-зеленые, желто-оранжевые, желто-коричневые тона.

О качестве экранов судят по отсутствию мерцания и постоянству яркости. При прямом контрасте (темные символы на светлом фоне) частота мельканий должна быть не менее 80Гц. Оптимальная высота расположения экрана должна соответствовать направлению взгляда оператора в секторе 5-35o по отношению к горизонтали. Большой наклон экрана может привести к появлению бликов от светильников. При работе с ЭВМ взгляд должен падать на экран под прямым углом и отклоняться от горизонтали на 20o.

Условия зрительного восприятия информации на экране зависят от параметров экрана, плотности их размещения, контраста и соотношения яркостей символов и фона экрана.

Видеотерминальное устройство должно отвечать следующим техническим требованиям:

· яркость свечения экрана - не менее 100 кд/м2;

· минимальный размер светящейся точки - не более 0,4 мм для монохромного дисплея и не более 0,6 мм - для цветного;

· контрастность изображения знака - не менее 0,8;

· частота регистрации изображения при работе с позитивным контрастом в режиме обработки текста - не менее 72 Гц;

· количество точек на строке - не менее 640;

· низкочастотное дрожание изображения в диапазоне 0,05-1,0 Гц должно находиться в пределах 0,1 мм;

· экран должен иметь антибликовое покрытие;

· размер экрана должен быть не менее 31 см по диагонали, а высота символов на экране не менее 3,8 мм, при этом расстояние от газ оператора до экрана должно быть в пределах 40-80 см.

Клавиатура дисплея не должна быть жестко связана с монитором. Она должна располагаться на расстоянии 600-700 мм. В клавиатуре необходимо предусмотреть возможность звуковой обратной связи от включения клавиш с возможностью регулировки. Размер клавиш - в пределах 13-15 мм, сопротивление - 0,25-1,5 Н. Поверхность клавиш должна быть вогнутой, расстояние между ними - не менее 3мм. Наклон клавиатуры должен находиться в пределах 10-15o. Клавиатура располагается на поверхности стола на расстоянии 100-300 мм от края.

Видеомонитор должен быть оборудован поворотной площадкой, позволяющей перемещать ВДТ в горизонтальной и вертикальной плоскостях в пределах 130-220 мм и изменять угол наклона экрана на ¦ 30o во фронтальной плоскости.

При работе с текстовой информацией (в режиме ввода данных, редактирования текста и чтения с экрана ВДТ) наиболее физиологичным является предъявление черных знаков на светлом фоне.

При расстоянии от глаз до экрана - 600-700 мм, высота знака должна быть не менее 3-4 мм, расстояние между знаками - 15-20; от его высоты. Количество точек на строке - не менее 640.

Яркость символов на экране должна согласовываться с яркостью фона экрана и окружающим освещением. Нижней границей уровня яркости светящихся символов считается 30 кд/м2, верхняя определяется значением слепящей яркости. При прямом контрасте яркостный контраст должен составлять 75-80% с возможностью регулировки яркости фона экрана, а при обратном контрасте (светлые символы на темном фоне) - 85-90% с возможностью регулировки яркости фона экрана. Коэффициент контрастности символов на экране при их оптимальных размерах считается благоприятным в пределах 5-10 для обратного контраста и в пределах 8-12 - для прямого.

Для устранения бликов и снижения влияния электромагнитного излучения экраны ВДТ должны быть снабжены защитными фильтрами.

4.2 Требования к оборудованию рабочих мест

Рабочий стол должен регулироваться по высоте в пределах 680-800 мм; при отсутствии такой возможности его высота должна составлять 725 мм. Оптимальные размеры рабочей поверхности столешницы - 1400х1000 мм. Под столешницей рабочего стола должно быть свободное пространство для ног с размером по высоте не менее 600 мм, по ширине - 500 мм, по глубине - 650 мм. На поверхности рабочего стола для документов необходимо предусматривать размещение специальной подставки, расстояние которой от глаз должно быть аналогично расстоянию от глаз до клавиатуры, что позволяет снизить зрительное утомление.

Рабочий стул (кресло) должен быть снабжен подъемно-поворотным устройством, обеспечивающим регуляцию высоты сидений и спинки; его конструкция должна предусматривать также изменение угла наклона спинки. Рабочее кресло должно иметь подлокотники.

Регулировка каждого параметра должна легко осуществляться, быть независимой и иметь надежную фиксацию. Высота поверхности сидения должна регулироваться в пределах 400-500 мм. Ширина и глубина сиденья должна составлять не менее 400 мм.

Высота опорной поверхности спинки должна быть не менее 300 мм, ширина - не менее 380мм. Радиус ее кривизны в горизонтальной плоскости - 400 мм. Угол наклона спинки должен изменяться в пределах 90-110o к плоскости сиденья. Материал покрытия рабочего стула должен обеспечивать возможность легкой очистки от загрязнения. Поверхность сиденья и спинки должна быть полумягкой, с нескользящим, не электризующим и воздухопроницаемым покрытием.

На рабочем месте необходимо предусматривать подставку для ног. Ее длина должна составлять 400 мм ширина - 300 мм. Необходимо предусматривать регулировку высоты в пределах от 0 - 150 мм и угла её наклона в пределах 0 - 200. Она должна иметь рифленое покрытие и бортик высотой 10 мм по нижнему краю.

Режим труда и отдыха при работе с ПЭВМ и ВДТ должен организовываться в зависимости от вида и категории деятельности.

Виды деятельности подразделяются на следующие группы:

· группа А - работа по считыванию информации с ВДТ или ПЭВМ с предварительным запросом;

· группа Б - работа по вводу информации;

· группа В - творческая работа в режиме диалога.

Для видов деятельности устанавливаются три категории (I, II, III) тяжести и напряженности работы с ПЭВМ и ВДТ

Время непрерывной работы для I кат. - 2 часа; для II и III категории 1,5-2 часа. Сумма времени регламентированных перерывов при 8 - часовом рабочем дне составляет для I кат. - 30 мин.; для II кат. - 50 мин.; для III кат. - 70 мин.

Режим труда и отдыха операторов, работающих с ЭВМ, должен быть следующим: через каждый час интенсивной работы необходимо устраивать 15 - минутный перерыв, при менее интенсивной через каждые 2 - часа. Эффективность регламентируемых перерывов повышается при их сочетании с производственной гимнастикой. Производственная гимнастика должна включать комплекс упражнений, направленных на восполнение дефицита двигательной активности, снятие напряжения мышц шеи, спины, снижение утомления зрения. Она проводится в течение 5 - 7 мин. 1 - 2 раза в смену.

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

Заключение

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

В рамках дипломного проекта было проведено:

· исследование и анализ предметной области;

· исследование и анализ электронных компонентов;

· исследование протоколов взаимодействия;

· разработка микропрограммы для микроконтроллера AVR;

· разработка серверного программного обеспечения для ОС «Linux»;

· разработка клиентского программного обеспечения;

· согласование различных элементов комплекса.

В проекте также содержится экономическое обоснование разработки и рекомендации по охране труда с учетом требований эргономики.

Список источников информации

1. Арнольд Роббинс: Linux, программирование в примерах. Москва: издательство «Кудиц-образ», 2006.

2. Пауло Франка: C++, учебный курс. Москва: издательский дом «Питер», 2003.

3. П. Хоровиц, У. Хилл: Искусство схемотехники. Мир, 2006.

4. Юкио Сато: Обработка сигналов, первое знакомство. Додэка, 2002.

5. Официальная техническая документация Atmel, 2007.

6. Б.С. Послед: Borland C++ Builder 6. Разработка приложений баз данных. Москва: ДиаСофтЮП, 2003.

7. Сергей Сабуров: Языки программирования C и C++. Москва: издательский дом «Питер», 2006.

8. Стефан Р. Дэвис: C++ Для чайников. Москва: издательский дом «Питер», 2007.

9. А.П. Побегайло: Системное программирование в Windows. СПб.: «БХВ-Петербург», 2006.

10. А.В. Петюшкин: HTML. Экспресс-курс. СПб.: «БХВ-Петербург», 2003.

11. Алексей Гончаров: Самоучитель HTML. Москва: издательский дом «Питер», 2000.

Приложение А

#include "defines.h"

#define TicsPerSec 3899

#define PC_LCD_TIMEOUT 30

#define NOPC_LCD_TIMEOUT 30

#define NOTICE_TIME 3000

#define TIMER_TIME 60

#define MENU_TIMEOUT 5000

#define ENABLED_DEVICES 0b0011111

#define LIGHT_DEVICES 0b0000111

#define DEVICE_NAME_1 "Левая лампа"

#define DEVICE_NAME_2 "Правая лампа"

#define DEVICE_NAME_3 "Люстра"

#define DEVICE_NAME_4 "Спец. розетка #1"

#define DEVICE_NAME_5 "Спец. розетка #2"

#define MOTION_TIME_UNTIL_REBOOT 600

#define MOTION_TIMEOUT 180

#define MOTION_SSAVER_TIMEOUT 120

#define IGNORERC_TIMEOUT 90

#include <avr/io.h>

#include <avr/interrupt.h>

#include <util/delay.h>

#include <avr/eeprom.h>

#include <avr/pgmspace.h>

#include <avr/wdt.h>

#include <stdlib.h>

#include <string.h>

#include "main.h"

#include "lcd.h"

#include "hd44780.h"

#include "usart.h"

#include "tsopir.h"

#include "ds1820.h"

volatile unsigned short int time_tics = 0;

volatile unsigned short int time_secs = 0;

volatile unsigned short int time_mins = 0;

volatile unsigned short int time_hours = 0;

unsigned short int time_is_set = 0;

unsigned short int time_lastmin = 61;

unsigned short int time_lastsec = 61;

char DS1820_temp1[6];

char DS1820_temp2[6];

unsigned char command_state = 0;

unsigned char command_pluscount = 0;

unsigned char command_num = 0;

unsigned char command_len = 0;

unsigned char command_buf[64];

unsigned char command_complete = 0;

unsigned char PC_lcd[48];

unsigned short int PC_lcd_timeout = 0;

unsigned short int NOPC_lcd_timeout = 0;

unsigned short int Timer_timeout = 0;

unsigned short int IgnoreRC_timeout = 0;

unsigned int Notice_timeout = 0;

unsigned short int Button_Newpress = 0;

unsigned short int Button_NewpressOld = 0xFF;

unsigned long int RC_Button_Newpress = 0;

unsigned long int RC_Buttons[8];

unsigned long int RC_DeviceButtonsOn[5];

unsigned long int RC_DeviceButtonsOff[5];

unsigned int Motion_WorkTime = 0;

unsigned int Motion_NoMotionTime = 0;

unsigned char Motion_Exists = 1;

unsigned int Motion_SSaverTimeout = 0;

unsigned char Motion_Enabled = 1;

unsigned char pacdir;

short int DevicesState = 0;

const short int EnabledDevices = ENABLED_DEVICES;

const short int LightDevices= LIGHT_DEVICES;

char DeviceName1[] PROGMEM = DEVICE_NAME_1;

char DeviceName2[] PROGMEM = DEVICE_NAME_2;

char DeviceName3[] PROGMEM = DEVICE_NAME_3;

char DeviceName4[] PROGMEM = DEVICE_NAME_4;

char DeviceName5[] PROGMEM = DEVICE_NAME_5;

ISR(USART_RXC_vect)

{

unsigned char b;

while (UCSRA & (1<<RXC))

{

b = UDR;

if (b == '+')

{

command_pluscount++;

if (command_pluscount >= 3)

{

command_state = 1;

command_pluscount = 0;

}

} else command_pluscount = 0;

switch (command_state)

{

case 1: command_state = 2; break;

case 2:

command_state = 3;

command_num = b;

command_len = 0;

command_complete = 0;

break;

case 3:

if (command_len < 64)

{

command_buf[command_len] = b;

command_len++;

}

if (

((command_num == 1) && (command_len >= 3 )) ||

(command_num == 2) ||

((command_num == 3) && (command_len >= 48 )) ||

(command_num == 4) ||

((command_num == 5) && (command_len >= 48 )) ||

((command_num == 6) && (command_len >= 2 )) ||

(command_num == 7) ||

(command_num == 8) ||

(command_num == 9)

) command_complete = 1;

break;

}

}

}

ISR(TIMER1_COMPA_vect)

{

TSOP_Check();

time_tics++;

if (time_tics >= TicsPerSec)

{

time_tics = 0;

time_secs++;

}

if (time_secs >= 60)

{

time_secs = 0;

time_mins++;

}

if (time_mins >= 60)

{

time_mins = 0;

time_hours++;

}

if (time_hours >= 24) time_hours = 0;

}

//FILE lcd_str = FDEV_SETUP_STREAM(lcd_putchar, NULL, _FDEV_SETUP_WRITE);

void timer_init()

{

// Устанавливаем прерывания

TIMSK = 1 << OCIE1A;

// Обнуляем таймер

TCNT1=0;

// Максимальное значение для таймера

//OCR1A = 0x1000;

OCR1A = 0x800;

// Параметры таймера - перскалер, режим, верхний лемит...

TCCR1B = (1 << CS10) | (1 << WGM12);

// Включаем прерывания

sei();

}

void CommandToPC(unsigned char commnum)

{

USART_TransmitText("+++");

USART_TransmitByte(commnum);

}

char Text_Loading[] PROGMEM = " Cluster Control v2.1\n Пожалуйста подождите...";

char Text_Version[] PROGMEM = "Cluster Control v2.1";

void SetFont()

{

hd44780_wait_ready();

hd44780_outcmd(HD44780_CGADDR(0x0008));

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outdata(0b00001110);

hd44780_wait_ready();

hd44780_outdata(0b00011111);

hd44780_wait_ready();

hd44780_outdata(0b00011111);

hd44780_wait_ready();

hd44780_outdata(0b00011111);

hd44780_wait_ready();

hd44780_outdata(0b00011111);

hd44780_wait_ready();

hd44780_outdata(0b00001110);

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outcmd(HD44780_CGADDR(0x0010));

hd44780_wait_ready();

hd44780_outdata(0b00000000);

hd44780_wait_ready();

hd44780_outdata(0b00001110);


Подобные документы

  • Роль микроконтроллеров в современных системах управления. Проектирование схемы на основе микроконтроллера Aduc812, которая будет контролировать работу бытовой стиральной машины. Элементная база, описание и функционирование программы, ее листинг.

    курсовая работа [101,3 K], добавлен 23.12.2012

  • Архитектура автоматизированной информационной системы управления складом. Заказ материалов, подсистема учета материалов бытовой техники на цеховом складе. Внемашинное информационное обеспечение. Выбор инструментальной платформы для реализации системы.

    курсовая работа [1,6 M], добавлен 04.12.2014

  • Linux - ядро операционной системы с монолитной архитектурой. Прародители операционной системы Linux, ее стабильные и экспериментальные версии. Процесс внедрения Linux и свободного программного обеспечения в школах и государственных учреждениях России.

    реферат [18,2 K], добавлен 19.01.2013

  • Идея создания системы удаленного управления и контроля устройств. Разработка электрической принципиальной и структурной схемы. Обоснование выбора микроконтроллера и чипа ENC28J60. Обоснование выбора и отладки среды моделирования, программы и компилятора.

    курсовая работа [3,5 M], добавлен 26.08.2014

  • Методические аспекты перехода на СПО в условиях школьного образования. Аналоги Linux-программ при создании школьного комплекта свободного программного обеспечения. Методика использования альтернативной реализации Windows-интерфейса в системе Linux.

    дипломная работа [2,3 M], добавлен 03.05.2012

  • Понятие и сущность операционных систем, особенности их возникновения. История создания операционной системы Linux, ее основные характеристики, сетевые возможности. Анализ бизнес-модели производства и распространения "свободного" программного обеспечения.

    реферат [35,8 K], добавлен 05.04.2010

  • Изучение IT-инфраструктуры компании проката автомобилей. Основные требования к автоматизации движения товаров. Анализ создания конфигурации для оптового склада бытовой техники. Разработка информационно-логической модели автоматизированной системы.

    курсовая работа [1,1 M], добавлен 22.03.2021

  • Разработка приложения, которое осуществляет удаленный доступ управления компьютером с операционной системой Linux с компьютера с ОС Windows. Реализация функциональной части. Графический интерфейс клиента и сервера. Разработка интеграционных тестов.

    курсовая работа [1,1 M], добавлен 28.04.2014

  • Разработка встраиваемого в электронную аппаратуру микроконтроллера с целью обеспечения ввода данных с клавиатуры и отображения результатов обработки на индикации. Описание активного элемента (системная шина ISA). Программное обеспечение микроконтроллера.

    курсовая работа [848,9 K], добавлен 05.02.2016

  • Создание программного продукта, предназначенного для небольшой сети с оптимизацией ее работы на платформе операционной системы Linux; администрирование. Разработка модуля протоколов управления; методика тестирования подсистемы; системотехнический анализ.

    дипломная работа [5,4 M], добавлен 27.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.