Академический Документы
Профессиональный Документы
Культура Документы
Определение
первоочередных задач и их решение.
1
аппаратно-программный "запас", который, в перспективе, позволяет наращивать
функциональность устройства.
Но для начала, нужно определиться с "проматеринской" функциональностью.
То есть, с тем, вокруг чего, в дальнейшем, будут происходить все "песни и пляски".
3
назначения, задействованые в процедуре сохранения/восстановления, "прописаны" в 0-м
банке.
Можно "прописать" их и в 1-м банке, но толку от этого - ноль ("от перестановки мест
слагаемых, сумма не меняется").
Просто "глюк переместится" в другой банк.
Но это решаемо.
Самое главное - понять "корень зла", а уж его "выкорчевывание" - дело техники (см.
ниже).
Теперь о ЖК-модуле.
На форуме, был разговор о ЖК-модулях компании МЭЛТ.
Приобрел (MT-16S2D-2YLG, версия 7). Посмотрел. Понравилось.
Особенно - увеличенный размер символов (не матрица 5х7, а матрица 5х8 точек) и
наличие "страсть как русифицированной" (душа радуется), дополнительной страницы
знакогенератора (2 страницы: 0-я и 1-я. Речь идет о 1-й).
Удобно, так как, на 1-й странице, имеется весь русский алфавит.
И не "рваный", а привычный.
Короче, по этому поводу, дружески "жму руку МЭЛТу".
Но для обеспечения совместимости программы с другими, "забугорными" типами ЖК-
модулей, использовать буду 0-ю страницу.
Единственный "пупырь" - сложности с инициализацией.
Сужу по форуму. Да и сам прочувствовал.
Лично мне, совсем не интересно "ваять" то, что преподносится в даташите.
Какое-то это "рогатое" и некрасивое.
Душа этому совсем не радуется. Поэтому и не нравится.
Лично мне, очень интересно "заинициализироваться", с задействованием флага BF.
Это соответствует понятию "хулиган", максимально возможной скорости отработки
процедуры инициализации ЖК-модуля, а значит и наивысшему ее качеству/надежности.
И это не утопия.
Докладываю: флаг BF "срабатывает" на завершающем этапе исполнения любой
инструкции.
И к процедуре инициализации это тоже относится.
Нужно только выяснить специфику. А она имеется (см. ниже).
Теперь об общей стратегии.
Все познается в сравнении.
Поэтому, по "наводке" Альберто, я просмотрел журналы "Радио" №1 за 2005 г. и №7
за 2007 г.
Речь идет о статьях Н. Заеца, в которых описывается устройство защиты с функцией
измерения, аналогичное той "базе", которую я хочу "сваять".
Стратегический просчет автора заключается в том, что его программа организована
таким образом, что между "пачками" циклов измерений, имеются "мертвые зоны" аж по
1000 мкс. каждая (по версии автора), в которых защита просто не работает (во время
вывода данных на индикацию).
Это очень много.
По моему замыслу, в режиме слежения, подобного рода "мертвых зон" не будет, так
как в течение всего времени отработки полного цикла программы, прерывания по
переполнению TMR2 будут разрешены.
В том числе и при отработке процедуры вывода данных на индикацию, и даже при
отработке процедуры инициализации ЖК-модуля (прерывания разрешаются в ПП
START, а далее, в идеале, не запрещаются.).
Если это обеспечить, то максимальное время срабатывания защиты (по напряжению и
по току) будет строго постоянным (без "мертвых зон" типа "вышележащих" 1000 мкс.), и
оно будет равно интервалу времени между двумя соседними уходами в прерывание.
Пока, я задал 250 мкс., но далее, это значение будет уменьшено.
Н. Заец использовал 7-сегментные индикаторы.
Их информативные возможности гораздо ниже средних, и оперативной памяти они
совсем не имеют (не говорю уж о двух строках по 16 символов).
Получилось конечно дешево, но зато "геморройно".
В том смысле, что "по скудоумию" (не Н. Заеца, а 7-сегментных индикаторов), на
индикацию выводятся какие-то "кракозябры", к которым нужно привыкать.
4
ЖК-модуль, это совсем иное качество отображения информации и информативность.
А его оперативная память, это вообще "счастье" для программ, в которых
используются периодические уходы в прерывания.
Имея такую "красатульку", с учетом объема памяти программ PIC16F873A, грешно не
думать о значительном наращивании функциональности.
Короче, речь идет о серьезной "машине". И первыми ее ценителями будете Вы.
Только просьба иметь терпение.
Итак, в результате всех этих "словоблудий", вдруг, откуда не возьмись, возник
следующий список первоочередных задач, которые нужно безотлагательно
решить/воплотить в жизнь:
Это и есть достаточно четкий план дальнейшей работы, который нужно реализовать.
По пунктам (порядок в мыслях и анархия не совместимы).
Реализую.
;********************************************************************************
; НАЧАЛО ИСПОЛНЕНИЯ ПРОГРАММЫ.
;********************************************************************************
; Подготовительные операции.
;================================================================================
START .......................
.......................
Работа в 0-м банке
;////////////////////////////////////////////////////////////////////////////////
ДАЛЕЕ, ПРЕРЫВАНИЯ НЕ ЗАПРЕЩАЮТСЯ
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; ПОДПРОГРАММА ПРЕРЫВАНИЯ. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
; Процедура сохранения содержимого регистров Status и W.
;================================================================================
; Определение банка, из которого осуществлен уход в прерывание.
;--------------------------------------------------------------------------------
btfsc Status,RP0 ; Из какого банка осуществлен уход
; в прерывание ?
goto BANK_1 ; Если это 1-й банк.
; Если это 0-й банк, то программа
6
; исполняется далее.
;--------------------------------------------------------------------------------
; Процедура сохранения Status и W в регистрах 0-го банка (Stat_Temp, W_Temp).
;--------------------------------------------------------------------------------
movwf W_Temp ; W -> W_Temp.
swapf Status,W ; Смена п/байтов регистра Status.
; Результат -> W.
movwf Stat_Temp ; W -> Stat_Temp.
bcf Flag,7 ; Установка флага признака банка
; (Flag,7=0: 0-й банк).
; Используется при восстановлении.
goto ZAMER ; Переход на начало АЦП.
;--------------------------------------------------------------------------------
; Процедура сохранения Status и W в регистрах 1-го банка (Stat_Temp1, W_Temp1).
;--------------------------------------------------------------------------------
BANK_1 movwf W_Temp1 ; W -> W_Temp1.
swapf Status,W ; Смена п/байтов регистра Status.
; Результат -> W.
movwf Stat_Temp1 ; W -> Stat_Temp1.
bcf Status,RP0 ; Сброс 0-го банка.
bsf Flag,7 ; Установка флага признака банка
; (Flag,7=1: 1-й банк).
; Используется при восстановлении.
;================================================================================
..............................
.............................. ОСНОВНЫЕ ДЕЛА
..............................
..............................
;================================================================================
; Процедура восстановления содержимого регистров Status, W и выхода из прерывания
;================================================================================
btfss Flag,7 ; Каково состояние флага признака банка ?
goto VOSST_0 ; Если 0-й банк (Flag,7=0), то работа
; с Stat_Temp и W_Temp.
; Если 1-й банк (Flag,7=1), то работа
; с Stat_Temp1 и W_Temp1.
;--------------------------------------------------------------------------------
; Процедура восстановления Status и W из содержимого регистров 1-го банка
; (Stat_Temp1, W_Temp1).
;--------------------------------------------------------------------------------
bcf PIR1,TMR2IF ; Сброс флага прерывания по переполнению TMR2.
7
В начале ПП прерывания, определяется, из какого банка (0-го или 1-го) произошел
уход в прерывание (btfsc Status,RP0).
В зависимости от этого, отрабатывается:
- либо процедура сохранения содержимого регистров Status и W в регистрах
0-го банка,
- либо процедура сохранения содержимого регистров Status и W в регистрах
1-го банка.
В конце этих процедур, флаг признака банка (бит №7 регистра Flag) либо опускается
(признак 0-го банка), либо поднимается (признак 1-го банка).
Это необходимо для того, чтобы в последующем, при восстановлении содержимого
регистров W и Status, программа "сообразила" (см. btfss Flag,7), из какой именно пары
регистров нужно произвести это восстановление.
И процедура сохранения, и процедура восстановления - "штатные".
Только они "клонированные" (хочешь жить - умей вертеться. Народная мудрость).
Вот и вся "прерывательная" специфика для PIC16F873A.
Если этого не сделать, то будет "хенде хох" и "Гитлер капут" вместе взятые, так как
восстановится не то, что нужно, а форменное безобразие.
Проверено жизнью. Через "пинки". Короче, аксиома.
А кто не внял, тому будет "фингал". Однозначно.
Эти пары регистров можно "прописать" как угодно, лишь бы эти пары были
"прописаны" в соответствующих банках.
Примечание: если речь идет хотя бы о более-менее сложной программе, в которой
используются прерывания, то регистры W и Status это святое.
Их содержимое, в ПП прерывания, обязательно нужно сохранить/восстановить.
Следующим по значимости, является регистр PCLATH.
Сохранение/восстановление его содержимого актуально, например, тогда, когда имеются
таблицы вычисляемых переходов, через которые проходит "граница" между блоками
памяти программ или тогда, когда объем программы вышел за "границу" одной
страницы памяти программ.
Если такое имеет место быть, то в ПП прерывания, сохранение содержимого регистра
PCLATH должно производиться последним, а восстановление - первым (по отношению
к "связке" W/Status).
В обеих случаях, используются пары команд movf/movwf.
То же самое относится и к другим "жизненно важным" регистрам.
..............................
.............................. Для ЖК-модуля MT-16S2D-2YLG
;================================================================================
; Универсальная задержка (время задержки определяется предустановленным
; содержимым W).
;================================================================================
PAUSE_X movwf Reg ; Стандартный, вычитающий,
decfsz Reg,F ; однобайтный
goto $-1 ; счетчик.
return ; Возврат по стеку.
;================================================================================
; ПП "плавающей" задержки на основе анализа состояния флага занятости BF
; (вариант для 4-разрядного интерфейса).
;================================================================================
ENTER_BF movwf Mem ; Переправка старшего п/байта регистра W на
movwf PortB ; линии RB4...7.
;-----------------------------------
; Запуск в работу старшего п/байта.
8
;-----------------------------------
nop ; Задержка в 1 м.ц.
bsf PortC,E ; Установка на линии Е "1".
nop ; Задержка в 1 м.ц.
bcf PortC,E ; Установка на линии Е "0".
;////////////////////////////////////////////////////////////////////////////////
; Вывод на индикацию картинки 1-го "кадра".
;////////////////////////////////////////////////////////////////////////////////
..............................
..............................
10
Сначала, нужно убедиться в "жизнеспособности проматери", а заодно и навести в ней
порядок.
Выбираю диапазон квантования напряжения от GND (0 в.) до +Uпит.
Следовательно, для приведения шага квантования к 5 мв., нужно, чтобы +Uпит. было
равно 5,12 в. (5 х 1024 = 5120 мв. = 5,12 в.)
Это и имеет место быть.
11
Не обращайте внимания на кривизну картинки. Это "фотоаппаратная бяка".
Я выставил десятичные точки, но в случае чего, их можно и убрать.
Нет проблем.
О программе, результат работы которой Вы видите, речь пойдет в следующем
подразделе.
12
"Практикум по конструированию устройств на PIC контроллерах" http://ikarab.narod.ru E-mail: karabea@lipetsk.ru
13