Встраиваемые микроконтроллеры
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Введение.

К устройствам электроавтоматики относятся элементы и устройства станков с ЧПУ, выполняющие отдельные (дискретные) действия по управлению процессом работы станков. К таким устройствам относятся такие, как отдельные концевые выключатели, кнопки, тумблеры, реле, электромагнитные клапаны, муфты и т.п. К электроавтоматике относятся и целые подсистемы, как нерегулируемые приводы, например, приводы инструментальных магазинов, приводы насосов систем подачи СОЖ и другие устройства.

Отличительной особенностью элементов электроавтоматики является тот факт, что они имеют только два устойчивых состояния: включено - выключено, нажата кнопка - не нажата и т.д. Поэтому состояния элементов электроавтоматики можно легко описать цифровыми кодами, например, включено устройство – «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 не используется.

Бит 2GO/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).

 

Бит ориентированные команды

19 BCF   f,b         

Очистить бит номер b в регистре f (b = 0 – 7)

01 00bb bfff ffff 20 BSF    f,b          

Установить в 1 бит номер b в регистре f

01 01bb bfff ffff 21 BTFSC f,b         

Проверить бит номер b в регистре f и пропустить следующую команду, если бит равен 0

01 10bb bfff ffff 22 BTFSS f,b         

Проверить бит номер b в регистре f и пропустить следующую команду, если бит равен 1

01 11bb bfff ffff

Подробное описание команд.

 

 

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, просмотров: 255.