Файл: Измерение интенсивности света по дисциплине.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 106

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РФФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТКафедра систем сбора и обработки данныхРасчетно-графическое заданиена тему: «Измерение интенсивности света»по дисциплине: «Микроконтроллеры и микропроцессоры»

Выполнила:

Кошелева Т.Ю.

Проверил:

Баран Е.Д.

Группа: АТ-93




Факультет: АВТ




Новосибирск2022 г.Техническое задание:Измерить интенсивность света с помощью фоторезистора, результат измерения вывести на семисегментный индикатор.Основная часть:Фоторезистор представляет собой преобразователь, чье сопротивление изменяется в зависимости от интенсивности падающего на него света. Фоторезисторы изготавливаются из полупроводников, чтобы обеспечить им зависимые от света свойства. Принцип действия фоторезисторов основан на так называемой "фотопроводимости". В соответствии с данным принципом, с увеличением количества света, падающего на фоторезистор, его сопротивление уменьшается, а при снижении интенсивности падающего света его сопротивление увеличивается. Данные свойства во много обусловлены использованием полупроводниковых материалов для изготовления фоторезисторов. Наиболее часто фоторезисторы применяются для обнаружения наличия света или измерения его интенсивности.Рис. 1. Схема подключения фоторезистора.На выходе получим аналоговый сигнал, который необходимо подать на аналоговый вход микроконтроллера ATMEGA324PB, после чего с помощью АЦП микроконтроллера конвертировать аналоговый сигнал в цифровой.
Будем использовать линию 0 порта A:Рис. 2. Распиновка микроконтроллера.Изучив Datasheet ATMEGA324PB, выяснилось, что в микроконтроллере находится 10-битный аналого-цифровой преобразователь:Рис. 3. Характеристики микроконтроллера.Чтобы получить результат с датчика, в нашем случае с фоторезистора, необходимо настроить АЦП программно. Для этого нужно изучить конфигурацию регистров ADMUX и ADCSRA. Регистр ADMUX:Рис. 4. Описание регистра ADMUX.REFS - биты 6,7 - выбор источника опорного напряжения. Будем использовать внешний источник опорного напряжения.Рис. 5. Конфигурация опорного напряжения в регистре ADMUX. ADLAR - 5 бит - конфигурирует способ записи результата преобразования АЦП в регистр ADC. При установке нуля в бит ADLAR регистра ADMUX старшие 9 и 8 биты результата преобразования будут находиться в старшем байте регистров результата ADCH, младшие 0-7 биты будут записаны в младший байт регистра результата ADCL.Рис. 6. Запись результата преобразования при установке ADLAR = 0.При установке единицы в бит ADLAR регистра ADMUX младшие 0 и 1 биты результата преобразования будут находиться в младшем байте регистров результата ADCL, старшие 2-9 биты будут записаны в старший байт регистра результата ADCH.Рис. 7. Запись результата преобразования при установке ADLAR = 1.Запишем единицу в ADLAR.MUX - биты 0-4 - конфигурация канала, на котором будет осуществляться преобразование АЦП. Будем использовать канал ADC0, поэтому в программе в регистр ADMUX запишем в итоге 01100000.Рис. 8. Конфигурация канала измерения АЦП в регистре ADMUX.Регистр ADCSRA:

Рис. 9. Описание регистра ADCSRA.ADEN - 7 бит - разрешение работы АЦП. Выставляем единицу.ADSC - 6 бит - разрешение замерять. Выставляем единицу.ADATE - 5 бит - многократный режим измерения (running mode). Выставляем нуль.ADIF- 4 бит- флаг ставится, после того как АЦП производит замер, из за флага срабатывает прерывание.ADIE- 3 бит - разрешение прерываний. Выставляем нуль. ADPS - биты 0-2- выбор частоты преобразования. Выставляем 011.Рис. 10. Биты ADPS.В итоге в программе в регистр ADCSRA запишем 11000011.При такой настройке регистров АЦП будет преобразует сигнал с датчика один раз. Чтобы производить конвертацию сигнала в цикле через промежуток времени будем использовать прерывание таймера по переполнению.Будем использовать таймер 1, поскольку он 16-ти битный, то есть максимальное число, которое можно записать в его счетный регистр – 65536, таймер 1 обеспечит большую задержку, чем это может сделать 8-ми битный таймер 0, максимальное число счетного регистра которого – 256. Наибольшая задержка, которую может обеспечить таймер 0 – 256/1000000*1024=0.26 секунд. (1024 –предделитель, устанавливаемый регистром TCCR0B)Используя таймер 1 можно обеспечить значительно большую задержку. Поставим задержку в несколько секунд. Для этого подберем предделитель. 65536/1000000*64=4.19 секунд.Для настройки прерывания по переполнению таймера нужно прописать вектор прерывания, который содержит адрес на первую команду обработчика прерывания. Рис. 11. Вектора прерываний.Нужный вектор: 0x001E.Следующим шагом нужно произвести конфигурацию таймера.Выше уже был подобран преддедитель таймера. Настройка первых битов регистра нам не нужна, поэтому запишем в регистр TCCR1B 00000011, следуя рисунку 13.Рис. 12. Описание регистра TCCR1B.Рис. 13. Таблица предделителей таймера.В счетный регистр запишем 0. Это значит, что счет таймера будет идти от 0 до 65536. Флаг переполнения будет подниматься каждые 65536 «тиков» таймера.
Рис. 14. Счетные регистры таймера.Последний регистр, который необходимо настроить – TIMSK1. Он отвечает за разрешение прерываний таймера. Чтобы разрешить прерывания по переполнению, нужно установить единицу в его бит TOIE1.Рис. 15. Регистр TIMSK1.Итоговая схема подключения:Для вывода значения с АЦП будут использоваться линии 0-3 портов B,C,D.Результат с АЦП будет обрабатываться подпрограммой, вычисляющей разряды результата, затем каждый разряд будет отправлен на порт, с порта подключен к дешифратору КР514ИД2, а дешифратор подключен к семисегментному индикатору.Результаты работы программы:Рис. 17. Показания индикаторов при низкой освещенности.Рис. 18. Показания индикаторов при низкой освещенности.Листинг программы:.CSEG;вектора прерываний.ORG 0x00rjmp RESET ;вектор прерывания вызываемый по сбросу микроконтроллера.ORG 0x1Erjmp TIMER1_OVF ;прерывание таймера T1 по переполнениюRESET:;инициализация вершины стекаldi r16, low(ramend)out SPL, r16;разрешение линий 0-7 порта б на выход для вывода результата преобразовая с ацпldi r16, 255 out DDRB,r16 ldi r16, 0b01100000 sts ADMUX, r16 ;настройка ацпsts TCNT1H,r16 ;настройка таймера для измерения ацпsts TCNT1L,r16 ldi r16, 0x03 sts TCCR1B,r16 ;частота синхронизации Timer1 = Fosc/64; ldi r16,0x01 ; разрешить прерывания по переполнению sts TIMSK1,r16sei ;поднятие флага I для глобального разрешения прерыванийrjmp PCTIMER1_OVF:in r16, SREG push r16 ;сохранение флагов процессора ADC_Conversion:ldi r16, 0b11000011 sts ADCSRA, r16 ;настройка ацпlds r18, ADCH out PORTB, r18 ;выводим результат с ацп на порт бrcall output ;вызов подпрограммы вывода значения с аца на индикаторыpop r16 out SREG, r16 ;восстановление флагов
reti ;конец обработчика прерыванияoutput: ;подпрограмма вычисляет разряды 8-разрядного числаin r16, portb ;сохраняем значение с порта б в регистрDIGITS8:CLR R26CLR R27CLR R28CLR R29CLR R30LDI r17,100DIG8_1:CP r16, r17BRLO DIG8_2SUB r16, r17; сотниINC R26 RJMP DIG8_1DIG8_2: LDI r17,10DIG8_3:CP r16, r17BRLO DIG8_4SUB r16, r17; тысячиINC R27 RJMP DIG8_3DIG8_4:; в Temp1 остались только единицыMOV r18, r16MOV r16, R26 MOV r17, R27Clr r20Out PORTB, r20ldi r20, 0x0F out DDRB, r20 ;линии 0-3 порта b хранят разряд единиц результата преобразованияout PORTB,r16ldi r20, 0x0Fout DDRC, r20 ;линии 0-3 порта c хранят разряд десятков результата преобразованияout PORTC,r17ldi r20, 0x0Fout DDRD, r20 ;линии 0-3 порта d хранят разряд сотен результата преобразованияout PORTD, r18ret ;выход из подпрограммыВывод: В ходе выполнения расчетно-графического задания была разработана схема подключения фоторезистора для измерения освещенности, были настроены регистры АЦП, регистры таймера для использования прерывания по переполнению, чтобы обеспечить запуск преобразования АЦП каждые несколько секунд. Также, была собрана схема для вывода показания с АЦП на семисегментные индикаторы через дешифраторы.