Введение.
К устройствам электроавтоматики относятся элементы и устройства станков с ЧПУ, выполняющие отдельные (дискретные) действия по управлению процессом работы станков. К таким устройствам относятся такие, как отдельные концевые выключатели, кнопки, тумблеры, реле, электромагнитные клапаны, муфты и т.п. К электроавтоматике относятся и целые подсистемы, как нерегулируемые приводы, например, приводы инструментальных магазинов, приводы насосов систем подачи СОЖ и другие устройства.
Отличительной особенностью элементов электроавтоматики является тот факт, что они имеют только два устойчивых состояния: включено - выключено, нажата кнопка - не нажата и т.д. Поэтому состояния элементов электроавтоматики можно легко описать цифровыми кодами, например, включено устройство – «1», выключено –«0», поэтому работа таких устройств описывается математическим аппаратом, называемым Булевой алгеброй. Контроллеры электроавтоматики бывают двух видов: пассивные и активные. Пассивные контроллеры это такие контроллеры, в которых решение булевых уравнений, описывающих алгоритм работы электроавтоматики, выполняется активным элементом – процессором – не входящим в состав контроллера, например, центральным процессором УЧПУ. В активных контроллерах решение булевых уравнений производится внутренним (находящимся в контроллере) процессором.
Микроконтроллеры. Общие положения.
Электроника и микропроцессорная техника с каждым днем все глубже проникает во все сферы деятельности человека. Вся схемотехника разделяется на две большие области: аналоговую и цифровую Преимущества и недостатки этих технологий известны. Аналоговая схемотехника характеризуется максимальным быстродействием, малым потреблением энергии и малой стабильностью параметров. Цифровая схемотехника обладает прекрасной повторяемостью параметров, высокой помехозащищенностью, удобством передачи, преобразования и хранения информации. Это привело к её мощному развитию в последние годы. Первые программируемые контроллеры появились в конце 70-х годов и изначально использовались для замены традиционных устройств релейной автоматики. Программируемый контроллер это устройство, предназначенное для автоматизации наиболее часто встречающихся в промышленности комбинаторных и последовательных процессов, поэтому он представляет интерес практически для любого случая автоматизации. Примерно в тоже время появились программируемые микроконтроллеры. Все больше приборов, которые еще недавно выполнялись на отдельных логических элементах, сейчас выпускаются с использованием программируемых микропроцессоров или микроконтроллеров. Это позволило значительно сократить размеры, повысить надежность, расширить функциональные возможности выпускаемых устройств.
При разработке небольших устройств, применение микроконтроллеров предпочтительнее т.к. они обычно имеют набор дополнительных встроенных функций, которые облегчают их подключение. Например, микроконтроллер фирмы Microchip PIC16F873 имеет встроенный таймер, АЦП, счетчик импульсов, большой набор линий ввода/вывода и т.д.
Как уже было сказано выше, микроконтроллеры получили в последнее время очень широкое распространение. Они используются в разнообразных приборах, таких как:
1. Цифровой вольтметр.
2. Электронные часы с будильником.
3. Различные приборы с жидкокристаллическими дисплеями.
4. Программируемая бытовая техника.
5. Цифровой автоинформатор в общественном транспорте и т.д.
В дальнейшем будет рассказано о возможностях микроконтроллеров, и вы сами сможете оценить все преимущества, которые дает использование микроконтроллеров.
Типы микроконтроллеров
Все современные микроконтроллеров можно разделить на следующие основные типы:
1. Универсальные встраиваемые 8-разрядные микроконтроллеры.
2.16- и 32-разрядные микроконтроллеры.
3. Цифровые сигнальные процессоры (DSP)
Память программ.
Для хранения программ обычно служит один из видов постоянной памяти:
- ROM (масочно-программируемое ПЗУ);
- PROM (однократно-программируемое ПЗУ);
- EPROM (электрически программируемое ПЗУ с ультрафиолетовым стиранием);
- EEPROM (ПЗУ с электрической записью и стиранием, к этому виду относятся также
современные микросхемы Flash-памяти);
Все эти типы памяти являются энергонезависимыми - это означает, что содержимое памяти сохраняется после выключения питания микроконтроллера. Такая память необходима, так как микроконтроллер не содержит каких-либо устройств массовой памяти (магнитных дисков), с которых загружается программа в компьютерах. Программа постоянно хранится в микроконтроллере.
В процессе выполнения программа считывается из этой памяти, а блок управления (дешифратор команд) обеспечивает ее декодирование и выполнение необходимых операций. Содержимое памяти программ не может меняться (перепрограммироваться) во время выполнения программы. Поэтому функциональное назначение микроконтроллера не может измениться, пока содержимое его памяти программ не будет стерто (если это возможно) и перепрограммировано (заполнено новыми командами).
Память ROM (ПЗУ) используется тогда, когда программный код заносится и микроконтроллер на этапе его производства. Предварительно программа отлаживается и тестируется, после чего передается фирме-производителю, где программа преобразуется и рисунок маски на стеклянном фотошаблоне. Полученный фотошаблон с маской используется в процессе создания соединении между элементами, из которых состоит память программ. Поэтому такую память часто называют масочно-программируемой ROM. Существует ограничение, связанное с возможностью использования таких микроконтроллеров только в определенной сфере применения, так как его программа обеспечивает выполнение жестко фиксированной последовательности операций, и не может быть использована для решения каких-либо других задач.
Память PROM может быть запрограммирована только один раз. Эта память обычно содержит плавкие перемычки, которые пережигаются во время программирования. В настоящее время такая память используется очень редко.
Электрически программируемая память EPROM состоит из ячеек, которые программируются электрическими сигналами и стираются с помощью ультрафиолетового света Чтобы стереть содержимое ячейки, она освещается ультрафиолетовым светом, этот процесс может занимать от нескольких секунд до нескольких минут.
Память EEPROM (Electrically Erasable Programmable Memory - электрически стираемая программируемая память) можно считать новым поколением EPROM памяти. Использование
EEPROM позволяет стирать и программировать микроконтроллер, не снимая его с платы. Таким способом можно периодически обновлять его программное обеспечение.
Память EEPROM более дорогая, чем EPROM (в два раза дороже EPROM с однократным программированием). EEPROM работает немного медленнее, чем EPROM.
Основное преимущество использования памяти EEPROM заключается в возможности ее многократного перепрограммирования без удаления из платы. Это дает огромный выигрыш на начальных этапах разработки систем на базе микроконтроллеров или в процессе их изучения, когда масса времени уходит на многократный поиск причин неработоспособности системы и выполнение последующих циклов стирания-программирования памяти программ.
Функционально Flash-память мало отличается от EEPROM. Основное различие состоит в способе стирания записанной информации. В памяти EEPROM стирание производится отдельно для каждой ячейки, а во Flash-памяти стирание осуществляемая целыми блоками. Если Вы хотите изменить содержимое одной ячейки Flash-памяти, то Вам потребуется перепрограммировать целый блок (или всю микросхему). В микроконтроллерах с памятью EEPROM можно изменять отдельные участки программы без необходимости перепрограммировать все устройство.
В настоящее время протоколы программирования современной EPROM и EEPROM памяти существенно изменились, что позволило выполнять программирование микроконтроллера непосредственно в составе системе, где он работает. Такой способ программирования получил название «in-system programming» или «ISP». ISP-микроконтроллеры могут быть запрограммированы после того, как их припаяли на плату. При этом сокращаются расходы на программирование, так как нет необходимости в использовании специального оборудования -программаторов.
Память данных
При первом знакомстве с описанием микроконтроллера многих удивит малый объем их оперативной памяти данных RAM, который обычно составляет десятки или сотни байт. Если микроконтроллер использует для хранения данных память EEPROM, то ее объем также не превышает нескольких десятков байт. Если Вы пишите программы для персонального компьютера (PC), то у Вас. вероятно, возникнет вопрос, что можно сделать с таким маленьким объемом памяти. Вероятно, Ваши приложения для PC содержат переменные, объем которых измеряется в килобайтах, не считая используемых массивов данных. При использовании массивов требуемый объем памяти может составлять сотни килобайт. Так что же можно сделать, имея объем ОЗУ порядка 25 байт?
Дело в том, программирование для микроконтроллера выполняется по несколько другим правилам, чем программирование PC. Применяя некоторые несложные правила можно решать многие задачи с использованием небольшого объема памяти RAM. При программировании микроконтроллеров константы, если возможно, не хранятся как переменные. Максимально используются аппаратные возможности микроконтроллеров (такие как таймеры, индексные регистры), чтобы по возможности ограничить размещение данных в RAM. Это означает, что при разработке прикладных программ необходимо предварительно позаботиться о распределении ресурсов памяти. Прикладные программы должны ориентироваться на работу без использования больших массивов данных.
Регистры микроконтроллера.
Подобно всем компьютерным системам, микроконтроллеры имеют множество регистров, которые используются для управления различными устройствами, подключенными к процессору, Это могут быть регистры процессора (аккумулятор, регистры состоянии, индексные регистры), регистры управления (регистры управления прерываниями, регистры управления таймером) или регистры, обеспечивающие ввод-вывод данных (регистры данных и регистры управления параллельным, последовательным или аналоговым вводом-выводом). Обращение к этим регистрам может производиться различными способами. Реализуемые микроконтроллером способы обращения к регистрам оказывают существенное влияние на их производительность. Поэтому очень важно понять, как происходит обращение к регистрам, чтобы писать эффективные прикладные программы для микроконтроллеров. В процессорах с RISC-архитектурой все регистры (часто и аккумулятор) располагаются по явно задаваемым адресам. Это обеспечивает более высокую гибкость при работе процессора.
Используя процессор, который может непосредственно обращаться к любому регистру, можно получить преимущество при разработке простых прикладных программ.
Внешняя память
Несмотря на огромные преимущества использования внутренней встроенной памяти, в некоторых случаях необходимо подключение к микроконтроллеру дополнительной внешней памяти (как памяти программ, так и данных). Существует два основных способа подключения внешней памяти. Первый способ - подключение внешней памяти к микроконтроллеру, как к микропроцессору. Многие микроконтроллеры содержат специальные аппаратные средства для такого подключения. Второй способ состоит в том. чтобы подключить память к устройствам ввода-вывода и реализовать обращение к памяти через эти устройства программными средствами. Такой способ позволяет использовать простые устройства ввода-вывода без реализации сложных шинных интерфейсов. Выбор наилучшего из этих способов зависит от конкретного приложения.
Схемы сброса
Все микроконтроллеры, в том числе и микроконтроллеры среднего подсемейства PIC, имеют вывод сброса, называемый в данном случае MCLR. У Р1С-микроконтроллеров предусмотрена внутренняя схема автоматического сброса при включении напряжения, она устойчиво работает, если скорость роста напряжения питания достаточно высока (обычно выше 0,05 В/мсек). Если напряжение питания при включении растет медленно, требуется внешняя схема сброса (так называемый ручной сброс), варианты схем представлены на рис. 3.
Внешняя схема сброса может потребоваться, если вы используете кварцевый резонатор относительно низкой частоты, с достаточно большим временем «разгона». В таком случае применяется схема, приведенная на рис.3.б. Эта схема известна пользователям и может применяться для микроконтроллеров, выпускаемых не только компанией Microchip, но и другими фирмами. Обратите внимание на резистор R1, значение которого может варьироваться от 100 Ом до 1кОм. Он служит для защиты входа MCLR микроконтроллера от положительного напряжения на конденсаторе С при выключении питания. Наконец, если напряжение питания может снижаться до уровней, способных нарушить нормальную работу микроконтроллера, лучше использовать схему, инициирующую сброс, когда напряжение падает ниже определенного порога.
Vdd |
MCLR |
MCLR |
Vdd |
D |
R1 |
R2 |
R1 |
Кн |
Кн |
С |
Рис.3. Схемы внешнего сброса микроконтроллеров. |
a. |
b. |
Выбор микроконтроллера
Разработка приложений на базе микроконтроллеров мало отличается от создания приложений на основе микропроцессоров вообще. При разработке таких приложений одним из главных вопросов является оптимальное разделение функций между аппаратурой и программным обеспечением. Прежде чем начинать разработку приложения с применением микроконтроллера, важно хорошо продумать варианты решений. Когда выбор сделан, можно переходить к подбору собственно микроконтроллера.
При выборе микроконтроллера надо исходить из его функциональных возможностей и внутренней архитектуры.
Выбор зависит от наличия или отсутствия системы обеспечения разработки (программной среды разработки и соответствующего оборудования), а также финансовой базы, которой вы будете располагать - это может быть и масштаб пром
ышленного производства, допускающий значительные затраты, и разработка единичных образцов, требующая минимальных средств.
Иногда лучше выбрать микроконтроллер, не содержащий всех необходимых элементов, рискнув добавить к нему затем одну или две внешние микросхемы. Нецелесообразно покупать один «супер - микроконтроллер», если нет средств на приобретение среды разработки приложения или если капиталовложения, необходимые для создания приложения, не оправдываются его применением. Когда выбор сделан, можно приступать к написанию и тестированию программного обеспечения.
Основные характеристики.
Данные микроконтроллеры выполняются в 28-выводном корпусе типа PDIP или SOIC.
Основные характеристики микроконтроллеров.
Тактовая частота: до 20 МГц.
Сброс: по включению
по снижению питания
по переполнению сторожевого таймера
по сигналу на входе сброс (MCLR).
Архитектура: быстродействующая RISC – архитектура.
Память программ: FLASH 4К (8К для PIC16F876) 14-разрядных слов.
Память данных: RAM 192 (368) байт.
Память данных: EEPROM 128 (256) байт.
Число источников прерываний: 13.
Число уровней аппаратного стека: 8
Число инструкций (команд): 35
Число портов ввода/вывода 3.
Энергопотребление:
Диапазон питающего напряжения 2.0 – 5.5 В.
Ток потребления 0,6 мА
Ток в режиме энергосбережения (SLEEP) 1 мкА.
Нагрузочная способность портов 25 мА.
Периферийные модули:
Число таймеров 3.
Число каналов АЦП 5.
Число модулей ССР 2.
Синхронный последовательный порт(MSSP) 1.
Асинхронный последовательный порт(USART)1.
Низковольтный режим программирования - есть
Программирование в готовом устройстве - есть
Блоки памяти.
В рассматриваемом микроконтроллере есть два вида памяти трех типов. Первый вид – это память программ типа FLASH, объемом 4К четырнадцатиразрядных слов (в микроконтроллерах PIC16F876 – 8K). Организация памяти программ приведена на рис.1.3. Память предназначена для хранения программы работы микроконтроллера, управляется счетчиком команд – РС. В состав памяти входит восьмиуровневый аппаратный стек, недоступный для записи и чтения программистом, четыре вектора сброса (адреса 0000 -0003 h), и один вектор прерывания с адресом 0004h. Остальная область FLASH- памяти разделена на две (четыре для PIC16F876) страницы с адресами 0005h – 07FFh и 0800h – 0FFFh. Карта распределения памяти данных приведена на рис. 1.4. и 1.5.
Память данных разделена на четыре банка: банк 0, банк 1, банк 2, и банк 3. Первые два банка с адресами 00h – 7Fh и 80h – FFh представляют собой ОЗУ статического типа, т.е. при выключении питания информация разрушается. Вторые два банка с адресами 100h – 17Fh и 180h – 1FFh представляют собой ППЗУ типа EEPROM, поэтому после выключения питания информация сохраняется. Активизация (выбор) требуемого банка осуществляется установкой разрядов регистра специального назначения STATUS в соответствии с таблицей 1.
Таблица 3.
Разряды: PR 1:PR0 | Банк |
00 | 0 |
01 | 1 |
10 | 2 |
11 | 3 |
Ячейки всех банков памяти данных в верхней части адресов зарезервированы под регистры специального назначения, остальные ячейки представляют собой регистры общего назначения. Некоторые регистры специального назначения в зависимости от частоты использования могут отображаться в нескольких банках, например регистр STATUS отображается во всех четырех банках и т.п.
2 3 4 5 6 7 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27 28 |
RA0/AN0 RA1/AN1 RA2/AN2/Vref- RA3/AN3/Vref+ MCLR1 RA4/TOCK1 Vpp RA5/AN5/SS RC0/T1OCO/T1CK1 OSC1/CLK1N RC1/T1OS1/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SD1/SDA OSC2/CLKOUT RC5/SD0 RC6/TX/CK RC7/RX/DT Vdd RB0/INT RB1 RB2 Vss RB3/PGM RB4 RB5 RB6/PGC Vss RB7/PGD |
1 9 10 20 19 8 |
Рис.3. Назначение выводов микроконтроллеров PIC16F873, PIC16F876.
2 3 4 5 6 7 11 12 13 14 15 16 17 18 21 22 23 24 25 26 27 28 |
RA0/AN0 RA1/AN1 RA2/AN2/Vref- RA3/AN3/Vref+ MCLR1 RA4/TOCK1 Vpp RA5/AN5/SS RC0/T1OCO/T1CK1 OSC1/CLK1N RC1/T1OS1/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SD1/SDA OSC2/CLKOUT RC5/SD0 RC6/TX/CK RC7/RX/DT Vdd RB0/INT RB1 RB2 Vss RB3/PGM RB4 RB5 RB6/PGC Vss RB7/PGD |
1 9 10 20 19 8 |
Рис.4. Назначение выводов микроконтроллеров PIC16F887.
Стек, уровень 1 |
Стек, уровень 2 |
Стек, уровень 8 |
PC<12;0> |
Вектор сброса |
0000h |
Вектор прерываний |
Страница 0 |
Страница 1 |
0004h 0005h 07FFh 0800h 0FFFh |
Внутренняя память программ (для PIC16F873) |
CALL, RETURN,RETLW,RETFIE |
13 |
Счетчик команд |
Страница 2 |
Страница 3 |
(для PIC 16F887) |
Рис.5 Организация памяти программ в микроконтроллере PIC 16F873.
Регистр косвенной 00h адресации TMR0 01h PCL 02h STATUS 03h FSR 04h PORTA 05h PORTB 06h PORTC 07h PORTD 08h PORTE 09h PCLATH 0Ah INTCON 0Bh PIR1 0Ch PIR2 0Dh TMR1L 0Eh TMR1H 0Fh T1CON 10h TMR2 11h T2CON 12h SSPBUF 13h SSPCON 14h CCPR1L 15h CCPR1H 16h CCP1CON 17h RCSTA 18h TXREG 19h RCREG 1Ah CCPR2L 1Bh CCPR2H 1Ch CCP2CON 1Dh ADRESH 1Eh ADCON0 1Fh 20h Регистры общего назначения 96 байт 7Fh |
Банк 0 Банк 1 Банк 2 Банк 3 Рис. 6. Карта памяти данных микроконтроллера PIC16F887 |
Регистр косвенной 80h адресации OPTION-REG 81h PCL 82h STATUS 83h FSR 84h TRISA 85h TRISB 86h TRISC 87h TRISD 88h TRISE 89h PCLATH 8Ah INTCON 8Bh PIE1 8Ch PIE2 8Dh PCON 8Eh -------------------8Fh -------------------90h SSPCON2 91h PR2 92h SSPADD 93h SSPSTAT 94h ------------------ 95h ------------------ 96h ------------------ 97h TXSTA 98h SPBRG 99h ------------------ 9Ah ------------------ 9Bh ------------------ 9Ch ------------------ 9Dh ADRESL 9Eh ADCON1 9Fh A0h Регистры общего назначения 80 байт EFh F0h Доступ к памяти 70h – 7Fh FFh |
Регистр косвенной 100h адресации TMR0 101h PCL 102h STATUS 103h FSR 104h ---------------105h PORTB 106h -------------- 107h -------------- 108h -------------- 109h PCLATH 10Ah INTCON 10Bh EEDATA 10Ch EEADR 10Dh EEDATH 10Eh EEADRH 10Fh 110h 111h 112h 113h Регистры 114h общего 115h назначения 116h 117h 16 байт 118h 119h 11Ah 11Bh 11Ch 11Dh 11Eh 11Fh 120h Регистры общего назначения 80 байт 16Fh 170h Доступ к памяти 70h – 7Fh 17Fh |
Регистр косвенной 180h адресации OPTION_REG 181h PCL 182h STATUS 183h FSR 184h ------------------ 185h TRISB 186h ----------------- 187h ----------------- 188h ----------------- 189h PCLATH 18Ah INTCON 18Bh EECON1 18Ch EECON2 18Dh Резерв 18Eh Резерв 18Fh 190h 191h 192h 193h Регистры 194h общего 195h назначения 196h 197h 16 байт 198h 199h 19Ah 19Bh 19Ch 19Dh 19Eh 19Fh 1A0h Регистры общего назначения 80 байт 1EFh 1F0h Доступ к памяти 70h – 7Fh 1FFh |
Регистр косвенной 00h адресации TMR0 01h PCL 02h STATUS 03h FSR 04h PORTA 05h PORTB 06h PORTC 07h ---------- 08h ---------- 09h PCLATH 0Ah INTCON 0Bh PIR1 0Ch PIR2 0Dh TMR1L 0Eh TMR1H 0Fh T1CON 10h TMR2 11h T2CON 12h SSPBUF 13h SSPCON 14h CCPR1L 15h CCPR1H 16h CCP1CON 17h RCSTA 18h TXREG 19h RCREG 1Ah CCPR2L 1Bh CCPR2H 1Ch CCP2CON 1Dh ADRESH 1Eh ADCON0 1Fh 20h Регистры общего назначения 96 байт 7Fh |
Банк 0 Банк 1 Банк 2 Банк 3 Рис. 7. Карта памяти данных микроконтроллер PIC16F876/877/887 |
Регистр косвенной 80h адресации OPTION-REG 81h PCL 82h STATUS 83h FSR 84h TRISA 85h TRISB 86h TRISC 87h --------- 88h --------- 89h PCLATH 8Ah INTCON 8Bh PIE1 8Ch PIE2 8Dh PCON 8Eh -------------------8Fh -------------------90h SSPCON2 91h PR2 92h SSPADD 93h SSPSTAT 94h ------------------ 95h ------------------ 96h ------------------ 97h TXSTA 98h SPBRG 99h ------------------ 9Ah ------------------ 9Bh ------------------ 9Ch ------------------ 9Dh ADRESL 9Eh ADCON1 9Fh A0h Регистры общего назначения 96 байт FFh |
Регистр косвенной 100h адресации TMR0 101h PCL 102h STATUS 103h FSR 104h ---------------105h PORTB 106h -------------- 107h -------------- 108h -------------- 109h PCLATH 10Ah INTCON 10Bh EEDATA 10Ch EEADR 10Dh EEDATH 10Eh EEADRH 10Fh 110h Регисты общего назначения 17Fh |
Регистр косвенной 180h адресации OPTION_REG 181h PCL 182h STATUS 183h FSR 184h ------------------ 185h TRISB 186h ----------------- 187h ----------------- 188h ----------------- 189h PCLATH 18Ah INTCON 18Bh EECON1 18Ch EECON2 18Dh Резерв 18Eh Резерв 18Fh 190h Регистры общего назначения 1FFh |
Порты ввода-вывода.
Для связи микроконтроллера с внешними устройствами и системами служат порты ввода-вывода. Микроконтроллер PIC16F873 имеет три порта, именуемые PORTA, PORTB, PORTC. Другие микроконтроллеры имеют другой состав, например, микроконтроллер PIC16F874 кроме перечисленных портов, имеет еще два порта: PORTD, PORTE. Порты ввода-вывода предназначены либо для ввода сигналов от каких либо внешних источников, либо для вывода сигналов на другие устройства. Все выводы всех портов представляют собой универсальные двунаправленные каналы, которые могут быть настроены как на ввод, так и на вывод информации. Некоторые выводы мультиплицированы с каналами функциональных блоков микроконтроллера и в случае их использования в этих блоках каналы портов не являются универсальными каналами ввода вывода. Назначение мультиплицированных выводов будет рассматриваться при изучении конкретных функциональных блоков. Однако порядок настройки портов на вход или выход не зависит от места использования канала. Рассмотрим их подробнее.
PORTA представляет собой шестиразрядный порт на регистре специального назначения PORTA по адресу 05h.(в микроконтроллере PIC16F874 – восьмиразрядный). Обозначения разрядов приведены в таблице 12. Направление передачи информации задается установкой соответствующих разрядов регистра TRISA (адрес 85h): при записи в разряды регистра TRISA «1» соответствующий вывод порта А настраивается на ввод информации, при этом выходной буфер переводится в третье состояние, при записи «0» - на вывод – уровень сигнала - TTL. При использовании порта на вывод информации операции производятся по циклу «чтение – модификация – запись», т.е. сначала производится чтение с выходного буфера, затем изменение содержимого и запись в защелку порта.
Таблица 14
Номера битов | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Обозначения выводов | - | - | RA5 | RA4 | RA3 | RA2 | RA1 | RA0 |
Один из выводов - RA4 - имеет на входе триггер Шмитта, а на выходе открытый сток. Все остальные выводы имеют на входе TTL-буфер, а на выходе полнофункциональные КМОП - буферы.
Примечание. В микроконтроллере PIC16F887 PORTA может работать как в аналоговом режиме, так и в цифровом. Для перевода порта в цифровой режим необходимо с регистр специального назначения ANSEL записать 0.
PORTB представляет собой 8 - ми разрядный внешний порт на регистре специального назначения PORTB (адрес 06h). Выводы порта также могут быть настроены как на вход, так и на выход путем записи в соответствующие разряды регистра TRISB (адрес 86h): лог. «1» при настройке выводов на вход и лог. «0» при настройке вывода на выход. Обозначения разрядов порта приведены в таблице 13 .
Таблица 15.
Номера битов | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Обозначения выводов | RB7 | RB6 | RB5 | RB4 | RB3 | RB2 | RB1 | RB0 |
Отличительной особенностью порта В является наличие на всех выводах
подтягивающих резисторов, которые могут быть подключены к выводам в случае необходимости путем записи лог. «1» в разряд – RBPU (7бит) регистра OPTION_ REG. Подтягивающие резисторы автоматически отключаются, если соответствующие выводы переводятся в режим выхода.
Примечание. PORTB также может работать в аналоговом и цифровом режиме, и для переключения порта в цифровой режим необходимо записать «0» в регистр специального назначения ANSELH.
PORTC представляет собой 8 – разрядный внешний порт на регистре специального назначения PORTC (адрес 7h). Как и порты А, В, порт С может быть настроен как на вход, так и на выход путем записи в соответствующие разряды регистра TRISC ( адрес 87h). Обозначения разрядов PORTC приведены в таблице 14 .
Таблица 16.
Номера битов | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Обозначения выводов | RC7 | RC6 | RC5 | RC4 | RC3 | RC2 | RC1 | RC0 |
Примечания:
1. В микроконтроллерах типа PIC16F874, PIC16F887 имеются также внешние порты PORTD и PORTE, которые могут быть настроены на вход или на выход с помощью записи в регистры TRISD и TRISE аналогично портам А , В, С.
2. Большинство выводов всех портов мультиплицированы с выходами различных функциональных блоков, о чем будет идти речь при рассмотрении конкретных функциональных блоков.
Использование и программирование портов можно рассмотреть на примере решения булева уравнения, описывающего фрагмент электроавтоматики станка.
Пример программирования работы фрагмента электроавтоматики станка с ЧПУ.
Рассмотрим пример устройства управления подсистемой обеспечения процесса резания смазочно-охлаждающей жидкостью (СОЖ) на станках с ЧПУ. Схема устройства состоит из силовой и логической части.
3х380 в 50 Гц А В С N |
АВ |
Кп |
Кп |
Кп |
М |
РТ |
РТ |
Рис. 8. Принципиальная схема силовой части блока управления подсистемой СОЖ.
На схеме:
АВ – автоматический выключатель,
М - приводной двигатель насоса подачи СОЖ,
Кп - контакты электромагнитного пускателя,
РТ - катушки теплового реле.
Работает схема следующим образом.
После включения автоматического выключателя АВ питающее напряжение – 3х380 в через замкнутые контакты пускателя Кп подается на асинхронный двигатель привода насоса М. Двигатель имеет два вида защиты: динамическую защиту за счет уставки автоматического выключателя АВ и тепловую защиту за счет теплового реле. Включение электромагнитного пускателя осуществляется логической схемой блока управления.
Кнс Кнп |
П1 Р1 Р2 Кн1 Р3 РТ |
Кп |
Кп1 |
+Е |
--Е |
Рис. 9. Принципиальная схема логической части блока управления подсистемой СОЖ.
На схеме:
+Е, -Е - напряжение питания схемы,
П1 - переключатель режимов работы блока: ручной / автоматический,
Р1 - контакты пускового реле при автоматическом режиме работы,
Р2 – контакты реле давления в системе СОЖ,
Кн1 – концевой выключатель защитного кожуха станка,
Р3 – контакты температурного реле СОЖ,
РТ – контакты теплового реле,
Кнс – кнопка СТОП при ручном управлении,
Кнп – кнопка ПУСК при ручном управлении,
Кп1 – контакты электромагнитного пускателя,
Кп - катушка электромагнитного пускателя.
Работает схема следующим образом.
При автоматическом режиме работы (переключатель П1 в верхнем положении) замыкается контакт Р1 и ток через нормально замкнутый контакт Р2,при закрытом защитном кожухе (контакт Кн1 замкнут), нормально замкнутые контакты Р3 и РТ проходит через катушку пускателя Кп, вызывая его срабатывание и включение двигателя насоса СОЖ. Останавливается схема размыканием контакта Р1 сигналом из системы ЧПУ.
При ручном режиме (переключатель П1 в нижнем положении ) ток через нормально закрытый контакт кнопки Кнс и нажатой кнопке Кнп проходит на катушку пускателя по описанной выше схеме. После отпускания кнопки Кнп, ее контакты блокируются контактами пускателя Кп1. Останавливается схема нажатием кнопки Кнс.
Алгоритм работы схемы в обоих режимах можно описать следующим булевым уравнением:
Кп = Р2 * Кн * Р3 * Рт * ( П1 * R1 + П1 * Кнс * Кнп + П1 * Кнс * Кп1 ) (1).
Для решения этого уравнения , т.е. управления подсистемой СОЖ разрабатываем устройство на основе микроконтроллера типа PIC16F873, так как количество сигналов, участвующих в управлении не более 13, кроме того повторяющиеся сигналы – П1- могут быть заменены одним сигналом. Принципиальная схема блока управления показана на рис.1.9.
02 03 04 05 06 07 21 22 23 24 25 26 27 28 |
+5v R1 01 |
C1 C2 |
Q1 |
09 10 20 19 08 |
PIC16F873 RA0 MCLR1 RA1 RA2 RA3 RA4 RA5 OSC1 RB0 RB1 OSC2 RB2 RB3 Vdd RB4 RB5 Vss RB6 Vss RB7 |
Кc |
Кп |
+24v R2 Кнп R4 Кнс R10 Кн1 |
Рис. 10. Принципиальная схема бока управления.
Работает схема следующим образом. Для работы микроконтроллера необходим автономный источник питания, выдающий напряжение постоянного тока +5в, подаваемый на входы Vdd и Vss микросхемы. На элементах Q1, C1, C2 собран генератор тактовых импульсов, а на элементах R1, Кс – схема внешнего сброса микроконтроллера. Связь микроконтроллера с исполнительными элементами логической схемы осуществляется через порты PORTA, PORTB в соответствии с таблицей 15.
Таблица 15. Распределение сигналов логической схемы по разрядам портов связи микроконтроллера.
Сигнал | П1 | Р2 | Кн | Р3 | РТ | R1 | Кнс | Кнп | Кп | Кн1 |
контакт | RB1 | RB2 | RB3 | RB4 | RB5 | RB6 | RA1 | RA4 | RA0 | RB7 |
После распределения сигналов уравнение (1) можно переписать в формате языка высокого уровня, например, на языке СИ:
RA0 = (RB2&&RB3 && RB1&&RB6) ||(RB2&&RB3&&RB1&&RA1&&RA4) || (RB2&&RB3&&RB1&&RA1&&RA0). (2)
Булево уравнения (2) представляет собой функцию управления фрагментом электроавтоматики. Для решения этого уравнения пишем программу его решения на языке высокого уровня – СИ.
Программа имеет следующий вид:
#define XTAL_FREQ 4MHZ
#define byte unsigned char
#define word unsigned int
#include <pic.h>
#include <stdio.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);
void main() {
TRISA = 0x10;
TRISB= 0xFF;
for (; !RA0 ;) { //цикл программы работы фрагмента
RA0 = (RB2&&RB3 && RB1&&RB6) ||(RB2&&RB3 RB1&&RA1&&RA4)|| (RB2&&RB3&& RB1&&RA1&&RA0);
}
} // конец main
Пример программирования таймера TMR1.
Исходные данные примем те же, что и в примере программирования таймера TMR0:
1. Требуемая задержка -500 мсек.
2. Тактовый сигнал – внутренняя частота Fosc / 4 = 1 MHz/
3. Режим работы модуля – таймер.
Максимальное время срабатывания самого таймера составляет:
t max = 256*256 * 1 = 65536 мксек (счетчик таймера сдвоенный TMR1H и TMR1L
С включенным предделителем:
T max = t max * 8 = 65536 * 8 = 524288 мксек.,
т.е. максимальное время самого таймера TMR1 больше требуемого. Разность времен: 24288 мксек компенсируем за счет уменьшения длительности цикла самого таймера путем записи в регистр таймера (TMR1H и TMR1L) некоторого числа, Так как входные импульсы поступают в таймер через предделитель с полным коэффициентом деления, то таймер должен компенсировать:
2428/8 = 3036 импульсов или в шестнадцатиричной системе: 0BDC.
Текст программы.
#define XTAL_FREQ 4MHZ //Частота тактового генератора 4 MHZ
#define byte unsigned char
#define word unsigned int
#include <pic.h>
#include <stdio.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);
void main() {
TRISB = 0xff; // порт В на вход
TRISA = 0x10; // порт A на выход и на вход
T1CON = 0x30; //настройка таймера TMR1
for (; !RA0 ;) { //цикл работы фрагмента
RA0 = (RB2&&RB3 && RB1&&RB6) ||(RB2&&RB3 RB1&&RA1&&RA4)|| (RB2&&RB3&& RB1&&RA1&&RA0);
} // решение булевых уравнений фрагмента
TMR1IF= 0; // сброс флага TMR1
TMR1H = 0x0B; //начальная установка таймера
TMR1L = 0xDC;
TMR1ON = 1; //пуск таймера TMR1
for (; !TMR1IF ;) { } // ожидание срабатывания таймера TMR1
RA0 = 0; // отключение Кп
} // конец main
Примечание. Код настройки таймера T1CON = 0x30 (двоичный код:00110000) по порядку соответствует:
00 <7,6> – не программируется,
11 <5,4> – настройка предделителя 1:8
0 <3> - внутренний генератор отключен.
0 <2> - синхронизация входного сигнала отсутствует
0 <1> - внутренний источник входных импульсов
0 <0> - таймер TMR1 пока выключен.
Модуль таймера TM R 2.
Модуль представляет собой 8-ми разрядный таймер с предделителем входных импульсов и выходным делителем. Структурная схема таймера показана на рис 10.
Работает таймер следующим образом. Временной период задается путем записи определенного числа в регистр PR2. После пуска тактовые импульсы через программируемый предделитель поступают в счетчик TMR2. Содержимое счетчика TMR2 инкрементируется и сравнивается с регистром PR2. При совпадении счетчика TMR2 с регистром PR2 работа таймера прекращается и устанавливается флаг TMR2IF. При установке разрешения прерывания (TMR2IE = 1) запускается процесс обслуживания таймера в режиме прерывания.. . . Настройка таймера осуществляется путем записи в регистр T2CON (адрес 12h) в соответствии с таблицей 20.
Установить флаг ТMR2IF |
Выход TMR2 |
Cброс |
TMR2 |
Сравнение |
Fosc/4 |
Предделитель 1:1, 1:4, 1:16 |
PR2 |
Вых. делитель 1:1 до 1:16 |
2 |
4 |
Рис. 11. Структурная схема таймера TMR2. |
Таблица 20.
Номер разряда | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Обозначение сигнала | - | TOUTPS3 | TOUPTS2 | TOUPTS1 | TOUTPS0 | TMR2ON | T2CKPS1 | T2CKPS0 |
Где:
TOUPTS3: TOUPTS0 - выбор коэффициента деления выходного делителя таймера TMR2,
0000 = 1 : 1
0001 = 1 : 2
:
:
1111 = 1: 16
TMR2 ON – включение таймера TMR2: 1 – таймер включен, 0 – таймер выключен.
T2 CKPS1: T2 CKPS0 – выбор коэффициента деления предделителя:
00 = 1:1
01 = 1:4
1х = 1:16
Пример программирования работы таймер TMR2 .
Рассмотрим пример программирования таймера TMR2 при использовании его для организации задержки на 500 мсек в том фрагменте электроавтоматики. Максимальная задержка самого таймера зависит от разрядности регистра PR2, поскольку счтчик таймера восьмиразрядный а период тактовых импульсов равен 1 мксек, максимальное время задержки составит 256 мксек.
С учетом входного предделителя с коэффициентом деления 1:16, получим:
Т мах = 256 * 16 = 4096 мксек.
а с учетом выходного делителя с максимальным коэффициентом деления 1:16, получим:
Tmax = 4096 * 16 =65536 мксек.
Таким образом, максимальная задержка таймера TMR2 со всеми делителями недостаточна для получения требуемой задержки, поэтому мы вынуждены программировать несколько циклов срабатывания таймера TMR2(см. программирование таймера TMR0). Как было показано в указанном примере программирования таймера TMR0, разность входных импульсов 24288 должна быть компенсирована записью некоторого числа в регистр PR2. Рассчитаем это число:
Поскольку совершается восемь циклов работы таймера на каждом цикле мы можем компенсировать:
24288 / 8 = 3036 импульсов.
На выходном делителе компенсируется:
3036 / 16 = 190 импульсов.
А с учетом входного предделителя:
190 / 16 = 12 импульсов или в шестнадцатиричной системе 0С импульсов.
С учетом вышеизложенного программа для фрагмента электроавтоматики будет иметь вид:
#define XTAL_FREQ 4MHZ
#define byte unsigned char
#define word unsigned int
#include <pic.h>
#include <stdio.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);
void main() {
char shet = 0x00; //сброс счетчика числа циклов таймера
TRISB = 0xff; // порт В на вход
TRISA = 0x10; // порт A на выход и на вход
T2CON = 0x7A //настройка таймера TMR2
for (;! RA0 ;) {
RA0 = (RB2&&RB3 && RB1&&RB6) ||(RB2&&RB3 RB1&&RA1&&RA4)|| (RB2&&RB3&& RB1&&RA1&&RA0);
} //проверка условий включения пускателя Кп
for (shet = 0x00; shet < 0x08; shet ++ ) { //счет числа циклов TMR2
TMR2IF = 0; // сброс флага TMR2
PR2 = 0x0C;
TMR2ON = 1; //пуск таймера TMR2
for (; !TMR2IF ;) { } //ожидание срабатывания таймераTMR2
}
RA0 = 0; // отключение Кп
} // конец main
Расшифровка настройки таймера по разрядам регистра T2CON: 7A (01111010)
0 <7> - не программируется,
1111 <6-3> - коэффициент деления выходного делителя 1:16,
0 <2> - таймер пока выключен,
10 <1-0> - в предделителе установлен коэффициент деления 1: 16.
Режим сравнения.
В этом режиме производится сравнение содержимого регистра модуля с содержимым счетчика таймера TMR1. При совпадении этих данных формируется сигнал прерывания –CCP1IF ( устанавливается «1» во втором разряде регистра PIR1) и в зависимости от выбранного подрежима устанавливается соответствующий сигнал на выводе RC2. Структурная схема модуля ССР1 в этом режиме показана на рис. 12.
Триггер специального назначения |
Логика |
Флаг CCP1IF |
CCPR1H |
CCPR1L |
Сравнение |
Равноо |
S Q R |
RC2 |
TRISC<2> |
Выбор режима |
TMR1H |
TMR1L |
Рис. 13. Структурная схема модуля ССР1 в режиме сравнения. |
Подрежимы работы модуля устанавливаются разрядами <3:0> регистра CCP1CON:
1000 – сравнение, вывод RC2 = 1, устанавливается флаг прерывания CCP1IF,
1001 – сравнение, вывод RC2 = 0, устанавливается флаг прерывания CCP1IF,
1010 – сравнение, вывод RC2 не меняется, устанавливается флаг CCP1IF,
1011 – сравнение, устанавливается триггер специальных функций, устанавливается флаг прерывания CCP1IF, сбрасывается счетчик таймера TMR1.
Настройка модуля в этом режиме производится в следующей последовательности:
- настройка вывода RC2 на выход («0» во 2-ой разряд регистра TRISC),
-настройка таймера TMR1,
- выбор подрежима установкой разрядов 3-0 регистра CCP1CON.
Момент совпадения содержимого счетчиков модуля и таймера TMR1 фиксируется установкой флага прерываний, который после отработки подпрограммы прерывания должен быть сброшен программным способом.
Модуль АЦП.
Модуль АЦП имеет 5 входных каналов (8 в микроконтроллерах PIC16F874). Структурная схема модуля показана на рис. 14. Микроконтроллер имеет в своем составе один аналого-цифровой 10 - разрядный преобразователь, на вход которого коммутируется 5 или 8 (для PIC16F887) аналоговых сигналов. Входные сигналы подаются на выводы RA0…RA3, RA5, RE0…RE3 портов A и E микроконтроллера, соответственно эти выводы должны быть предварительно настроены как входы. В качестве опорных напряжений преобразователя можно использовать как напряжения питания микроконтроллера: Vdd и Vss, так и задавать от внешнего источника опорных напряжений: Vref+ и Vref-, которые подаются на входы RA3, RA2 соответственно. Число входных каналов модуля при этом сокращается.
Для управления модулем АЦП используются четыре регистра специального назначения:
- ADRESH – регистр старшего байта результата преобразования,
- ADRESL - регистр младшего байта результата преобразования,
- ADCON0 – регистр управления 0,
- ADCON1 - регистр управления1.
Регистр ADCON0 используется для настройки и пуска преобразователя. Формат регистра приведен в таблице 19
Таблица 22.
Номер разряда | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Обозн. разряда | ADCS1 | ADCS0 | CHS2 | CHS1 | CHS0 | GO/DONE | - | ADON |
Бит 0 – ADON – включение преобразования: 1 – модуль включен,
0 – модуль выключен, ток не потребляется.
Бит 1 не используется.
Бит 2 – GO/DON E -бит состояния преобразователя: 1 – выполняется преобразование, установка бита означает начало работы преобразователя, 0 – ожидание, аппаратно сбрасывается по окончании преобразования.
Биты 5-3 – CHS2: CHS0 - выбор номера аналогового входа:
000 – канал 0
001 – канал 1
010 – канал 2
011 – канал 3
100 – канал 4
101 – канал 5
110 – канал 6
111 – канал 7
Биты 7-6 – ADCS1: ADCS0 – выбор источника тактовых сигналов преобразователя)
00 – Fosc/2, где Fosc- основная тактовая частота микроконтроллера,
01 – Fosc/8
10 – Fosc/32
11 - частота внутреннего RC – генератора модуля АЦП.
Формат регистра ADCON1 приведен в таблице 19.
Таблица 23
Номер разряда | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Обозн. разряда | ADFM | - | - | - | PCFG3 | PCFG2 | PCFG1 | PCFG0 |
Биты 3-0 PCFG3:PCFG0 - биты настройки каналов на различные режимы, приведенные в таблице 20
ADFM выбора способа выравнивания (см. рис.17).
Таблица 24.
PCFG3 PCFG0 | AN7 RE2 | AN6 RE1 | AN5 RE0 | AN4 RA5 | AN3 RA3 | AN2 RA2 | AN1 RA1 | AN0 RA0 | Vref+ | Vref- | Кан./ Vref |
0000 | A | A | A | A | A | A | A | A | Vdd | Vss | 8/0 |
0001 | A | A | A | A | Vref+ | A | A | A | RA3 | Vss | 7/1 |
0010 | D | D | D | A | A | A | A | A | Vdd | Vss | 5/0 |
0011 | D | D | D | A | Vref+ | A | A | A | RA3 | Vss | 4/1 |
0100 | D | D | D | D | A | D | A | A | Vdd | Vss | 3/0 |
0101 | D | D | D | D | Vref+ | D | A | A | RA3 | Vss | 2/1 |
011x | D | D | D | D | D | D | D | D | Vdd | Vss | 0/0 |
1000 | A | A | A | A | Vref+ | Vref- | A | A | RA3 | RA2 | 6/2 |
1001 | D | D | A | A | A | A | A | A | Vdd | Vss | 6/0 |
1010 | D | D | A | A | Vref+ | A | A | A | RA3 | Vss | 5/1 |
1011 | D | D | A | A | Vref+ | Vref- | A | A | RA3 | RA2 | 4/2 |
1100 | D | D | D | A | Vref+ | Vref- | A | A | RA3 | RA2 | 3/2 |
1101 | D | D | D | D | Vref+ | Vref- | A | A | RA3 | RA2 | 2/2 |
1110 | D | D | D | D | D | D | D | A | Vdd | Vss | 1/0 |
1111 | D | D | D | D | Vref+ | Vref- | D | A | RA3 | RA2 | 1/2 |
Обозначения в таблице 20:
A – аналоговый вход,
D – цифровой канал ввода/вывода
Vref+ - положительное внешнее опорное напряжение АЦП,
Vref- - отрицательное внешнее опорное напряжение АЦП,
Kан./Vref – число доступных аналоговых каналов / число входов внешнего опорного напряжения.
АЦП |
RE2/AN7 RE1/AN6 RE0/AN5 RA5/AN4 RA3/AN3/Vref+ RA2/AN2/Vref- RA1/AN1 RA0/AN0 |
Uan |
Vdd |
Vss |
Vref+ |
Vref- |
CHS2:CHS0 |
Рис. 15. Структурная схема модуля АЦП. |
C hold |
F tact |
Примечания:
1. Настройку модуля USART см. в соответствующем разделе.
2. Настройка АЦП:
а. ADCON0: 0x41 (двоичный код 01000001)
Биты <7,6> = 01 – источник тактового сигнала Fosc /8
Биты <5,4,3> = 000 – выбран для аналогового входа канал 0
Бит <2> = 0 - преобразование не запущено
Бит <1> - не используется
Бит <0> = 1 - модуль АЦП включен
б ADCON1: 0x80 (двоичный код 10000000)
Биты <3,2,1,0> = 0000 – все входы аналоговые, в качестве опорного напряжения применяется напряжение питания микроконтроллера Vdd , Vss/
Бит <7> = 1 – выбрано правое выравнивание по следующим соображениям.
Максимальное входное напряжение не превышает напряжение питания т.е. 5вольт, что соответствует выходному коду АЦП равному 03FFh. В нашем случае максимальное входное напряжение не превышает 0,075 вольт, что соответствует выходному коду АЦП равному 0Fh, т.е. диапазон выходных кодов АЦП полностью размещается в младшем байте выходного регистра АЦП.
в. В зависимости от версии компилятора программного комплекса MPLAB могут быть различные варианты оператора пуска АЦП: GO/-DONE, GODONE, GO.
Передача данных.
Работа модуля по приему и опознанию адреса аналогична рассмотренному выше. Но если в принятом адресном байте бит R/-W равен 1, то бит R/-W в регистре SSPSTAT также устанавливается в 1. Одновременно бит CKR (4бит регистра CCPCON) устанавливается в 0, что блокирует линию SCL. Передаваемый байт записывается в регистр SSPBUF и устанавливается в 1 бит SKR, что означает освобождение линии SCL. Ведущее устройство контролирует линию SCL и при обнаружении тактовых импульсов начинает прием посылки по заднему фронту сигналов на линии SCL. На 9 такте на линии SCL ведущее устройство формирует сигнал ACK. Если сигнал ACK от ведущего не поступил, то ведомое устройство заканчивает прием установкой в 1 бита P (4бит в регистре SSPSTAT) и переходит режим ожидания сигнала START.
2.5.1.3.Поддержка общего вызова.
Данная процедура используется при необходимости передавать одну и ту же информацию для всех абонентов, подключенных к шине I2C. Для распознавания общего вызова используется зарезервированный для этого случая адрес, в котором все разряды, включая бит R/-W равны 0. Данный режим включатся ведомым устройством путем установки в 1 бита GSEN (7 бит регистра SSPCON2). Далее процедура работы модуля аналогична работе при приеме данных.
2.5.1.4. Работа в SLEEP режиме.
В SLEEP режиме микроконтроллер может принимать байты адреса или данных. При этом микроконтроллер выходит из SLEEP режима, если имеется разрешение работы модуля MSSP по прерываниям.
2.5.2. Режим ведущего I 2 C .
Режим ведущего включатся путем установки бит SSPM3:SSPM0 в регистре SSPCON, при этом выводы SCL и SDA управляются аппаратно (переключаются в режим выхода). Структурная схема модуля в режиме ведущего приведена на рис. Работает модуль следующим образом. При передаче данных модуль формирует сигнал START путем установки бита SEN в регистре SSPCON2, после чего ожидает прерывания или установки флага SSPIF (бит 3 в регистре PIR1). При получении этих условий в регистр SSPBUF записывается адрес абонента (7 старших разрядов и направление обмена – R/-W =0 – передача байта), одновременно устанавливается бит BF регистра SSPSTAT (буфер SSPBUF полон), после чего байт адреса переписывается в сдвиговый регистр SSPSR и передается абоненту. После перезаписи байта из регистра SSPBUF в регистр SSPSR сбрасывается бит BF регистра SSPSTAT. Получив в ответ сигнал ACK, ведущий записывает 1 в бит ACKSTAT регистра SSPCON2 и по заднему фронту 9-го тактового сигнала устанавливается флаг SSPIF, означающий что предыдущий байт передан абоненту и можно передавать следующий: либо непосредственно по опросу флага, либо по прерыванию. После этого записью в регистр SSPBUF на линию выдается байт данных. После прохода 8 тактовых импульсов ожидается бит ACK и устанавливается бит ACKSTAT. По заднему фронту 9-го тактового импульса устанавливается флаг SSPIF. Далее продолжается по данному циклу передача всех байтов информации. После передачи всего массива данных записью 1 в бит PEN (2 бит) регистра SSPCON2 инициируется сигнал STOP.
При приеме информации ведущим адресная часть цикла аналогична вышеизложенному, но в адресном байте бит R/-W равен 1, поэтому после приема сигнала ACK не устанавливается флаг SSPIF. Ведущий переходит в режим ожидания, контролируя сигнал на линии SCL (этот сигнал задерживается ведомым для перехода в режим передачи). После «отпускания» линии SCL, ведущий принимает 8 бит, записывает 1 в бит ACKDT регистра SSPCON2, формирует ответ ACK и устанавливает флаг SSPIF, по которому принятая информация должна быть прочитана (иначе она будет потеряна при приеме следующего байта. По окончании передачи массива данных ведомое устройство инициирует на шине сигнал STOP.
Ведущий отслеживает и возникновение конфликта на шине I2C. Суть обнаружения конфликта заключается в том, что при переходе сигнала на линии SCL в высокое состояние сигнал на линии SDA меняться не должен и если это произошло, значит шину пытается захватить другое устройство. Обнаружив конфликт, ведущее устройство устанавливает бит BCLIF в регистре PIR2, прекращает работу на шине и переходит в режим ожидания, контролируя возникновение на шине сигнала STOP. После обнаружения этого сигнала устройство может продолжить работу, «захватив» шину обычным способом.
С другими режимами работы модуля MSSP, например, с режимом синхронного последовательного интерфейса SPI можно ознакомиться в [ ].
SCL |
Шина данных |
SSPBUF |
SSPSR |
BRG генератор |
Генератор START, STOP подтверждения |
Детектор сигн. START, STOP, конфликтов, арбитраж |
SDA |
SDA |
Чтение |
Запись |
SSPM3:SSPM0, SSPADD <6:0> |
Рис. 24. Структурная схема модуля MSSP в режиме ведущего I2C. |
Прерывания.
В микроконтроллерах PIC16F873 (PIC16F876) реализованы 14 источников прерывания. Источниками прерываний могут быть как внутренние устройства (память, функциональные блоки), так и внешние устройства, формирующие сигналы прерывания в виде сигнала INT на входе RB0 или в виде перепада уровня сигналов на входах RB4…RB7. Структурная схема системы прерываний приведена на рис.26 Как видно из схемы, прерывания от всех источников возникают после установки соответствующего флага (сигналы флагов оканчиваются символом F). Установка флага в каждом устройстве производится после готовности устройства к обслуживанию его процессором. Все прерывания могут быть замаскированы (отменены) путем установки в 0 соответствующего сигнала (сигналы маски оканчиваются символом E). Все без исключения прерывания могут быть замаскированы сигналом GIE (установкой его в 0), кроме того прерывания от функциональных модулей могут быть замаскированы сигналом PEIE.
Флаги и маски прерываний хранятся в регистрах INTCON, PIE1, PIR1, PIE2, PIR2. При разработке подпрограмм обслуживания прерываний необходимо помнить, что при переходе на подпрограмму в стеке сохраняется только адрес возврата, поэтому, при необходимости, надо позаботиться о сохранении содержимого некоторых ключевых регистров, например, рабочего регистра W и регистра состояния процессора STATUS.
EEIF EEIE EEPR PSPIF PSPIE Парал |
ADIF ADIE АЦП |
RCIF RCIE ПРМ |
TXIF TXIE ПРД SSPIF SSPIE MSSP CCP1IF CCP1IE CCP1 |
TMR2IF TMR2IE |
TMR1IF TMR1IE |
CCP2IF CCP2IE Конф.I2C BCLIF BCLIE |
TOIF TOIE TMR0 INTF INTE Внеш RBIF RBIE RB4.. |
PEIE |
GIE |
Выход из SLEEP |
Прерывание CPU |
Рис.26. Структурная схема логики прерываний. |
Кнс Кнп |
П1 Р1 Р2 Кн1 Р3 РТ |
Кп |
Кп1 |
+Е |
--Е |
Ав |
Рис. 9. Принципиальная схема логической части блока управления подсистемой СОЖ.
Ав. Кнопка аварийного отключения.
02 03 04 05 06 07 21 22 23 24 25 26 27 28 |
+5v R1 01 |
C1 C2 |
Q1 |
09 10 20 19 08 |
PIC16F873 RA0 MCLR1 RA1 RA2 RA3 RA4 RA5 OSC1 RB0 RB1 OSC2 RB2 RB3 Vdd RB4 RB5 Vss RB6 Vss RB7 |
Кc |
Кп |
+24v R2 Кнп R4 Кнав Кнс R10 Кн1 |
Ав. |
Рис. 10. Принципиальная схема бока управления.
Текст программы.
#define XTAL_FREQ 4MHZ
#define byte unsigned char
#define word unsigned int
#include <pic.h>
#include <stdio.h>
__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROTECT & PWRTEN);
char shet; // счетчик циклов срабатывания таймера
interrupt isr(void);
Void main()
{
ANSELH = 0; // настройка порта B в цифровой режим
ANSEL =0; // настройка порта А в цифровой режим
TRISB = 0xFF; // настройка порта В вход
TRISA = 0x10;
PEIE=1; // разрешение прерывания от функциональных модулей
GIE=1; // разрешение глобального прерывания
INTE =1; // разрешение прерывания от внешнего источника
for (; !RA0 ;) { //цикл программы работы фрагмента
RA0 = (RB2&&RB3 && RB1&&RB6) ||(RB2&&RB3 RB1&&RA1&&RA4)|| (RB2&&RB3&& RB1&&RA1&&RA0);
}
} // конец main
interrupt isr(void)
{
GIE = 0; //запрет всех прерываний
RA0 = 0; //отключение Кп
RA2 = 1; // Включение аварийной сигнализации
TMR1IF =0; //сброс флага TMR1 - предварительный
T1CON = 0x30; // настройка таймераTMR1
For (shet = 0x00; shet<0x0F; shet ++){
TMR1IF = 0;
TMR1H = 0xFF;
TMR1L = 0xFF; //настройка таймера TMR1 на максимальную задержку
TMR1ON =1; // пуск таймера TMR1
For (; !TMR1IF;) { }
}
RA2 =0; //отключение аварийной сигнализации
INTF =0; //сброс флага внешнего прерывания.
GIE = 1; // восстановление разрешения прерываний
} //выход из прерывания
Сторожевой таймер.
Сторожевой таймер WDT предназначен для повышения надежности работы микроконтроллера. Он работает от внутреннего RC-генератора, поэтому не зависит от работы основной программы. При переполнении сторожевого таймера происходит общий сброс микроконтроллера. Для надежной работы устройства с использованием микроконтроллера необходимо в рабочей программе предусмотреть периодический сброс сторожевого таймера командой CLRWDT, предупредив таким образом непредвиденный общий сброс микроконтроллера. Сторожевой таймер при необходимости может быть включен или выключен установкой бита WDTE (2 бит в слове конфигурации, записанном по адресу 2007h) при программировании микроконтроллера. Для увеличения периода срабатывания сторожевого таймера к его входу может быть подключен предделитель (см. раздел таймер TMR0).
Бит ориентированные команды
Очистить бит номер b в регистре f (b = 0 – 7)
Установить в 1 бит номер b в регистре f
Проверить бит номер b в регистре f и пропустить следующую команду, если бит равен 0
Проверить бит номер b в регистре f и пропустить следующую команду, если бит равен 1
Подробное описание команд.
NOP Нет операции.
Синтаксис команды: [имя метки] NOP
Операнды: нет
Операция: нет
Изменяемые флаги: нет
Описание операции: нет операции
Двоичное отображение: 00 0000 0xx0 0000
Операция: (W) .XOR. k
Введение.
К устройствам электроавтоматики относятся элементы и устройства станков с ЧПУ, выполняющие отдельные (дискретные) действия по управлению процессом работы станков. К таким устройствам относятся такие, как отдельные концевые выключатели, кнопки, тумблеры, реле, электромагнитные клапаны, муфты и т.п. К электроавтоматике относятся и целые подсистемы, как нерегулируемые приводы, например, приводы инструментальных магазинов, приводы насосов систем подачи СОЖ и другие устройства.
Отличительной особенностью элементов электроавтоматики является тот факт, что они имеют только два устойчивых состояния: включено - выключено, нажата кнопка - не нажата и т.д. Поэтому состояния элементов электроавтоматики можно легко описать цифровыми кодами, например, включено устройство – «1», выключено –«0», поэтому работа таких устройств описывается математическим аппаратом, называемым Булевой алгеброй. Контроллеры электроавтоматики бывают двух видов: пассивные и активные. Пассивные контроллеры это такие контроллеры, в которых решение булевых уравнений, описывающих алгоритм работы электроавтоматики, выполняется активным элементом – процессором – не входящим в состав контроллера, например, центральным процессором УЧПУ. В активных контроллерах решение булевых уравнений производится внутренним (находящимся в контроллере) процессором.
Микроконтроллеры. Общие положения.
Электроника и микропроцессорная техника с каждым днем все глубже проникает во все сферы деятельности человека. Вся схемотехника разделяется на две большие области: аналоговую и цифровую Преимущества и недостатки этих технологий известны. Аналоговая схемотехника характеризуется максимальным быстродействием, малым потреблением энергии и малой стабильностью параметров. Цифровая схемотехника обладает прекрасной повторяемостью параметров, высокой помехозащищенностью, удобством передачи, преобразования и хранения информации. Это привело к её мощному развитию в последние годы. Первые программируемые контроллеры появились в конце 70-х годов и изначально использовались для замены традиционных устройств релейной автоматики. Программируемый контроллер это устройство, предназначенное для автоматизации наиболее часто встречающихся в промышленности комбинаторных и последовательных процессов, поэтому он представляет интерес практически для любого случая автоматизации. Примерно в тоже время появились программируемые микроконтроллеры. Все больше приборов, которые еще недавно выполнялись на отдельных логических элементах, сейчас выпускаются с использованием программируемых микропроцессоров или микроконтроллеров. Это позволило значительно сократить размеры, повысить надежность, расширить функциональные возможности выпускаемых устройств.
При разработке небольших устройств, применение микроконтроллеров предпочтительнее т.к. они обычно имеют набор дополнительных встроенных функций, которые облегчают их подключение. Например, микроконтроллер фирмы Microchip PIC16F873 имеет встроенный таймер, АЦП, счетчик импульсов, большой набор линий ввода/вывода и т.д.
Как уже было сказано выше, микроконтроллеры получили в последнее время очень широкое распространение. Они используются в разнообразных приборах, таких как:
1. Цифровой вольтметр.
2. Электронные часы с будильником.
3. Различные приборы с жидкокристаллическими дисплеями.
4. Программируемая бытовая техника.
5. Цифровой автоинформатор в общественном транспорте и т.д.
В дальнейшем будет рассказано о возможностях микроконтроллеров, и вы сами сможете оценить все преимущества, которые дает использование микроконтроллеров.
Типы микроконтроллеров
Все современные микроконтроллеров можно разделить на следующие основные типы:
1. Универсальные встраиваемые 8-разрядные микроконтроллеры.
2.16- и 32-разрядные микроконтроллеры.
3. Цифровые сигнальные процессоры (DSP)
Встраиваемые микроконтроллеры.
Промышленностью выпускается очень широкая номенклатура встраиваемых (embedded) микроконтроллеров. В этих микроконтроллерах все необходимые ресурсы (память, устройства ввода-вывода и т.д.) располагаются на одном кристалле с процессорным ядром. Все, что Вам необходимо сделать - это подать питание и тактовые сигналы. Встраиваемые микроконтроллеры могут базироваться на существующем микропроцессорном ядре или на процессоре, разработанном специально для данного микроконтроллера. Это означает, что существует большое разнообразие функционирования даже среди устройств, выполняющих одинаковые задачи.
Основное назначение встраиваемых микроконтроллеров - обеспечить с помощью недорогих средств гибкое (программируемое) управление объектами и связь с внешними устройствами. Эти микроконтроллеры не предназначены для реализации комплекса сложных функций, но они способны обеспечить эффективное управление во многих областях применения. Общая структурная схема микроконтроллера показана на рис.1.
Встраиваемые микроконтроллеры содержат значительное число вспомогательных устройств, благодаря чему обеспечивается их включение в реализуемую систему с использованием минимального количества дополнительных компонентов. В состав этих микроконтроллеров обычно входят:
- Схема начального запуска процессора (Reset)
- Генератор тактовых импульсов
- Центральный процессор
- Память программ (E(E)P)ROM и программный интерфейс
- Память данных RAM
- Средства ввода-вывода данных
- Функциональные блоки: таймеры, АЦП, порты связи и т.д.
Порты ввода / вывода |
ОЗУ |
Процессор |
Память программ |
Блок управления питанием |
Блок управления сбросом |
Блок синхронизации и сторожевой таймер |
Входные и выходные сигналы |
Источник питания |
Сигнал сброса или включение питания |
Тактовые сигналы |
Рис.1. Структурная схема встраиваемого микроконтороллера.
Более сложные встраиваемые микроконтроллеры могут дополнительно реализовать следующие возможности:
- Встроенный монитор/отладчик программ
- Внутренние средства программирования памяти программ (ROM)
- Обработка прерываний от различных источников
- Аналоговый ввод-вывод
- Последовательный ввод-вывод (синхронный и асинхронный)
- Параллельный ввод-вывод (включая интерфейс с компьютером)
- Подключение внешней памяти (микропроцессорный режим)
Все эти возможности значительно увеличивают гибкость применения микроконтроллеров и делают более простым процесс разработки систем на их основе. Следует заметить, что для реализации этих возможностей в большинстве случаев требуется расширение функций внешних выводов.
Типичные значения максимальной частоты тактовых сигналов составляют для различных микроконтроллеров 10-20 МГц. Главным фактором, ограничивающим их скорость, является время доступа к памяти, применяемой в микроконтроллерах. Однако для типичных применений это ограничение не является существенным.
Дата: 2019-04-23, просмотров: 294.