|
AVR (ATmega8)
|
PIC (16F628)
|
MK-51 (AT89C52)
|
ПЗУ(память
программ)
|
8 Кб
|
2 Кб
|
8 Кб
|
Таймеры/счетчики
|
2(8 разрядов) 1(16 разрядов)
|
1(8 разрядов)
|
3(16 разрядов)
|
Число
портов ввода/вывода
|
23
|
13
|
32
|
Питание
|
4,5-5,5
|
3,0-5,5
|
4,0-5,5
|
Архитектура
|
RISC
|
RISC
|
CISC
|
Тактовая
частота
|
16МГц
|
10МГц
|
24МГц
|
Память
данных
|
128 байт
|
68 байт
|
256 байт
|
Стоимость
|
400 руб.
|
75 руб.
|
60 руб.
|
МК ATmega8 имеет следующие отличительные
особенности:
- 8ми-разрядный высокопроизводительный
AVR микроконтроллер с малым потреблением RISC архитектура;
- 130 высокопроизводительных команд,
большинство команд выполняется за один тактовый цикл;
- 32 8ми-разрядных рабочих регистра
общего назначения;
- полностью статическая работа;
- приближающаяся к 16 MIPS (при
тактовой частоте 16 МГц) производительность;
- энергонезависимая память программ и
данных;
- 8 Кбайт
внутрисистемно
программируемой
Flash памяти
(In-System Self-Programmable Flash);
- обеспечен режим одновременного
чтения/записи 512 байт EEPROM;
- 1 Кбайт встроенной SRAM.
Встроенная периферия:
- два 8-разрядных таймера/счетчика с
отдельным предварительным делителем, один с режимом сравнения;
- один 16-разрядный таймер/счетчик с
отдельным предварительным делителем и режимами захвата и сравнения;
- счетчик реального времени с отдельным
генератором;
- 6-канальный аналого-цифровой
преобразователь (в корпусе PDIP);
- 4 канала с 10-разрядной точностью;
- 2 канала с 8-разрядной точностью;
- байт-ориентированный 2-проводный
последовательный интерфейс;
- программируемый последовательный
USART;
- последовательный интерфейс SPI
(ведущий/ведомый);
- программируемый сторожевой таймер с
отдельным встроенным генератором;
- встроенный аналоговый компаратор;
- специальные микроконтроллерные
функции;
- встроенный калиброванный
RC-генератор;
- внутренние и внешние источники
прерываний;
- выводы I/O и корпуса;
- 23 программируемые линии
ввода/вывода;
- 28-выводной корпус PDIP, 32-выводной
корпус TQFP и 32-выводной корпус MLF;
- рабочие напряжения - 2,7 - 5,5 В
(ATmega8L) 4,5 - 5,5 В (ATmega8);
- рабочая частота - 0 - 8 МГц
(ATmega8L) 0 - 16 МГц (ATmega8).
Как видно из приведенных технических
характеристик контроллер имеет высокую производительность достаточную
программную память и необходимые АЦП и порты. Имеется среда разработки на С.
Недостаток отсутствие функций умножения и деления требуют написания специальных
подпрограмм необходимых для перевода получаемых значений в цифровой вид и
разделения значащих разрядов на сотни единицы и десятки.
Рис. 1.1. Расположение выводов AVR.
Далее рассмотрим следующую серию МК PIC16F628
она имеет следующие основные особенности:
- RISC архитектуру и всего 35 простых
для изучения инструкции;
- Все инструкции исполняются за один
такт (400 нс);
- Скорость работы: тактовая частота до
10 МГц;
- Память программ 2K FLASH;
- Память данных ОЗУ (байт) 68;
- 15 аппаратных регистров специального
назначения;
- четыре источника прерывания;
- внешний вход RB0/INT;
- переполнение таймера TMR0;
- прерывание при изменении сигналов на
линии порта B (PORTB<7:4>);
- по завершению записи данных в ЭСППЗУ
(EEPROM);
- 8-разрядный таймер/счетчик;
- 8-разрядный программируемый
предварительный делитель;
- 1000 циклов записи/стирания FLASH
памяти программы.
Периферия:
- 13 линий ввода/вывода с индивидуальным
контролем направления;
- сильноточные схемы (до 25мА) для
управления светодиодами.
Особенности микроконтроллера:
- программирование на плате через
последовательный порт (ICSPT)
- таймер включения питания (PWRT) и
таймер запуска генератора (OST)
- сброс по падению напряжения питания
- сторожевой таймер (WDT) с
собственным встроенным RC-генератором для повышения надежности работы
- широкий рабочий диапазон напряжений
питания - от 2,0В до 6,0В
- низкое потребление энергии:
- < 2 мА при 5,0 В, 4,0 МГц
Рис. 1.2. Расположение выводов PIC.
Данный контроллер к сожалению не имеет
встроенного АЦП и не имеет команд деления и умножения в остальном он
удовлетворяет нашей задаче.
Последним для рассмотрения был выбран МК 51
серии - AT89C52. Этот контроллер имеет встроенный АЦП и по предварительной
оценке по параметрам полностью подходит для выполнения поставленной задачи.
Рис. 1.3. Контактная группа выводов AT89C52.
Отличительные особенности:
- совместимость с серией MCS-51 SISC
архитектура;
- 8 кБ флэш-памяти с внутрисхемным
программированием (ISP) со стойкостью ПЗУ программ: 1000 циклов
записи/стирания;
- рабочий диапазон питания 4.0…5.5В;
- полностью статическое
функционирование: 0…24 МГц;
- внутреннее ОЗУ размером 256x8;
- 32 программируемые линии
ввода-вывода;
- три 16-разрядных таймера-счетчика;
- восемь источников прерываний;
- полнодуплексный канал
последовательной связи на УАПП.
Достоинство данного контроллера не только в
большом числе периферии, но и наличии команд умножения и деления, что
значительно упрощает программу и позволяет реализовать её с меньшими временными
затратами. Также данная архитектура изучена хорошо в курсе лабораторных работ,
что позволяет упростить разработку, так как часть программного кода уже
написана и отлажена. Также контроллер имеет невысокую цену 60р. Что важно для
практической реализации управляющего устройства.
Учитывая все вышесказанное окончательно было
решено использовать контроллер 51 серии как наиболее доступный и подходящий по
параметрам.
.2 Выбор электронных элементов
Транзисторная оптопара АОТ101АС
Для обеспечения опторазвязки с ключевыми элементами
используются транзисторная оптопара АОТ101АС.
Оптопары АОТ101 АС/БС, транзисторные,
двухканальные, состоящие из эпитаксиальных излучающих диодов на основе
соединения галлий-алюминий-мышьяк и кремниевых фототранзисторов. Применяются
для электронной коммутации однополярного тока с гальванической развязкой между
входом и выходом. Выпускаются в пластмассовом корпусе. Масса прибора не более 3
грамм.
Электрические параметры
· Входное напряжение при Iвх = 15 мА,
не более - 1,7 В
типовое значение - 1,3 В
· Входное напряжение при Iвх = 5 мА,
не более - 1,6 В
типовое значение - 1,2 В
Выходное остаточное напряжение при Iвх = 2,5 мА,
Iвых = 0,5 мА,
не более - 0,4 В
типовое значение - 0,2 В
· Выходное остаточное напряжение при
Iвх = 10 мА, Iвых = 1,5 мА для АОТ101АС, Iвых = 10 мА для АОТ101БС, не более 0,4
В
· Ток утечки на выходе при Iвх = 0,
Uком = 10 В,
не более - 10 мкА
типовое значение - 1 мкА
· Сопротивление изоляции при Uиз = 500
В,
не менее - 1011 Ом
типовое значение - 1012 Ом
· Время нарастания и спада выходного
сигнала при Uком = 10 В, Iвх = 10 мА, Rн = 100 Ом,
не более - 10 мкс
типовое значение - 3мкс
Предельные эксплуатационные данные
Коммутируемое напряжение 15 В
Обратное входное напряжение 1,5 В
Напряжение изоляции при T = +25 ±10 °C 1,5 кВ
Входной ток1 при T = -10...+50 °C 20 мА
Выходной ток2 при Iвх макс
АОТ101АС - 5 мА
АОТ101БС - 10 мА
Входной импульсный ток при tи <= 10мкс 50
мА
Температура окружающей среды -10...+70 °C
Датчик температуры DS18B20
Выбирая датчик температуры, я проанализировал
существующие аналоговые и цифровые датчики я пришёл к выводу, что использование
аналогового датчика требует дополнительных элементов: усилителя и АЦП, что
заметно усложняет схему, поэтому я предпочёл цифровой вариант, в виде чипа DS18B20.
Для выполнения моего курсового задания необходима точность +/-1, а эти датчики
сертифицированы как измерительные приборы и обеспечивают точность до 0.1.
Соответственно, возможно их использование в качестве надёжного средства
измерения. При этом не требуется АЦП, так как выполнение операции
преобразования полученных данных в цифровой вид ими обеспечивается
самостоятельно. Второй важный момент, то что данный датчик может быть подключен
по однопроводной сигнальной линии и передает данные по протоколу 1-Wire.
Благодаря обеспечению возможности адресного обращения возможно использование
одной линии связи для всех датчиков.
Датчик DS18B20
имеет следующие отличительные особенности:
1. Точность ±0.5°C от -10°C до +85°C,
. Разрешение от 9 до 12 бит, которое
настраивается пользователем,
. Передача данных посредством
1-проводного последовательного интерфейса,
. 64-битный уникальный и неизменяемый
серийный номер,
. Многоточечное считывание,
. Рабочее напряжение от 3.0В до 5.5В,
. Вариант датчика с запиткой с линии
данных (DS18B20-PAR),
. O-92, 150mil 8-контактный SOIC, или
1.98x1.37мм корпус с шариковыми выводами (±2.0°C).
Данные в микросхеме DS18B20 считываются через
1-проводную последовательную шину в дополнительном от 9 до 12 битном
(программируется пользователем) коде с ценой младшего разряда от 0.5°C до
0.0625°C. Она является термометром с цифровым вводом/выводом, работающим с
точностью ±0.5°C.
У каждой микросхемы DS18B20 имеется уникальный и
неизменяемый 64-битный серийный номер, используемый как узловой адрес датчика.
При этом появляется возможность сосуществовать множеству микросхем DS18B20 на
одной 1-проводной шине. Микросхема DS18B20 может быть локально запитана от 3.0В
до 5.5В или она может быть сконфигурирована таким образом, чтобы быть
запитанной посредством 1-проводной линии данных.
Осуществление передачи команды начала
преобразования и других команд, а также считывания значения измеренной
температуры производится с помощью 1-проводного интерфейса (1-WireTM).
Обмен с датчиком всегда начинается с процесса
инициализации. Инициализация производится в следующей последовательности:
.Формируется импульс сброса не менее 480мкс
.Далее линия отпускается и через некоторое время
не более 60мкс она закорачивается самим датчиком это как сигнал готовности к
обмену.
.Далее следует выполнить передачу команды и
адреса конкретного датчика установленного на шине.
Рис. 2.1. Временная диаграмма инициализации.
После того, как мастер обнаружил ответ, он может
передать датчику одну из команд. Передача ведётся путём формирования мастером
специальных временных интервалов (time slots). Каждый временной интервал служит
для передачи одного бита. Первым передаётся младший бит. Интервал начинается
импульсом низкого уровня, длительность которого лежит в пределах 1 - 15 мкс.
Поскольку переход из единицы в ноль менее чувствителен к ёмкости шины (он
формируется открытым транзистором, в то время как переход из ноля в единицу
формируется подтягивающим резистором), именно этот переход используют
1-проводные устройства для синхронизации с мастером. В подчиненном устройстве
запускается схема временной задержки, которая определяет момент считывания
данных. Номинальное значение задержки равно 30 мкс, однако, оно может
колебаться в пределах 15 - 60 мкс. За импульсом низкого уровня следует
передаваемый бит. Он должен удерживаться мастером на шине в течение 60 - 120
мкс от начала интервала. Временной интервал завершается переводом шины в
состояние высокого уровня на время не менее 1 мкс. Длительность интервала
зависит от собственной емкости линии определяемой длиной. Так как в моем
устройстве датчики находятся на большом расстоянии от контроллера, то
рекомендуется не мене 15мкс.
Рис 2.2. Временная диаграмма передачи 0го бита.
Рис. 2.3. Пример передачи 1 бита.
Первой командой, которую должен передать мастер
для DS18S20 после инициализации, является одна из команд реализуемых
устройством функций.
При приеме данных от подчиненного устройства
временные интервалы для принимаемых битов тоже формирует мастер. Интервал
начинается импульсом низкого уровня длительностью 15 мкс. Затем контроллер
отпускает шину и если через 30мкс он считывает 0, то этот бит удерживает
термометр, иначе считывается 1. Таким способом, последовательно тактируя каждый
бит, контроллер считывает все требуемые ему данные. Прием байта начинается с
младшего бита.
Рассмотрим особенности протокола обмена. Вначале
после проведения процедуры инициализации передается команда на выполнение определенных
функций. Так как на линии подключено 4 термометра, то можно выполнить запуск
измерения температуры сразу для всех термометров и чтобы исключить обмен
номерами передаем команду пропустить передачу номера 0xCC.
Далее посылаем команду Convert T - 0х44. Это сразу в четырех микросхемах
термометров запускает измерение и преобразование в цифровой вид температуры.
Далее необходимо сформировать задержку от 500 до 750мкс (зависит от конкретного
типа микросхемы, поэтому выбираем наибольший интервал). Далее процедура сброса
повторяется и теперь для выборки измеренной температуры необходимо передать
команду 0xCD после чего
передается номер конкретного термометра, а далее посылаем команду Read
Scratchpad - BEh. Первый байт содержит знак, если температура «+», то он
заполнен нулями, если «-», то единицами. Если температура отрицательна, то
значение температуры передается в инверсном дополнительном коде, что требует
преобразования температуры.
Для DS18S20 температура представляется в виде
9-битного значения в дополнительном коде. Поскольку это значение занимает 2
байта, все разряды старшего байта равны знаковому разряду. Дискретность
представления температуры составляет 0.5°C.
Зависимость выходного кода от температуры
Температура
|
Выходной код (Binary)
|
Выходной код (Hex)
|
|
Ст. байт
|
Мл. байт
|
|
+125°C
|
0000 0000
|
1111 1010
|
00FAh
|
+25°C
|
0000 0000
|
0011 0010
|
0032h
|
+0.5°C
|
0000 0000
|
0000 0001
|
0001h
|
0°C
|
0000 0000
|
0000 0000
|
0000h
|
-0.5°C
|
1111 1111
|
1111 1111
|
FFFFh
|
-25°C
|
1111 1111
|
1100 1110
|
FFCEh
|
-55°C
|
|
1111 1111
|
1001 0010
|
FF92h
|
|
|
|
|
|
Знакосинтезирующий LCD
Рис. 3. Условное графическое обозначение ЖКИ.
Для вывода информации используется
знакосинтезирующий LCD индикатор размером 32х4. Для управления им используется
две дополнительные шины.
RS - выбор
команды;
E - стробирующая
запись данных в индикатор;
GND- потенциал
общего провода ("земли");
E- линия
стробирования/синхронизации;
RS- линия
выбора регистра;
RW- линия
выбора операции;
CS- Chip
Select;
DB(0-7)- линия
данных.
АЦП DS 2450
Для преобразования аналоговых сигналов в
цифровую форму решено использовать 4-канальный 16-разрядный аналого-цифровой
преобразователь последовательного приближения для линии MicroLAN DS 2450 фирмы
Dallas Semiconductor.
Он может сопрягаться с широким множеством
датчиков и приборов, оцифровывать сигнал и передавать его на устройства сбора и
обработки данных по простой однопроводной сети 1-Wire. Встроенный уникальный
серийный номер позволяет объединить множество DS2450 с помощью однопроводной
сети 1-Wire и получить доступ к конкретному датчику в пределах сети.
Особенности:
· четырехканальный АЦП на одном
последовательном порту;
· питание через вход Vcc или
паразитное через линию передачи данных;
· 8-битная точность, 16-битная
разрешающая способность;
· два диапазона входных измерений:
0В-2.56В и 0В-5.12В;
· напряжение питания от 4.5B до 5.5В;
рабочий диапазон температур от -40°С до +85°С;
· неиспользуемые аналоговые каналы
могут быть сконфигурированы для работы в качестве ключа с открытым коллектором;
· время преобразования - 80 мкс/бит (в
худшем случае). Пример: 3 канала, разрешение 9 бит = 3х9х80мкс+160мкс
инициализация=2.32мс=140 выборок по каждому каналу в секунду;
· уникальный серийный номер (ID)
позволяет однозначно определить конкретный датчик в качестве источника
измерений;
· возможность объединения нескольких
устройств по однопроводной сети 1-Wire;
· передача данных по дешевому кабелю
типа “витая пара”.
Рис. 4. Назначение выводов
АЦП DS 2450S выпускается в компактном, дешевом
8-выводном корпусе SOIC для поверхностного монтажа. Он представляет собой
преобразователь аналогового сигнала в цифровой, работающий в режиме
последовательного приближения с аналоговым мультиплексором 4 в 1. Каждый канал
имеет собственный регистр, в котором устанавливается и хранится диапазон
входного напряжения, разрешающая способность и значение сигнальных порогов,
используемых для установки сигнальных флажков. Если входное напряжение выходит
за указанный диапазон, флажки разрешают участие прибора в «условном поиске». На
каждый канал устанавливается по два сигнальных флажка, которые без требования к
ведущему шины просто указывают, было ли измеренное напряжение выше или ниже
установленных порогов. Каждое преобразование АЦП инициализируется ведущим шины.
Канал, не используемый как аналоговый вход, может служить цифровым выходом с
открытым стоком. После отключения входа ведущий шины может непосредственно
включать или выключать МОП-транзистор в выбранном канале. Все параметры
настройки прибора хранятся в статическом ОЗУ и сохраняются до тех пор, пока
прибор получает питание.
После включения флажка «сброс питания» ведущему
шины сообщается о необходимости восстановить параметры настройки прибора для
продолжения нормальной работы. Все регистры прибора организованы в три
восьмибайтовые страницы памяти. Генератор кода контрольной суммы CRC 16,
входящий в состав микросхемы, осуществляет защиту передаваемой информации от
ошибок передачи.
Питание прибора осуществляется через вывод Vcc
или через однопроводную шину. При питании прибора от однопроводной шины в
течение времени, пока сигнал на линии имеет высокий логический уровень, на
внутреннем конденсаторе накапливается заряд. Далее, когда уровень сигнала на
шине близок к нулевому, прибор питается от этого «паразитного» конденсатора,
после чего, при появлении на шине сигнала высокого уровня, конденсатор снова
подзаряжается. Энергии «паразитного» источника хватает только для обмена
информацией с ведущим шины. Для выполнения аналого-цифрового преобразования
требуется непрерывный его подзаряд от однопроводной шины, которая все время
должна находиться в единичном состоянии, а если это невозможно, то необходимо
прямое подключение источника Vcc к соответствующему выводу микросхемы.
GSM-модуль
SIM300
Трехдиапазонные GSM/GPRS модули SIM300
предназначены для работы в приложениях, связанных с высокоскоростной передачей
данных посредством GPRS канала: для передачи голоса, коротких (SMS) и
факсимильных сообщений в системах удаленного контроля и мониторинга, в
измерительных системах и телеметрии, системах безопасности и оповещения. Данные
модули имеют низкое энергопотребление и малые размеры, благодаря чему могут
быть легко интегрированы в большинство вышеупомянутых приложений.
В качестве обвязки для модуля необходим
системный разъём (60 pin connector) и антенный переходник GSC/FME или GSC/SMA
(в зависимости от разъёма, установленного на подключаемой антенне).
Основные характеристики GSM модуля Sim 300:
- компактные размеры 40x33x2.85мм;
- GPRS класс 10;
- интегрированный TCP/IP стек;
- диапазоны частот 900/1800/1900 МГц;
- совместимость со стандартом GSM
Phase 2/2+;
- выходная мощность 2 Вт/900 МГц, 1
Вт/1800/1900 МГц;
- напряжение питания 3,4…4,5В;
- диапазон температур: рабочая -
20…+55С, температура хранения - 40…+80С;
- вес 8 г.
Интерфейс GSM модуля Sim 300:
- внешний интерфейс SIM - карт 3V
1.8V;
- разъем 60 pin;
- 2 аналоговых аудио интерфейса;
- интерфейс клавиатуры;
- интерфейс LCD дисплея.
Данные I/О:
- 8xI/O UART.
SMS особенности:
- текст и PDU;
- передача point - to - point.
TCP/IP:
- UDP протокол;
- доступ к встроенному TCP/IP стеку с
помощью АТ команд.
Другие особенности GSM модуля Sim 300:
- поддержка телефонной книги SIM
карточки;
- наличие встроенного таймера
реального времени;
- управление аудио;
- звонки на фиксированные номера;
- сетевая регистрация.
Команды SIM300
для работы с SMS-сообщениями
3.
Описание используемых интерфейсов
Интерфейс 1-Wire
Протокол 1-WIRE определяет структуру сообщений,
которая используется и распознаётся устройствами, подключёнными к
однопроводному интерфейсу.
Обмен сообщениями по 1 WIRE начинается с
инициализирующей последовательности, состоящей из импульса сброса, передаваемой
ведущим и ответным импульсом присутствия. Появление импульса присутствия
является признаком наличия в линии одного или нескольких ведомых устройств.
Команды для работы с датчиками:
CCh -
пропустить передачу кода, работать безадресно;
44h
- запустить преобразования;
h - выбор датчика
для работы по заданному адресу;
B8h
- считать измеренное значение.
Вначале посылается безадресное обращение CCh
для работы со всеми датчиками, что позволяет следующую команду 44h
(запуск преобразований) применить ко всем устройствам, находящимся на шине. В
частности для температурных датчиков и АЦП. Цикл преобразований у АЦП длится
300 мкс, для термометров - 750 мкс.
4.
Разработка программы управления
4.1 Общий алгоритм работы
Сначала производится инициализация всех
параметров. По умолчанию тактирование происходит раз в одну секунду.
Затем контроллер переходит в режим
автоматического опроса и выполняет сканирование матричного поля датчиков с
выводом информации в ОЗУ и одновременно формируется первая часть SMS-сообщения.
Следующим этапом выполняется оцифровка температуры и съём показателей по аналоговым
каналам.
Далее формируется и передаётся SMS-сообщение.
Параллельно с этим производится отображение информации на ЖКИ. В случае нажатия
первой клавиши «-» уменьшается частота опроса, при нажатии второй клавиши «+»
частота увеличивается кратно одной секунде.
Нажатие обоих клавиш позволяет задать время в
часах, следующее нажатие - в минутах, следующее - в секундах. И последнее
нажатие переводит систему в режим нормальной работы - опроса датчиков и
пересылки информации через SMS-сообщение.
1
|
0
|
:
|
2
|
5
|
:
|
3
|
3
|
|
|
0
|
0
|
-
|
6
|
4
|
|
|
P
|
e
|
r
|
i
|
o
|
d
|
-
|
0
|
1
|
0
|
|
|
|
|
|
T
|
1
|
=
|
+
|
1
|
1
|
4
|
|
T
|
2
|
=
|
-
|
0
|
8
|
0
|
|
T
|
3
|
=
|
+
|
0
|
8
|
4
|
|
T
|
4
|
=
|
-
|
0
|
5
|
0
|
|
A
|
D
|
C
|
1
|
-
|
6
|
5
|
5
|
3
|
6
|
|
|
A
|
D
|
C
|
2
|
-
|
0
|
0
|
0
|
0
|
0
|
|
|
|
|
|
|
|
|
|
|
A
|
D
|
C
|
3
|
-
|
0
|
0
|
0
|
0
|
0
|
|
|
A
|
D
|
C
|
4
|
-
|
0
|
0
|
0
|
0
|
0
|
|
|
|
|
|
|
|
|
|
|
4.2 Описание
работы программы
В начале программы идёт объявление
необходимых переменных, массивов, флагов, привязка к портам. Затем идёт
процедура для задержки на 5мкс. Следующими идут процедуры сброса, чтения и
записи 1-Wire. После идёт процедура UART, в которой отрабатывается отправка и
получение SMS-сообщений с использованием GSM-модуля SIM300. Затем идёт
процедура обработки таймера, в которой просчитывается текущее время.
В главной процедуре MAIN сначала
идёт инициализация параметров: задание режимов таймера, установка периода
опроса, разрешение прерываний, задание начального адреса ОЗУ.
После инициализации начинаем
преобразования, сохраняем в ОЗУ время и затем начинаем опрашивать матрицу
датчиков. На линию регистров посылаем 0, выбираем поочерёдно строки и проверяем
столбцы. Если в строке и в столбце появляется 0, мы распознаём это как
сработавший датчик и сохраняем в ОЗУ его расчетный номер. Затем мы командой 55h
выбираем датчик для работы и командой B8h считываем измеренные данные. Так мы
опрашиваем 4 температурных датчика и АЦП. Выводим полученные данные на LCD. И
последним в программе идёт обработка клавиш.
Заключение
Поставленная задача была реализована,
разработана функциональная схема. После анализа функциональной схемы,
рассмотрения множества разработок и отдельных электронных узлов, была
разработана схема контроллера, обеспечивающего реализацию комплекса сбора
информации, который реализует поставленную задачу на аппаратном уровне. При
схемотехнической реализации блока был произведен выбор наиболее оптимального
контроллера для решения задачи.
Вторым этапом реализации проекта стало написание
программной части, которая обеспечивает управление оборудованием по заданному
алгоритму. Для реализации функций обмена с температурными датчиками был изучен протокол
1-Wire, который и был
далее реализован в виде части программного кода. Также было выполнено описание
программы и представлен её код.
Результат проекта представлен в виде отчета
имеющего два приложения: листинг программы и принципиальная схема.
Приложения
Приложение (Схема устройства)
Приложение (Листинг программы)
#include<reg52.h>
#include<stdlib.h>xdata
ram[65635]; /* xdata massiv dannih v OZU*/int adresram;int pert,period;
char
sec,min,chas; //shethiki vremeni
char
poz,nkey,pd; //otobragaem segmentint interruptcnt;
char iw,
command, step;iware=P3^2;lin=P3^3;rs=P3^4e=P3^5;k1=P1^6;k2=P1^7;fok; /* flag
ispolnen sobitia*/
char
lcd1[]={0,0,0x3a,0,0,0x3a,0,0,0x20,0x20,0x2d,0x36,0x34,0x20,0x20,0x50,
0x65,0x72,0x69,0x6f,0x64,0x2d,0,0,0};char lcd2[]={0x54,0x31,0x3d,0,0,0,0,0x20,0x54,0x32,0x3d,0,0,0,0,0x20,0x54,0x33,
0x3d,0,0,0,0,0x20,0x54,0x34,0x3d,0,0,0,0};char
lcd3[]={0x41,0x44,0x43,0x31,0x2d,0,0,0,0,0,0x20,0x20,0x41,0x44,0x43,
0x32,0x2d,0,0,0,0,0};char lcd4[]={0x41,0x44,0x43,0x33,0x2d,0,0,0,0,0,0x20,0x20,0x41,0x44,0x43,
0x34,0x2d,0,0,0,0,0};char dat0[]={0x23,0x34,0xdf,0xde};char
dat[]={0,0,0,0,0,0,0,0,0,0,0,0};char const lcdini[]={0x08,0x3c,0x06,0x0f, 0x01}
/*inicializacia LCD*/char const nt1[]={0xDD ,0x05 ,0xEC ,0xAD ,0x35 ,0xb9
,0x4f, 0xed };char const nt2[]={0xDD ,0x05 ,0x35 ,0xb9 ,0xa3 ,0xfd ,0xbd ,0x02
};char const nt3[]={0xDD ,0x05 ,0x67 ,0xe4 ,0x32 ,0xde ,0xae ,0x34 };char const
nt4[]={0xDD ,0x05 ,0xEC ,0xb9 ,0x56 ,0x0D, 0x23 ,0x94 };char const nadc[]={0x0f
,0x00 ,0x68 ,0x35 ,0xb9 ,0xF9, 0xBD ,0x24 };
delay (void
char t) { unsigned char dd; for (dd=0;dd<t;dd++)} //+++timeuot na 5*t
mksiwreset (void) //-------------- reset
{
=0;=1;(iware) //start proc
{ iware=0;
delay(100); //timeout 500mks=1;delay(14); //timeout 70
mks(!iware) { delay(100); //500mks(iware) {fok=1;} } } readiw (void) //--------------read
IWare
{ unsigned
char pp,nn;=0; for(nn=0;nn<8;nn++)
{ iware=0;
delay (3); //start obmena bit=1; delay(6); //+30mks dla
chtenia=iware;pp=pp>1;(14);iware=1;(3);} iw=pp;} //save
rezultatwriteiw (void char pp1) //----------write IWare
{unsigned
char pp,nn;=pp1; (nn=0;nn<8;nn++)
{ iware=0;
delay (3);=pp>1; iware=CY;(20);iware=1;(3); }}uart (void) interrupt 5 using
2/*obmen s SIM300*/
{if (RI)
{if(SBUF==0xff){P3^7=1;
(i=0;i<2000;i++) delay(200);P3^7=0; }//vse sovpalo na 2 sek open
door(SBUF==0){sec=0; min=0;chas=0;}}(TI)
{TI=0; if
(++step<18) SBUF=dat0[step];
}
}
timer0
(void) interrupt 1 using 2 /*Function interrupt timer0*/
{ =0xfc;
/*set timer0=64614 1000perrepolnen v sek*/=0x66;
(++pert==1000){pert=0;if
(++sec==60){sec=0;if(++min==60){min=0;if(++chas==24){chas=0;}}}}c=1;(pert==30)
{
lcd1[0]=chas/10+0x30; lcd1[1]=chas%10+0x30;[3]=min/10+0x30; lcd1[4]=min%10+0x30;[6]=sec/10+0x30;
lcd1[7]=sec%10+0x30; }
} /*end
Function interrupt timer0*/
main (void)
{
/*Ini
parametr*/=0; /*priority = 0*/=0x21; /*1 regim*/=1; /*start timet0*/=0x50; //obmen
8bit takt for timer1=0xFD;=0; /*time 1s*/
=1;=1;
/*enable interrupt timer0*/=1; /*enable interrupt*/
=0;(1)
{;(fok){writeiw(0xCC);writeiw(0x44);}
/*start preobrazovanii*/[++adresram]=chas;[++adresram]=min;[++adresram]=sec;
/*read pole
datchikow*/=0;iware=1; /*reset DD6*/(j=0;j<16;j++)
{=1;P1=0xfe;rs=0;rs=1;(i=0;i<8;i++)
{if
!(lin)pd=pd|(~P1);P1=P1<<1;rs=0;rs=0; }[++adresram]=pd;=1;P1=0xfe;e=0;e=1;(i=0;i<8;i++)
{if
!(lin)pd=pd|(~P1);P1=P1<<1;e=0;e=0; }[++adresram]=pd;=0; iware=1;
}(pert<750);
/*end preobrazovania*/(j=0;j<4;j++)
{
resetiw;(fok){writeiw(0x55);} /*start preobrazovanii*/
(i=0;i<8;i++)
{
write(nt1[i+j*8]);} /*send nomer dathika*/(0xB8); /*komand
read
data*/();(iw==0xff){readiw();dat[j]=0x80|((~iw)+1);}{readiw();dat[j]=iw;}[++adresram]=dat[j];
};
(ox55);(i=0;i<8;i++)
{
write(nadc[i]);} /*send nomer dathika*/(0xB8); /*komand
read data*/(i=0;i<8;i++)
{readiw();dat[++j]=iw;[++adresram]=iw;
}
/*send SMS
data*/=0;=dat0[0];
}
}(i=0;i<8;i++)
{
write(nt1[i+j*8]);} /*send nomer dathika*/(0xB8); /*komand
//vyvod na
displey znachenii
acp[5]=dat[5]*256+dat[4]/10000+0x30;[6]=dat[5]*256+dat[4]%10000/1000+0x30;[7]=dat[5]*256+dat[4]%10000%1000/100+0x30;[8]=dat[5]*256+dat[4]%10000%1000%100/10+0x30;[9]=dat[5]*256+dat[4]%10000%1000%100%10+0x30;
[17]=dat[7]*256+dat[6]/10000+0x30;[18]=dat[7]*256+dat[6]%10000/1000+0x30;[19]=dat[7]*256+dat[6]%10000%1000/100+0x30;[20]=dat[7]*256+dat[6]%10000%1000%100/10+0x30;[21]=dat[7]*256+dat[6]%10000%1000%100%10+0x30;
[5]=dat[9]*256+dat[8]/10000+0x30;[6]=dat[9]*256+dat[8]%10000/1000+0x30;[7]=dat[9]*256+dat[8]%10000%1000/100+0x30;[8]=dat[9]*256+dat[8]%10000%1000%100/10+0x30;[9]=dat[9]*256+dat[8]%10000%1000%100%10+0x30;
[17]=dat[11]*256+dat[12]/10000+0x30;[18]=dat[11]*256+dat[12]%10000/1000+0x30;[19]=dat[11]*256+dat[12]%10000%1000/100+0x30;[20]=dat[11]*256+dat[12]%10000%1000%100/10+0x30;[21]=dat[11]*256+dat[12]%10000%1000%100%10+0x30;
(!k1)&&(k2)&&(regedit==0)
{
period++;[22]=period/100+0x30;[23]=period%100/10+0x30;[24]=period%100%10+0x30;
};(k1)&&(!k2)&®edit==0)
{
period--;[22]=period/100+0x30;[23]=period%100/10+0x30;[24]=period%100%10+0x30;};
(!k1)&&(!k2)
{regedit++;(regedit=4)
regedit=0;(!k1)&&(k2)&&(regedit==1)
{chas++;(chas=24)
chas=0;[0]=chas/10+0x30; [1]=chas%10+0x30;
}(k1)&&(!k2)&&(regedit==1)
{chas--;(chas=0)
chas=23;[0]=chas/10+0x30; [1]=chas%10+0x30;
}(!k1)&&(k2)&&(regedit==2)
{min++;(min=60)
min=0;[3]=min/10+0x30; [4]=min%10+0x30;}(k1)&&(!k2)&&(regedit==2)
{min--;(min=0)
min=59;[3]=min/10+0x30; [4]=min%10+0x30;}(!k1)&&(k2)&&(regedit==3)
{sec++;(sec=60)
sec=0;[6]=sec/10+0x30;
[7]=sec%10+0x30;}(!k1)&&(k2)&&(regedit==3)
{sec--;(sec=0)
sec=59;[6]=sec/10+0x30;