3.7 Обозначение выводов и их функциональное назначение
Расположение и обозначение выводов ОМК PIC 16С84 полностью совпадает с PIC 16С71 за исключением того, что ножки RA0, RA1, RA2, RA3 в связи отсутствием АЦП представляют собой лишь двунаправленные линии ввода/вывода сигналов с ТТЛ уровнями.
3.8 Организация памяти данных (ОЗУ)
Область ОЗУ организована как 128х8, имеет также 2-е страницы с одинаковыми объемом (128 байт) и практически не отличается от памяти данных PIC 16С71 за исключением того, что на местах регистров ADCON, ADCON1, ADRES и ADRES2 в связи с отсутствием АЦП находятся соответственно регистры управления EEPROM данных-констант EEDATA (08h), EECON1 (88h), EEADR (09h), EECON2 (89h).
Все регистры PIC 16C84 (16F84), также как и во всех других ОМК семейства PIC, разделяются на две функциональные группы: специальные регистры и регистры общего назначения (РОН).
Регистры специального назначения используются для управления функциями микроконтроллера и могут быть разделены на два набора: регистры базовых функций и регистры периферийных устройств. Регистры базовых функций включают в себя регистр-переключатель косвенной адресации (INDF), программный счетчик (РС), представленный двумя регистрами PCL и PCLATH, регистр слова состояния (STATUS), регистр-указатель косвенной адресации (FSR), рабочий регистр (W), регистр прерываний (INTCON), а также регистр режимов работы или конфигурации предварительного делителя и таймера (OPTION). Регистры периферийных устройств включают в себя регистры ввода/вывода (RA-порт А и RB-порт В), регистры данных (EEDATA) и адреса (EEADR) памяти данных-констант, регистр таймера-счетчика (TMPO) и регистры управления конфигурацией портов ввода/вывода (TRISA и TRISB).
К ячейкам ОЗУ можно точно также как и в PIC 16С71 адресоваться прямо или косвенно, через регистр указатель FSR (04h). Это, кстати, относится и к EEPROM памяти данных-констант.
Долговременная память данных-констант EEPROM
Память данных-констант EEPROM позволяет прочитать и записать байт информации. При записи байта автоматически стирается предыдущее значение и записывается новое (стирание перед записью). Все эти операции производит встроенный автомат записи EEPROM. Содержимое ячеек этой памяти сохраняется при выключенном питании.
При считывании данных из памяти EEPROM необходимо записать требуемый адрес в EEADR регистр и затем установить бит RD EECON1<0> в единицу. Данные появятся в следующем командном цикле в регистре EEDATA и могут быть прочитаны. Данные в регистре EEDATA защелкиваются. Пример фрагмента программы считывания данных из памяти данных-констант EEPROM приведена ниже:
Считывание из памяти данных-констант
Bcf STATUS , RP0 ; Установка банка 0.
Movlw CONFIG_ADDR ;
Movwf EEADR ; Адрес чтения.
Bsf STATUS , RP0 ; Установка банка 1.
Bsf EECON1 , RD ; Чтение EEPROM.
Bcf STATUS , RP0 ; Установка банка 0.
Movf EEDATA , W ; Считанные данные W.
При записи в память EEPROM, необходимо сначала записать требуемый адрес в EEADR регистр и данные в EEDATA регистр. Затем выполнить специальную обязательную последовательность команд, производящую непосредственную запись:
Movlw 55h ;
Movwf EECON2 ; Запись 55 h.
Movlw AAh ;
Movwf EECON2 ; Запись AA h.
Bsf EECON1 , WR ; Установка бита WR,
; начало цикла записи.
Во время выполнения этого участка программы, все прерывания должны быть запрещены для точного выполнения временной диаграммы. Время записи - примерно 10мс. Фактическое время записи будет изменяться в зависимости от напряжения, температуры и индивидуальных свойств кристалла. В конце записи бит WR автоматически обнуляется, а флаг завершения записи EEIF, он же запрос на прерывание, устанавливается. Пример фрагмента программы записи в память данных-констант EEPROM приведена ниже:
; Запись в память данных-констант.
Bsf Status , RP0 ; Установка банка 1.
Bcf Intcon , GIE ; Запрет прерываний.
; Обязательая последовательность команд.
Movlw 55h ;
Movwf EECON2 ; Запись 55 h.
Movlw Aah ;
Movwf EECON2 ; Запись AA h.
Bsf EECON1, WR ; Установка бита WR,
; начало цикла записи.
;Bsf Intcon , GIE ; Разрешение прерываний.
Для предотвращения случайных записей в память данных предусмотрен специальный бит WREN в регистре EECON1. Рекомендуется держать бит WREN выключенным, кроме тех случаев, когда нужно обновить память данных. Более того, кодовые сегменты, которые устанавливают бит WREN и те, которые выполняют запись должны храниться на различных адресах, чтобы избежать случайного выполнения их обоих при сбое программы.
4. Разработка алгоритма работы устройства
Алгоритм работы устройства показан на рис. 4. После инициализации регистров микроконтроллера устанавливают пределы в текущих регистрах экстремальных значений. В регистры текущих максимальных температур записывается минимальная измеряемая термодатчиком температура (-55,0°С), а в регистры минимальных температур — максимальная измеряемая температура (+99,9°С). При таких установках любое значение температуры, измеренное первым, будет записано в регистр как максимальных, так и минимальных температур, поскольку оно окажется заведомо больше -55,0° и заведомо меньше +99,9 °. Дальнейшие измеренные значения будут сравниваться с первой записанной температурой и, при необходимости, корректировать значения регистров максимума и минимума. Такие же предельные установки регистров выполняются каждый день в полночь после записи в память значении экстремальных температур прошедшего дня.
Вообще, термодатчик может измерять максимальную температуру до +125°, но, во-первых, таких температур наружного воздуха просто не бывает, а во-вторых, автором были использованы все 96 регистров общего назначения основного банка. Поэтому оказалось разумным остановиться на максимальной измеряемой температуре +99,9°.
По завершении предельных установок выполняется инициализация ЖКИ. При инициализации ЖКИ без опроса освобождения от цикла записи зачастую возникают затруднения с включением индикатора.
Далее выполняется проверка кнопок. Обычно при проверке кнопок при установке режима индикации выполняется загрузка регистров индикации, но в данном случае из-за большого числа регистров индикации устанавливаются только флаги режимов. Если установлен флаг текущего режима индикации, то далее выполняется вывод на индикацию.
Рис. 3. Алгоритм работы термометров с памятью
Если выполнять вывод на индикацию обычным способом, т.е. последовательным заполнением всех знакомест, то потребуется 32 регистра индикации, поэтому вывод на индикацию выполняется построчно. Поскольку при разработке программы был испытан дефицит регистров общего назначения, все текущие и экстремальные значения температур сохраняются в двоичном коде, а перед выводом на индикацию перекодируются в двоично-десятичный код, который сразу записывается в регистры индикации. После вывода на индикацию первой (верхней) строки значения второй строки перекодируются и записываются в те же регистры индикации, а затем — выводятся на индикацию.
Для определения температуры с точностью 0,1 градуса термодатчиком DS18B20 необходимо время 0,75 с, поэтому каждое измерение одним термодатчиком выполняется один раз в две секунды. Измерение первым термодатчиком происходит каждую четную, а вторым — каждую нечетную секунду. На рис. 3 измерение двух температур показано параллельно, хотя в действительности они выполняются последовательно. После каждого измерения температуры происходит проверка кнопок и вывод на индикацию.
После каждого принятого от термодатчика значения температуры выполняется сравнение текущей температуры с температурой, сохраненной в регистрах максимальной и минимальной температуры. Сравнение температур начинается со сравнения знаков измеренного и сохраненного значения. После сравнения знаков, при необходимости, сравниваются значения измеренных и сохраненных величин. Алгоритм сравнения знаков и выполняемые действия в зависимости от результата сравнения можно понять, рассмотрев табл. 1.
Например, при сравнении на максимальное значение, если знаки сохраненного и измеренного значения — положительны, а измеренное значение больше сохраненного, то оно переписывается в регистр максимального значения. При сравнении на минимальное значение и аналогичной разности измеренного и сохраненного значений запись в регистры минимума выполняется, если оба знака — отрицательные. Если при сравнении на максимум сохраненный знак — положительный, а измеренный — отрицательный, то явно измеренное значение температуры будет меньше сохраненного значения, поэтому нет смысла его сохранять. Ситуация с частой сменой знаков измеренной и сохраненной температурами возможна при измерении температуры вблизи нуля.
Таблица 1. Сопоставление результатов сравнения и действий
Сохр. Мах | + | + | - | - |
Измеренное | + | - | + | - |
Действие | И>С =3 | нет записи | запись | и<с = з |
Сохр. Min | + | + | - | - |
Измеренное | + | - | + | - |
Действие | и <с = з | запись | нет записи | И>С =3 |
Знаки сохраненных экстремальных температур сохраняются с помощью флагов регистра, но использовать их для сравнения неудобно. По этой причине для сравнения используются значения знаков для вывода на индикацию (в кодировке ASCII минус 0x30). Так, например, знак "-" обозначен числом 253, а "+" — 251. При таком обозначении легко определить равенство или неравенство знаков и, воспользовавшись табл. 1, выполнить соответствующие действия.
Если термодатчик отключен от микроконтроллера, то на индикаторе высветится температура -00,0, а поскольку такой температуры не существует, то легко определить неисправность термодатчика.
Если при проверке кнопок окажется, что установлен режим просмотра, то вначале анализируется установленная дата. Если установлена текущая (сегодняшняя) дата, то в регистры индикации считываются текущие экстремальные значения, а если установлено прошедшее число, то данные считываются из памяти EEPROM.
При выборке из памяти значения всех 16 регистров считываются в регистры записи/считывания, а выделенный знак записывается в регистры индикации. Регистры записи/считывания являются промежуточными между регистрами текущих и экстремальных значений при записи в регистры индикации.
Для записи и считывания в энергонезависимую память экстремальных значений одного дня требуется 16 регистров. При объеме памяти 128x8 можно сохранить данные за 8 дней (128/16 = 8). Запись для одного термодатчика выполняется в следующей последовательности.
1. Часы максимума.
2. Минуты максимума.
3. Градусы максимума.
4. Десятые доли градусов максимума.
5. Часы минимума.
6. Минуты минимума.
7. Градусы минимума.
8. Десятые доли градусов минимума.
Следующие восемь регистров аналогично заполняются данными для второго термодатчика. Знаки температур дописываются в седьмой разряд регистров градусов. При этом единица соответствует знаку.
Как видно из формата записи, для уменьшения числа регистров записи число и месяц в память не записываются. При нажатии кнопки "Просмотр" на единицу уменьшается число в регистре индикации (а при необходимости — и месяц), и на 16 уменьшается адрес считывания из памяти. Если весь объем памяти просмотрен, то просмотр начинается с адреса вчерашнего дня. Если устройство не выключается, то значения дат просмотра отсчитываются от текущей даты.
При выключении устройства энергонезависимая память сохранит записанные значения без привязки к дате. При отключении питания счетчики записи/считывания обнуляются, и считывание начнется с предыдущего адреса, т. е. 112 (128 -16=112), а дата не будет соответствовать дате записи. Например, если записаны данные одного вчерашнего числа, и выключалось напряжение питания, то эти данные будут считаны как данные недельной давности. Если память еще не заполнена, то на индикатор выводятся все нули (кроме даты, конечно).
В режиме установки считывание из памяти не выполняется. В режимах установки и просмотра на индикатор выводится мигающий курсор. Для того чтобы мигание курсора было хорошо различимо, оно происходит с периодом в две секунды. В первую секунду на индикатор выводятся значения регистров, а во вторую — курсор в выбранном разряде. Если при инициализации ЖКИ разрешить мигание курсора, то вместе с курсором включатся все сегменты выбранного разряда, что не очень удобно при установке.
Как и в текущем режиме, в режимах просмотра и установки перед выводом на индикацию необходимые значения построчно перекодируются в двоично-десятичный код и переписываются в регистры индикации. Запись в регистры экстремальных значений происходит, когда измеренное значение превосходит сохраненное или когда они равны, поэтому, анализируя записанные в память значения, необходимо помнить, что в память записано время последней зафиксированной температуры.
... Мортон Дж. Микроконтроллеры АVR. Вводный курс /Пер. с англ. – М., Додэка –ХХ1, 2006 – 272с. 7. Техническая документация на микроконтроллеры AT89C2051 фирмы «Atmel». ООО «Микро -Чип», Москва, 2002.-184 с. ПРИЛОЖЕНИЕ А Листинг программы и объектный файл ; ЧАСЫ-ТЕРМОМЕТР-ВОЛЬТМЕТР ДЛЯ АВТОМОБИЛЯ. РАЗРАБОТАЛ ДЕРКАЧ ; ПРОГРАММА = ABTO.ASM ; ВЕРСИЯ: 20-01-07. ; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB ...
... Какие специализированные команды необходимо применять для опроса датчика? 2.3 Запуск и выполнение Скомпилированная программа представляет собой файл типа cof, который прошиваем на микроконтроллер ATmega 128 семейства AVR. Соединяем компоненты рабочей модели прибора, получаем сигнал с температурного датчика, считываем температуру окружающей среды. 3. Список используемой литературы ...
... Дж. Микроконтроллеры АVR. Вводный курс /Пер. с англ. – М., Додэка –ХХ1, 2006 – 272с. 7.Техническая документация на микроконтроллеры AT89C2051 фирмы «Atmel». ООО «Микро -Чип», Москва, 2002.-184 с. Приложение А Листинг программы и объектный файл ; ЧАСЫ-ТЕРМОМЕТР-ВОЛЬТМЕТР ДЛЯ АВТОМОБИЛЯ. РАЗРАБОТАЛ ДЕРКАЧ ; ПРОГРАММА = ABTO.ASM ; ВЕРСИЯ: 20-01-07. ; АССЕМБЛЕР И ОТЛАДЧИК: MPLAB IDE, ...
... ;* Термостат на базе микроконтроллера AT90S2313 * ;* с использованием микросхемы термодатчика DS1620 * ;************************************************************************* ;************************************************************************* ;* Название: Цифровой регулятор температуры ;* Дата разработки: 20.06.02 ;* Объект: AVR микроконтроллер AT90S2313 и ...
0 комментариев