Лекция № 11 (Лекции МП)
Описание файла
Файл "Лекция № 11" внутри архива находится в папке "Лекции МП". Документ из архива "Лекции МП", который расположен в категории "". Всё это находится в предмете "микропроцессоры" из 7 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "микропроцессоры" в общих файлах.
Онлайн просмотр документа "Лекция № 11"
Текст из документа "Лекция № 11"
ЛЕКЦИЯ № 11.
Сопряжение с температурным датчиком ТС74.
Цифровой температурный датчик измеряет температуру от – 40о до +125о С (с точностью 1о). Он управляется по шине I2C. Это не единственный температурный датчик. Есть ещё более известный датчик - DS1820 (управляется по однопроводной шине).
Измерения производятся за счет изменения температуры на p/n – переходе. После усиления сигнал передается на АЦП. Регистр температуры работает только на чтение, а регистр конфигурации - на чтение и запись. Ведущий – всегда микроконтроллер.
Температура хранится в регистре температуры в двоичном коде.
Например:
t = +25o C отображается: 00011001
t = 0o C отображается: 00000000
t = −25o C отображается: 11100111
Пояснение:
1.) младший разряд соответствует 1o (разрешающая способность 1o).
2.) отображение t = - 25o C получается путем инверсии отображения t = + 25o C с прибавлением 1.
В регистре конфигураций задействовано только 2 старших разряда:
1.) Разряд D7:
если D7 = 1 – то ждущий режим.
если D7 = 0 – то нормальный режим.
В ждущем режиме: АЦП не работает; измерения температуры не происходят; ток потребления (Iпотр.) равен5мкА.
В нормальном режиме: измерения температуры производятся автоматически (8 раз/сек);
Iпотр. ≥ 200 мкА.
2.) Разряд D6, который отображает состояние:
если D6 = 1 – то измерение готово.
если D6 = 0 – то измерение не готово (нужно ждать).
Для температурного датчика необходимы 4 подпрограммы:
Прежде всего, нужно знать адреса самого температурного датчика:
Адрес ТС74
1001 000 R/W
1001 001 R/W
……………….
1001 101 R/W – адрес по умолчанию
Примечание:
Последний бит (R/W) указывает направление передачи.
Допускается 8 датчиков.
Все остальные нужно заказывать у компании Microchip.
Будем считать, что программа инициализации ТС74 – отдельный файл в курсовом проектировании.
Помимо этого, уже имеются подпрограммы:
INIT_I2C
START_I2C
STOP_I2C
INIT_LCD
TRANS_I2C
1.) Подпрограмма инициализации: INIT_ТС74.
После подключения - не знаем в каком состоянии находится (в ждущем или в нормальном режиме). Поэтому в 7 разряд регистра конфигураций записывается 1.
2.) Подпрограмма считывания содержимого регистра конфигураций: READ_CONFIG.
Проверяем 6 разряд регистра конфигураций: если D6 = 1, то измерение готово, а если D6 = 0, то измерение не готово, следовательно, повтор считывания.
3.) Подпрограмма считывания температуры из регистра температуры: READ_TEM.
4.) Подпрограмма перевода обратно в ждущий режим: WAIT.
Содержимое регистра температуры было сохранено в определенном регистре, и теперь его необходимо перевести с учетом знака (знак определяется 7 разрядом SSPBUF). Для этого выводим сначала знак температуры, а потом переводим в АSCII-код. При отрицательной температуре необходимо дополнительно произвести операцию, которую назовем конверсией: CONVER.
Структурная схема подпрограммы № 1:
Структурная схема подпрограммы № 2:
Пояснение:
Процесс чтения: записывается адрес устройства, записывается адрес регистра, RESTART (либо STOP и START), затем снова повторяется адрес устройства, но уже на единицу больше (при считывании он всегда нечетный). Необходимо получить разрешение на считывание и проверить, когда оно сбросится в ноль. Ответ организовываем высоким уровнем. После чтения в буферном регистре шины I2C будет считанное значение. Нас интересует 6 разряд: если там 1, то измерение готово и можно считывать температуру, а если там 0, то измерение не готово и нужно повторить чтение.
Структурная схема подпрограммы № 3:
Безэлектрический звукогенератор («пищалка»).
Предварительно рассмотрим несколько таймеров.
В PIC - контроллерах среднего уровня обычно 4 таймера/счетчика:
-
сторожевой таймер (Watch Dog);
-
таймер/счетчик TMR0;
-
таймер/счетчик TMR1;
-
таймер/счетчик TMR2.
Таймер/счетчик TMR0:
TMR0 - таймер/счетчик, имеет следующие особенности:
-
8-разрядный таймер/счетчик;
-
возможность чтения и записи текущего значения счетчика;
-
8-разрядный программируемый предделитель;
-
внутренний или внешний источник тактового сигнала;
-
выбор активного фронта внешнего тактового сигнала;
-
прерывания при переполнении (переход от FFh к 00h).
Биты управления TMR0: T0CS, T0SE, PSA, PS2, PS1, PS0 расположены в регистре OPTION_REG:
7 6 5 4 3 2 1 0
-RBPU(1) | INTEDG | T0CS | T0SE | PSA | PS2 | PS1 | PS0 |
-RBPU(1) - Включение подтягивающих резисторов на входах PORTB.
1 = подтягивающие резисторы отключены.
0 = подтягивающие резисторы включены.
INTEDG - Выбор активного фронта сигнала на входе внешнего прерывания INT.
1 = прерывания по переднему фронту сигнала.
0 = прерывания по заднему фронту сигнала.
T0CS - Выбор тактового сигнала для TMR0.
1 = внешний тактовый сигнал с вывода T0CKI.
0 = внутренний тактовый сигнал CLKOUT (FT/4).
T0SE - Выбор фронта приращения TMR0 при внешнем тактовом сигнале.
1 = приращение по заднему фронту сигнала (с высокого к низкому уровню) на
выводе T0CKI.
0 = приращение по переднему фронту сигнала (с низкого к высокому уровню)
на выводе T0CKI.
PSA - Выбор включения предделителя.
1 = предделитель включен перед WDT.
0 = предделитель включен перед TMR0.
PS2: PS0 - Установка коэффициента деления предделителя:
Значение | Для TMR0 | Для WDT |
000 | 1:2 | 1:1 |
001 | 1:4 | 1:2 |
010 | 1:8 | 1:4 |
011 | 1:16 | 1:8 |
100 | 1:32 | 1:16 |
101 | 1:64 | 1:32 |
110 | 1:128 | 1:64 |
111 | 1:256 | 1:128 |
Режим таймера выбирается путем сбрасывания в ноль бита T0CS регистра OPTION_REG <5>. В режиме таймера TMR0 инкрементируется каждый командный цикл (без предделителя). После записи информации в TMR0 инкрементирование его начнется после двух командных циклов. Это происходит со всеми командами, которые производят запись или чтение-модификацию-запись TMR0 (например, MOVF TMR0, CLRF TMR0). Избежать этого можно при помощи записи в TMR0 скорректированного значения. Если TMR0 нужно проверить на равенство нулю без останова счета, следует использовать инструкцию MOVF TMR0,W.
Режим счетчика выбирается путем установки в единицу бита T0CS регистра OPTION_REG <5>. В этом режиме регистр TMR0 будет инкрементироваться либо нарастающим, либо спадающим фронтом на выводе RA4/T0CKI от внешних событий. Направление фронта определяется управляющим битом T0SE в регистре OPTION_REG <4>. При T0SE = 0 будет выбран нарастающий фронт, когда передний фронт сигнала является активным.
Предделитель может использоваться или совместно с TMR0, или со сторожевым таймером (Watch dog). Вариант подключения делителя контролируется битом PSA регистра OPTION_REG <3>. При PSA=0 делитель будет подсоединен к TMR0. Содержимое делителя программе недоступно. Коэффициент деления предделителя программируется битами PS2…PS0 регистра OPTION_REG <2:0>.
Прерывание по TMR0 вырабатывается тогда, когда происходит переполнение счетчика при переходе от FFh к 00h. Тогда устанавливается бит запроса T0IF в регистре INTCON<2>. Данное прерывание можно замаскировать битом T0IE в регистре INTCON<5>. Бит запроса T0IF должен быть сброшен программно при обработке прерывания. Прерывание по TMR0 не может вывести процессор из режима SLEEP, потому что таймер в этом режиме не функционирует.
При PSA=1 делитель будет подсоединен к сторожевому таймеру как постделитель (делитель на выходе). При использовании предделителя совместно с TMR0, все команды, изменяющие содержимое TMR0, обнуляют предделитель. Если предделитель используется совместно с WDT, команда CLRWDT обнуляет содержимое предделителя вместе с WDT.
Таймер/счетчик TMR1:
TMR1 - 16-разрядный таймер/счетчик, состоящий из двух 8-разрядных регистров (TMR1H и TMR1L), доступных для чтения и записи. Счет выполняется в спаренном регистре TMR1 (TMR1H:TMR1L), инкрементируя его значение от 0000h до FFFFh, далее считает с 0000h. При переполнении счетчика устанавливается в 1 флаг прерывания TMR1IF в регистре PIR1<0>. Само прерывание можно разрешить/запретить установкой/сбросом бита TMR1IE в регистре PIE1<0>.
TMR1 может работать в одном из трех режимах:
-
режим таймера;
-
режим синхронного счетчика;
-
режим асинхронного счетчика.
Включение модуля TMR1 осуществляется установкой бита TMR1ON в '1' (T1CON<0>).
Битом TMR1CS (T1CON<1>) выбирается источник тактовых импульсов. В режиме таймера TMR1 инкрементируется на каждом машинном цикле. Если TMR1 работает с внешним источником тактового сигнала, то приращение происходит по каждому переднему фронту сигнала.
TMR1 имеет внутренний вход сброса от модуля CCP. Когда включен генератор тактовых импульсов (T1OSCEN=1), выводы T1OSI и T1OSO настроены как входы. Значение битов TRISC<1:0> игнорируется, а чтение данных с этих выводов дает результат '0'.
Управляющие биты TMR1 находятся в регистре T1CON:
7 6 5 4 3 2 1 0
- | - | T1CKPS1 | T1CKPS0 | T1OSCEN | -T1SYNC | TMR1CS | TMR1ON |
T1CKPS1-T1CKPS0 - Выбор коэффициента деления предделителя TMR1.
11 = 1:8
10 = 1:4