Микропроцессоры универсальные

Автор работы: Пользователь скрыл имя, 08 Апреля 2014 в 12:27, курсовая работа

Краткое описание

Различные выполняемые функции и сферы применения обусловили специализацию СБИС. По данному признаку достаточно условно их можно разделить на следующие классы:
СБИС с аппаратной реализацией алгоритмов обработки данных;
микропроцессоры универсальные;
микропроцессоры сигнальные;
микроконтроллеры, включая интерфейсные схемы для образования мультипроцессорных систем;
микросхемы памяти: статические и динамические;
программируемые логические интегральные схемы (ПЛИС).

Содержание

ВВЕДЕНИЕ 2
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 5
1.1.Архитектура МК attiny13 6
1.2.Процессорное ядро МК attiny13 11
1.3.Способы адресации 15
1.4.Энергонезависимая память данных 15
1.5.Порты ввода/вывода 20
2.РАЗРАБОТКА МК УСТРОЙСТВА 22
2.1.Индикатор температуры тела 32
2.2. Принципиальная схема 33
3. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ МКУ 36
3.1.Интегрированная среда программирования 38
3.2.Программа на языке Ассемблера 42
Список используемой литературы 45
ЗАКЛЮЧЕНИЕ 50

Вложенные файлы: 1 файл

КП пояснительная записка.doc

— 1.20 Мб (Скачать файл)

В цифровой порт вывода можно записать два значения: логический "0" (низкий уровень) и логическую "1" (высокий уровень).

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

Config Port(Порт) = Output 
Где "порт" необходимо указать имя порта, например: 
Config PORTB.2 = Output 
Так мы сконфигурируем 7 ножку (PB2) микроконтроллера Attiny13 как порт вывода.

Также мы можем, сконфигурировать целую группу портов A, B или C (и.д.). Обычно в одной группе портов, несколько портов ввода-вывода. Пример конфигурирования группы портов как порты вывода:

Config Port(Группа портов) = Output 
Где "группа портов" необходимо указать букву группы, например: 
Config PORTB = Output 
Так мы сконфигурируем группу портов B как порты вывода.

Теперь, когда порт сконфигурирован как порт вывода, можно записать в него два значения (логический "0" и логическую "1"), например: 

Port(Имя порта) = (Значение) 
Где "Имя порта" необходимо указать имя порта, а где "значение" 1 или 0, например: 
PortB.2 = 1 
В группу портов можно записать значение 1 или 255, например: 
PortB = 255

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. РАЗРАБОТКА МК УСТРОЙСТВА.
    1. Индикатор температуры тела.

 

Устройство предназначено для оперативного контроля температуры тела человека, которое может быть полезно в случаях, когда быстрая оценка температуры важнее знания ее точного значения (ведь не секрет, что в большинстве случаев мы удовлетворяемся значениями «нормальная» или «повышенная», не уточняя конкретные цифры). Изюминкой устройства является то, что оно собрано на крохотном микроконтроллере attiny13 и обладает следующими параметрами:

  • индикация 5 уровней температуры тела - от пониженной до очень высокой при помощи одного RGB-светодиода;
  • питание от 2-х "таблеточных" батареек;
  • в схеме всего 13 элементов, включая 2 батарейки;
  • контроль напряжения питающих батарей;
  • автонастройка на параметры компонентов схемы;
  • полуавтоматическая калибровка датчика температуры;
  • внутренняя точность измерения лучше 0,02°С;
  • нет дорогих или дефицитных компонентов;

 

2.2.Принципиальная схема.

Принципиальная схема индикатора:


 

 

 

 

 

 

 

 

 

 

Основа конструкции - микроконтроллер attiny13. Он должен быть настроен на работу от встроенного RC-генератора 9,6 МГц с включенным делителем на 8 (именно с такими настройками эти контроллеры выпускаются производителем). Если контроллер уже побывал в работе, необходимо запрограммировать в нем следующие fuse-биты: DWEN=1, CKDIV8=0 и CKSEL=10. Для повышенной экономичности (все-таки, батарейная конструкция) желательно заблокировать встроенную систему контроля напряжения питания, т.е. установить fuse-биты BODLEVEL=11. Бит RSTDSBL обязательно должен быть равен 1 (это на случай, если у вас фирменный программатор)! Все прочие fuse-биты принципиальной роли не играют.

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

 Кнопка SB1 - тактовая, любого типа, служит для управления работой  индикатора при калибровке и  для включения режима измерения  при эксплуатации.

 Питание устройства осуществляется  от двух «таблеточных» батареек GB1 и GB2. Конденсатор C1 - электролитический, емкостью от 10 мкФ, напряжением 5 и более вольт, с малым током утечки. Он сглаживает пульсации напряжения при подсевших батарейках и, в принципе, является необязательным компонентом. Выключателя питания у устройства нет, т.к. потребление энергии происходит в основном во время измерении температуры и индикации, т.е. относительно короткое время, а большую часть времени микроконтроллер «спит» и потребляемый ток практически равен току утечки C1.

RGB-светодиод HL1 типа KAA-3528EMBSGC. Этот SMD-вариант может быть заменен на любой другой. В крайнем случае можно использовать 3 отдельных разноцветных светодиода.

 Резистор R1 используется для  контроля напряжения батарей  питания - он входит в состав  делителя напряжения вместе со встроенным в микроконтроллер pull-up резистором, сопротивление которого лежит в пределах 20...50К. На резисторе R1 должно быть примерно от 1/3 до 1/6 напряжения питания, т.е. при

 

свежих батарейках GB1 и GB2 от 0,5 до 1В.

 Резисторы R2...R4 ограничивают ток кристаллов светодиода. На схеме указаны ориентировочные значения сопротивлений этих резисторов, конкретные

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

 Так как суммарное напряжение GB1 и GB2 получается не более 3В, а  прямое падение напряжения на  синем кристалле HL1 вряд ли будет  менее 3,6В (для примененного светодиода KAA-3528EMBSGC оно составляет минимум 4В), напрямую от порта микроконтроллера засветить его не получится - не хватит напряжения. Чтобы обойти эту проблему, использована схема удвоения напряжения на элементах R4C2VD2. Работает эта схема так: когда необходимо зажечь синий кристалл светодиода, микроконтроллер формирует меандр с частотой около 35 кГц на выводе 5. Когда на выводе 5 присутствует высокий уровень (3В), конденсатор С2 заряжается через резистор R4 и последовательно включенный диод VD2, причем правая по схеме обкладка С2 имеет минусовый потенциал. Когда уровень на выводе 5 сменяется на низкий, т.е. соединяется с минусом батареи питания, конденсатор С2 оказывается включенным последовательно с батарейками, диод DV2 запирается обратным напряжением на обкладках С2. Так как С2 был заряжен примерно до 3В, то к синему кристаллу светодиода будет приложено практически 6В - он обязательно засветится.

 В данной схеме параметры  элементов C2, R4 и VD2 играют важную  роль. Чем больше емкость С2, тем  больший ток сможет обеспечить  схема удвоения, однако, тем больший средний ток перезаряда C2 будет протекать по выводу контроллера. Чтобы ограничить его на допустимом уровне, используется R4, одновременно ограничивающий и ток через синий кристалл светодиода. Его сопротивление так же следует рассчитать исходя из требований ограничения тока через порт микроконтроллера на уровне не более 10 мА (максимум - 40 мА), при этом ток через кристалл светодиода так же не должен превышать допустимый, причем при расчете тока через кристалл следует помнить, что среднее напряжение питания его около 6В. При указанном на схеме сопротивлении R4 в

 

100 Ом обеспечивается приемлемая  яркость синего кристалла светодиода KAA-3528EMBSGC и достаточно хорошая  экономичность всей схемы. В качестве VD2 неплохо применить диод Шоттки или германиевый диод, чтобы снизить падения напряжения на нем и тем самым поднять эффективность преобразователя.

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

 Измерение температуры основано на том факте, что прямое падение напряжения на кремниевом диоде линейно зависит от температуры, причем температурный коэффициент практически одинаков для любых типов диодов и составляет около -2 мВ/°С (т.е. с ростом температуры напряжение уменьшается). VD1 смещен в прямом направлении благодаря встроенному в микроконтроллер pull-up резистору. Сопротивление этого резистора, как было сказано ранее, колеблется в технологических пределах 20...50 килоом. Естественно, каждый экземпляр микроконтроллера может иметь свое сопротивление, каждый экземпляр диода при этом будет иметь свое падение напряжения при одинаковой температуре, т.е. для обеспечения высокой точности измерения, что необходимо для медицинских применений, обязательно нужно провести калибровку термодатчика. Этот процесс автоматизирован и выполняется следующим образом.

 Первоначально собранное устройство  не откалибровано, и при первом  включении перейдет в режим  калибровки. Для этого будем использовать тающий лед, который обеспечит нам первую образцовую температуру в 0°С, и кипящий чайник - вторую в 100°С.

  

 

Калибровка начинается с фиксации 0°С. Следует поместить VD1 в тающий лед (конечно, предварительно обернув его полиэтиленом или изолировав от воды как-то иначе), подождать некоторое время, пока VD1 охладится до нулевой температуры (этот процесс желательно контролировать образцовым термометром) и нажать кнопку SB1. HL1 начнет мигать синим: вам отводится 20

секунд, чтобы повторным нажатием SB1 зафиксировать нулевую температуру. Если этого не сделать за 20 секунд - устройство выключится автоматичеки, а при повторном включении снова даст вам 20 секунд для фиксации точки и т.д.

 После фиксации нулевой образцовой  точки, следует поместить VD1 в кипящую  воду и аналогичным образом (только  теперь HL1 будет мигать красным цветом) зафиксировать точку 100°С. Процесс успешной калибровки завершится миганием зеленым цветом.

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

При замкнутом R1 невозможно провести калибровку, поэтому не следует замыкать его на длительное время, достаточно перемкнуть его, непосредственно перед нажатием SB1, а как только HL1 засветится – убрать перемычку и нажать кнопку.

 После успешной калибровки  индикатор готов к использованию  по прямому назначению. Пользоваться  им очень просто: следует нажать  на SB1 и поместить VD1 в подмышечную впадину. В процессе измерения температуры HL1 раз в секунду вспыхивает белым цветом (т.е. все 3 кристалла HL1 включаются одновременно - реально получающийся при этом цвет может отличаться от белого). Это будет продолжаться до тех пор, пока температура датчика не перестанет изменяться - ориентировочно до 60 секунд. После того, как температура измерена, HL1 начнет быстро мерцать, символизируя своим цветом уровень температуры:

СИНИЙ - температура низкая, менее 35,5°С.

ЗЕЛЕНЫЙ - нормальная температура, от 35,6 до 36,9°С.

 

ЖЕЛТЫЙ - слегка повышенная температура, от 37,0 до 37,4°С

МАЛИНОВЫЙ - высокая температура, от 37,5 до 38,2°С

КРАСНЫЙ - очень высокая температура - выше 38,2°С

 Спустя 20 секунд после измерения  устройство автоматически выключается. Можно выключить его раньше нажатием на кнопку. Перед повторным измерением температуры следует подождать, пока VD1 не охладится до температуры явно ниже температуры тела, чтобы случайно не измерить температуру ошибочно.

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

Замечание о точности измерений. В программе реализовано измерение напряжения на VD1 с точностью лучше 0,1 мВ, поэтому погрешностью АЦП и т.п. можно пренебречь, а основная погрешность устройства определяется лишь качеством калибровки. В домашних условиях не всегда есть возможность измерять температуру в широком диапазоне с точностью выше 0,5°С: далеко не у всех имеется спиртовой лабораторный термометр (тем более прошедший поверку). Поэтому точность калибровки устройства целиком основана на «доверии» к двум физическим константам - температурам кристаллизации и кипения воды. Однако известно, что обе эти температуры зависят от количества примесей в воде, а температура кипения дополнительно зависит от высоты местности над уровнем моря. Для средней полосы России этими нюансами можно пренебречь, т.к. отклонение на 2-3 градуса каждой из этих температур даст в

сумме погрешность измерения не более 0,06°, что вполне достаточно для медицинских целей. Но если вы проживаете значительно выше уровня моря - лучше найти способ проконтролировать температуру кипения воды, и если требуется, увеличить ее добавкой поваренной соли.

 

 

 

Макет собранного устройства:


 

 

 

 

 

 

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

  1. Соединить вывод 2 с выводом 4;
  2. Подключить программатор и запрограммировать с обязательным стиранием EEPROM;
  3. Снять питание, впаять контроллер в схему, подключить батарейки;
  4. Должен замерцать сиреневым цветом - дождаться погасания. Если не замерцал - повторить с п.1 (что-то было сделано не так, как написано). В крайнем случае можно наглухо соединить вывод 1 с выводом 4 на все время нахождения микросхемы в программаторе;
  5. Нажать кнопку - HL1 должен замерцать синим, это готовность к калибровке нуля. Далее поступать по ранее указанной методике калибровки;
  6. Если на п.5 не HL1 замерцал синим - замкнуть 2 и 4, нажать кнопку. Пока светится красным - разомкнуть 2 и 4. дождаться погасания и повторить п. 5.

Информация о работе Микропроцессоры универсальные