
- •Поехали!
- •Поговори-ка ты со мной..
- •Что то с памятью моей стало память.
- •Пример.
- •Итак, будем удивлять! Для начала необходимо спаять схему управления нагрузкой на 220 вольт.
- •Теперь надо научиться передавать данные через com-порт.
- •Программа для получения текстовых сообщений.
- •Итак. По порядку.
- •Ураа! склад!!!
Итак. По порядку.
Пишем в чип программу (пример для шага 7), не завывая правильно установить фьюзы (биты конфигурации) на работу от внутреннего генератора 8 Мгц БЕЗ делителя частоты.
собираем схему как в шаге 5
в "терминале" посылаем тестовые сторки типа
00 11 FF 7F 80
и тд. и убеждаемся что светодиоды гаснут и загораются как надо.
Создаем описанные выше файлы для посылки данных в порт. запускаем их (терминал должен быть выгружен, иначе он "займет" наш сом-порт) и проверяем как реагирует наша схема.
Собираем схему управления 220 Вольт
Проверяем ее работоспособность подавая напряжение 5V на разъем X1 в соответствии с полярностью. Лампочку желательно подключать не мощнее 60 ватт.
ВНИМАНИЕ! при работе с напряжением более 50 вольт помните золотое правило электрика: работаем ТОЛЬКО ОДНОЙ РУКОЙ !!!!!!!!!!!
Подключаем контакты Х1: №1 к плюсовой шине питания, №2 к выводу микросхемы вместо светодиода.
Проверяем все в сборе и...
...и зовем окружающих попыриться на чудо чудное, диво дивное, лампочку управляемую с компа. Эгей, да так и до терминатора не далеко!!!!
Ураа! склад!!!
Внимание! это учебный материал. и прибор тоже учебный. если нужно не учиться, а просто получить работающий прибор, то вам вот сюда "простой металлоискатель".
Следующее устройство которое мы соберем - будет простой металлоискатель. На примере этой игрушки мы рассмотрим еще одно интересное устройство - компаратор. Он может сравнивать два аналоговых сигнала. Если речь идет о синусоидальном сигнале, то мы можем вычислить период данного сигнала.
Применив компаратор, мы можем сделать не только простейший игрушечный металлоискатель, но и целый ряд полезных устройств (к примеру "без помеховый" регулятор мощности, термостат, сенсорную кнопку, датчик движения, систему АРУ и прочее...) Но не будем отклоняться от темы и соберем простенькую схемку. основное отличие ее от предыдущих схем - это наличие кварцевого резонатора для повышения стабильности измерений. к сожалению для таких ответственных дел, как измерение временного периода внутренний генератор микросхемы слишком нестабилен. я взял кварц на 12 мегагерц. но на самом деле сойдет и любой другой в пределах от 3 до 20 мегагерц. Кроме того в конструкции есть чувствительный элемент - это колебательный контур на элементах L1-C1. Внимание! работа прибора напрямую зависит от добротности этого контура, по этому даже не вздумайте ставить электролитический конденсатор! лучше всего использовать КМ-5 или аналогичные импортные.
Рассмотрим теперь принцип работы "миноискателя". При внесении металла в контур его резонансная частота и добротность изменяются. Если металл черный (железо) то индуктивность контура растет, а соответственно, частота падает. и наоборот, при внесении в контур цветного металла (алюминия, серебра, золота) индуктивность контура падает, а частота растет. То есть перед нами стоит 2 задачи, а именно: возбудить в контуре электромагнитные колебания, и измерить их частоту (период). Как уже говорили выше - с измерением периода синусоидального сигнала отлично справляется компаратор. по этому, не мудрствуя лукаво подключаем выводы компаратора (AIN.1 и AIN.2) к выходам нашего резонансного контура. теперь каждый период будет сопровождаться переключением компаратора. Для возбуждения колебаний достаточно на короткое время подать электрический импульс на контур. (как для того чтобы заставить качели качаться - необходимо просто пнуть их разок). роль такого "пинка" исполняет ток, текущий через конденсатор C2 при изменении логического уровня на выходе PD.4 При включении логического ноля - конденсатор С1 заряжается через конденсатор С2 от источника питания. при включении логической единицы конденсатор С2 оказывается коротко замкнут на контур, и разряжается через С1.
ниже приведена осциллограмма сигналов: вверху - меандр который подается с выхода 8 (PD.4) микросхемы. внизу - сигнал с колебательного контура L1C1
Таким образом для работы металлоискателя достаточно просто подать на С2 - сигнал с 50% скважностью, и считав показания частоты колебаний с контура сравнить их с предыдущими данными измерений. расхождение вывести на дисплей. вот и все.
Конечно это не то что простой, это примитивнейший способ. в более сложном варианте можно было бы по экспоненте затухания сигнала вычислять добротность контура. но... это задача на будующее. сейчас делаем чтобы работало...
в первую очередь - наматываем катушку... никаких изысков, просто наматываем катушку диаметром 100мм, около 50 витков практически любого провода.. желательно не слишком тонкого. эдак 0.25-0.8 мм в диаметре.. резонансный конденсатор можно повесить прямо на катушку. выводы сделать гибким многожильным кабелем. саму катушку хорошенько замотать изолентой. но с другой стороны, если делать компактное устройство - то можно катушку припаять к плате безо всяких там переходных кабелей. тут широкий простор для творчества. лично я собрал схему на макетной плате..
теперь осталось запрограммировать логику работы чипа.
в начале работы программа должна проинициализировать порты и "новое" устройство - компаратор.
далее мы запускаем цикл, который следит за состоянием компаратора. как только оно изменяется - фиксирует этот факт прибавляя 1 к счетчику полупериодов, а число циклов - это как раз длительность прошедшего полупериода.
по прошествии некоторого количества полупериодов необходимо снова "накачать" энергией контур. это делается путем инвертирования уровня на выходе PD.4
далее мы сравниваем длительность импульса с заранее сохраненной (или наоборот - сохраняем ее если нажата кнопка установки ноля) и разницу выводим на "дисплей" в виде шкалы из 5 светодиодов. кроме того - мы выводим на отдельный диод знак разницы, который указывает цветной или не цветной металл поднесен к детектору.
;========================================================== ;Autor: MadMayDay 2008 ;Project: StepByStep ;Name: MetDet-LED ;========================================================== .device ATtiny2313 .include "tn2313def.inc" .def st0=R20 .def st1=R19 .def st2=R21 .def st3=R22 .def st5=R24 .def SlopReg=R16 .def DelayReg=R17 .def ViewReg=R18 .def outReg=R25 .def summRegh=R27 .def summRegl=R26 .def difReg=R28 ;========================================================== Start: rjmp Init; ;------------------------------------------------- ;устанавливаем часть ног микросхемы в состояние "выход", ;и часть в состояние "вход" ;обратить внимание - выводы используемые для компаратора необходимо ;перевести в отключенное состояние - т-е входы без "подтяжки" Init: ldi SlopReg,0b11111100 ; грузим признак выхода out DDRB,SlopReg ; в регистр управления out PortB,SlopReg ; портом "В" ;один вывод надо сконфигурировать как вход ldi SlopReg,0b11101111 ; грузим признак выхода out DDRD,SlopReg ; в регистр упр. портом "D" ldi SlopReg,0b00010000 ; грузим признак "активности" out PortD,SlopReg ; в регистр входа ldi ViewReg,0b11111100 ; формируем начальное состояние и out PortB,ViewReg ; отображаем его на «экране» ;------------------------------------------------- ;устанавливаем самый простой режим работы компаратора ;в этом режиме он просто изменяет значение бита в зависимости от ;напряжения на входах. ldi slopreg,0 out ACSR,slopreg ldi slopreg,03 out DiDr,slopreg ;загружаем константы. ldi ViewReg,0b011100000 ldi SlopReg,0 ldi St2,0 ldi St3,0 ldi outreg,0b00010000 ldi summregl,0 ;------------------------------------------------- ;основной цикл ожидания. nochange: inc st2 ;прибавляем счетчик in St0,ACSR ;проверяем состояние компаратора cp St1,St0 ;если НЕ изменилось breq nochange ;переходим на начало цикла. ;если Изменилось то mov st1,st0 ;запоминаем состояние компаратора ;проверяем сколько было полупериодов cpi slopreg,11 ;если число циклов меньше заданного brne next ;то ничего не предпринимаем ;иначе ldi SlopReg,0 ;обнуляем счетчик полупериодов bst st0,5 ;изменяем состояние "задающего" bld outreg,5 ;выхода на противоположное out portD,outreg ;обеспечивая накачку энергии в контур. ;для измерения берем только периоды когда задающий выход в "нулевом" состоянии. brts donosing; ;если цикл с 1 - ничего не делать. ;если требуется - устанавливаем значение "ноля" in st5,pinD ;проверяем не нажата ли кнопка установки ноля bst st5,4 brts nosetZero ;если нет - ничего не делаем mov summregl,st2; ;если - да, то в "ноль" записываем текущее значение. ldi st3,0 ;и в "фильтр" ноль. nosetzero: ;обрабатываем результаты sub st2,summregl ;получаем модуль разницы в сигнале brpl plus neg st2 clt plus: ;фильтруем полученное значение - убираем случайные выбросы ;простенький фильтр со скользящим средним. add st2,st3 lsr st2 mov st3,st2 ;отображаем на экране из 5 светодиодов. ;каждый светодиод имеет свой порог зажигания ldi ViewReg,0b11111100 cpi st2,2 brlo display lsl Viewreg cpi st2,3 brlo display lsl Viewreg cpi st2,6 brlo display lsl Viewreg cpi st2,11 brlo display lsl Viewreg cpi st2,17 brlo display lsl Viewreg display: ;показываем знак разницы между нолем и сигналом bld Viewreg,7 ;за знак отвечает крайний диод. out portB,Viewreg ;выводим полученное на экран. donosing: ldi St2,0 ;обнуляем счетчик для нового измерения. next: inc slopreg ;дрибавляем счетчик полупериодов ;уходим на следующий цикл rjmp nochange ;и снова здгаствуйте. End: ;========================================================== |
Прошивка и исходный текст металлоискателя лежат здесь.
еще раз хочу напомнить что пока это даже не игрушка, а лишь пример того, что минимальных знаний при умелом их использовании уже хватает для достаточно сложных приложений. так что до "Кощея" нам пока далеко.
ОДНАКО чуток модернезировав схему и программу можно получить уже вполне стабильный и рабочий прибор. Как это сделать показанно в сатье "простой металлоискатель". однако обсуждение этой статьи выходит за рамки учебного курса.
ОБЪЯСНЯЛКИ
ПРОТОКОЛЫ
Протокол – это некоторое соглашение, которое оговаривает, как именно будут общаться несколько объектов (что угодно: программы, микросхемы с датчиками, да и те же люди, если приглядеться – например, протоколы передачи сообщений по азбуке Морзе).
Соответственно, устанавливать эти соглашения можно по-разному. Например, существует сетевая модель OSI – крутая в определённых кругах, однако тут мы её рассматривать не будем) Рассмотрим лучше следующие уровни, где могут формироваться протоколы:
физический: тут определяется среда передачи сигнала. Например, для протокола разговора людей это будет воздух, для электроники - провода.
Тут также учитываются физические характеристики сигнала: для разговора необходим звук с частотой 16 – 20000 Гц, а для передачи сигнала – определённый уровень напряжения в проводах (смена уровня)
информационный уровень – тут устанавливается механизм передачи 1 единицы информации – бита, звука, слова, байта и т. д.
логический уровень - тут происходит передача уже смысла в виде предложений, команд. Именно здесь описываются правила начала и завершения разговора, очередности реплик, сами команды и прочее, а также правила адресации и подчинённости.
Итак, протоколы бывают разными. Выделяют кучу разных группировок, но мы рассмотрим следующие «разбиения» протоколов:
синхронные и асинхронные протоколы
При использовании синхронных протоколов, понятное дело, идет постоянная синхронизация приёмника передатчиком (ˆˆ). То есть передатчик у нас – как бы дирижёр а все приёмники – остальной оркестр. Когда дирижёр скажет играть – то бишь, читать – тогда остальные и начнут действовать.
Реализацией синхронизации может быть согласование таймеров, или, например, может быть выделена отдельная линия для передачи импульсов типа «прочитай сейчас». Вот как это примерно выглядит:
Рис 1. Синхронизация через отдельную линию
Нижняя линия связи – информационная, по ней мы и передаём наши данные, а вот верхняя – «временная», как только на ней уровень сигнала переходит с 0 в 1 – приёмнику можно считывать бит.
В асинхронных же протоколах приёмник считает, что передатчик точно работает с ним на одной и той же частоте. В том же оркестре – это как если бы каждый музыкант ориентировался по своему метроному. И понятно, что если вдруг у нас эти самые частоты не совпадают, то приёмник получает полную лабуду вместо информации >_<
Рис. 2. Передача при асинхронном протоколе
То есть через равные промежутки времени наш приёмник будет считывать единицу информации.
Получается, что в асинхронных протоколах расстояния между тактами могут быть только одинаковыми, а вот в синхронных – совсем не обязательно.
параллельные и последовательные
Последовательные протоколы передают информацию побитно, через одну линию, а параллельные занимают несколько выводов, зато могут передавать, например, байт за раз:
Рис. 3. Параллельное (слева) и последовательное (справа) соединение
дуплексные, полудуплексные и однонаправленные
Дуплексные протоколы (устройства, режимы работы) позволяют одновременно и принимать, и передавать данные – через два канала связи, обычно разделённых физически.
Полудуплексные же используют один канал связи попеременно для передачи и для приёма данных. При этом одновременное использование линии связи для передачи либо невозможно физически, либо –а-та-та! – приводит к так называемой коллизии.
Так, например, разговор по телефону – это дуплексная связь, а по рации – уже полудуплексная.
Ну и особняком стоят однонаправленные, они же симплексные, протоколы – тут, понятно, есть передатчик и приёмники, и ролями они не меняются.