Микроконтроллеры PIC это простые и высокопроизводительные микроконтроллеры с базовой RISC – архитектурой. Несомненное достоинство семейства – минимальное число команд – от 33, большинство из которых выполняется за 4 такта работы процессора. Тактовая частота микроконтроллеров колеблется от 10 до 40 МГц. Общие особенности PIC – контроллеров: внутренний сброс по включению питания, наличие сторожевого таймера, защита памяти программ от несанкционированного считывания, мощные линии ввода – вывода (до 25 мА), возможность внутрисхемного программирования.
Большее количество тактов, затрачиваемых на выполнение одной команды, в достатке компенсируется большими тактовыми частотами PIC – контроллеров. Несомненными достоинствами этих микроконтроллеров являются небольшое количество команд и мощные линии ввода – вывода. Поэтому выбор останавливается на PIC – микроконтроллерах.
Выбор микроконтроллера из семейства PIC контроллеров.
Для сравнения берется три основных семейства PIC – контроллеров: PIC12Cxxx, PIC16F84x и PIC18Fxx.
Микроконтроллеры PIC12Cxxx имеют следующие технические характеристики:
1. Напряжение питания 2,5В.
2. 6(5) линий ввода – вывода.
3. Наличие АЦП в кристаллах PIC12C6xx.
4. Повышенная длина команд (до 14 бит).
5. Тактовая частота – до 10 МГц.
6. Низкая стоимость.
Микроконтроллеры PIC16F84x имеют следующие технические характеристики:
1. Наличие Flash – памяти программ.
2. Отсутствие АЦП.
3. Тактовая частота – до 20 МГц.
4. 13 линий ввода – вывода.
5. Напряжение питания – от 4 до 6В.
6. Небольшая стоимость.
Микроконтроллеры PIC18Fxxx имеют следующие технические характеристики:
1. Расширенное ядро RISC.
2. Наличие Flash – памяти программ.
3. Тактовая частота – до 40 МГц.
4. До 34 линий ввода – вывода.
5. Наличие АЦП либо ЦАП.
6. Высокая стоимость.
Исходя из данного сравнения, оптимальным семейством микроконтроллеров является семейство PIC16F84x, так как несомненными плюсами являются: наличие Flash – памяти, отсутствие ЦАП и АЦП, большое количество линий ввода – вывода, небольшая стоимость. Из всего семейства, оптимальным для бесконтактной системы зажигания является микроконтроллер PIC16F844I/P (рис. 2.5). Здесь PIC16F84 марка микроконтроллера, 4 тактовая частота микроконтроллера, I индустриальный диапазон рабочих температур (от –40 до +85 градусов Цельсия), P корпус PDIP для монтажа в отверстия.
Рисунок 2.6 Условное обозначение микроконтроллера.
Таблица 1 назначение выводов микроконтроллера PIC16F844I/P.
Обозначение | № | Тип (I/O/P) | Тип буфера | Назначение |
OSC1/CLKIN | 16 | I | ST/CMOS | Вход для подключения кварцевого резонатора, либо RC – цепи, либо вход для внешнего тактового генератора. |
OSC2/CLKOUT | 15 | O | Выход для подключения кварцевого резонатора в режиме в режиме работы с кварцем, в режиме RC – генератора на выходе присутствуют импульсы с частотой 1/4 от OSC1 | |
MCLR | 4 | I/P | ST | Сброс по низкому уровню но входе. При программировании кристалла – вход напряжения программирования. |
RA0 RA1 RA2 RA3 RA4/T0CKI | 17 18 1 2 3 | I/O I/O I/O I/O I/O | TTL TTL TTL TTL ST | Выводы двунаправленного порта А RA4/T0CKI может быть настроен как вход импульсов для таймера – счетчика TMR0. Выход с открытым стоком. |
RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 | 6 7 8 9 10 11 12 13 | I/O I/O I/O I/O I/O I/O I/O I/O | TTL/ST TTL TTL TTL TTL TTL TTL/ST TTL/ST | Выводы двунаправленного порта В. К выводам порта могут быть программно подключены внутренние подтягивающие резисторы Vdd. RB0/INT может быть также программно настроен как вход внешнего прерывания RB4 – RB7 могут быть также программно настроены как входы прерывания по изменению уровня на на любом из этих входов. Направление изменения задается программно. При программировании кристалла RB6 используется как тактовый, RB7 как вход/выход данных. |
Vss | 5 | P | Общий провод. | |
Vdd | 14 | P | Положительное напряжение питания |
Обозначения. I – вход, O – выход, I/O вход/выход, P – вывод питания, TTL – стандартный TTL вход, ST – вход с триггером Шмидта.
Таблица 2. Система команд микроконтроллера PIC16F844I/P.
Команда. | Описание команды. |
ADDWF f, d | Сложение W и f |
ANDWF f, d | Выполняется побитное “И” содержимого регистров W и f. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре f. |
CLRF f | Очистить содержимое регистра f и установить флаг Z. |
CLRW | Очистить содержимое регистра W и установить флаг Z. |
COMF f, d | Инвертировать все биты в регистре f. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре f. |
DECF f, d | Декремент содержимого регистра f. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре f. |
DECFSZ f, d | Вычесть 1 из f и пропустить если 0. Декремент содержимого регистра f с пропуском, если 0. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре f. Если результат не равен 0 – исполняется следующая инструкция. Если результат = 0, то следующая инструкция не выполняется (пропускается, вместо нее выполняется “виртуальный” NOP), а команда выполняется за 2 цикла. |
INCF f, d | Прибавить 1 к f. Инкремент содержимого регистра f. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре f. |
INCFSZ f, d | Прибавить 1 к f и пропустить если 0. Инкремент содержимого регистра f с пропуском, если 0. Если d=0, результат сохраняется в регистре W. Если d=1, результат сохраняется в регистре f. Если результат не равен 0 – исполняется следующая инструкция. Если результат = 0, то следующая инструкция не выполняется (пропускается, вместо нее выполняется “виртуальный” NOP), а команда выполняется за 2 цикла. |
IORWF f,d | Побитное “ИЛИ” содержимого регистров W и f. Если d=0 – результат сохраняется в регистре W. Если d=1 – результат сохраняется в регистре f. |
MOVF f,d | Содержимое регистра f пересылается в регистр адресата. Если d=0 – значение сохраняется в регистре W. Если d=1 – значение сохраняется в регистре f. d=1 используется для проверки содержимого f на ноль. |
MOVWF f | Переслать содержимое W в f. |
NOP | Нет операции. |
RLF f, d | Выполняется циклический сдвиг влево содержимого регистра f через бит C регистра STATUS (через перенос). Если d=0 – результат сохраняется в регистре W. Если d=1 – результат сохраняется в регистре f. |
RRF f, d | Выполняется циклический сдвиг вправо содержимого регистра f через бит C регистра STATUS (через перенос). Если d=0 – результат сохраняется в регистре W. Если d=1 – результат сохраняется в регистре f. |
SUBWF f, d | Вычетание содержимого регистра W из регистра f. Если d=0 – результат сохраняется в регистре W. Если d=1 – результат сохраняется в регистре f. |
SWAPF f, d | Поменять местами старший и младший полубайты регистра f. Если d=0 – результат сохраняется в регистре W. Если d=1 – результат сохраняется в регистре f. |
XORWF f, d | Сравнение содержимого регистров W и f (проверка на “одинаковость”). Побитное “Исключающее “ИЛИ” содержимого регистров W и f. Если d=0 – результат сохраняется в регистре W. Если d=1 – результат сохраняется в регистре f. |
BCF f, b | Установить в 0 бит b регистра f. |
BSF f, bf | Установить в 1 бит b регистра f |
BTFSC f, b | Проверить бит b в регистре f. Если бит b в регистре f =1, то исполняется следующая инструкция. Если бит b в регистре f =0, то следующая инструкция не выполняется (пропускается, вместо нее выполняется “виртуальный” NOP), а команда выполняется за 2 цикла. |
BTFSS f, b | Проверить бит b в регистре f. Если бит b в регистре f=0, исполняется следующая инструкция. Если бит b в регистре f=1, то следующая инструкция не выполняется (пропускается, вместо нее выполняется “виртуальный” NOP), а команда выполняется за 2 цикла. |
ADDLW k | Содержимое регистра W складывается с 8 – разрядной константой k. Результат сохраняется в регистре W. |
SUBLW k | Вычесть содержимое регистра W из 8 – разрядной константы k. Результат сохраняется в регистре W. |
MOVLW k | Переслать константу k в регистр W. В неиспользуемых битах ассемблер устанавливает 0. |
ANDLW k | Выполняется побитное “И” содержимого регистра W и 8 – разрядной константы k. Результат сохраняется в регистре W. |
IORLW k | Выполняется побитное “ИЛИ” содержимого регистра W и 8 – разрядной константы k. Результат сохраняется в регистре W. |
XORLW k | Сравнение содержимого регистра W и константы (проверка на “одинаковость”). Выполняется побитное “Исключающее ИЛИ” содержимого регистра W и 8 – разрядной константы k. Результат сохраняется в регистре W. |
CALL | Выполнить условный переход (переход по стеку). Адрес следующей инструкции (PC+1) “загружается” в вершину стека (TOS). 11 бит адреса “загружаются” из кода команды в счетчик команд PC<10:0>. 2 старших бита “загружаются” в счетчик команд PC<12:11> из регистра PCLATH. |
GOTO k | Выполнить безусловный переход (стек не задействован). 11 бит адреса “загружаются” из кода команды в счетчик команд PC<10:0>. 2 старших бита “загружаются” в счетчик команд PC<12:11> из регистра PCLATH. |
RETURN | Возврат из подпрограммы (по стеку). Вершина стека (TOS) “выгружается” в счетчик команд PC. |
RETLW k | Возврат из подпрограммы (по стеку). В регистр W загружается 8разрядная константа. Вершина стека (TOS) “выгружается” в счетчик команд PC. |
RETFIE | Возврат из подпрограммы обработки прерываний (по стеку). Вершина стека (TOS) загружается в счетчик команд PC. Осуществляется предварительное разрешение прерываний (бит №7 регистра INTCON {GIE} устанавливается в 1). |
CLRWDT | Сброс WDT и предделителя (если он подключен к WDT). В регистре STATUS, биты (TO) и (PD) устанавливаются в 1. Коэффициент деления предделителя (если он подключен к WDT) не меняется. |
SLEEP | Переход в “спящий режим”. Сброс флага включения питания (PD) в 0. Установка флага переполнения WDT (TO) в 1. Сброс WDT и его предделителя. Перевод микроконтроллера в режим SLEEP и выключение тактового генератора. |
В данной системе применяется датчик Холла марки Honeywell 2AV50A (2AV54). Он специально предназначен для бесконтактных систем зажигания. Диапазон рабочих температур датчика от –40 до +150 градусов Цельсия. Разброс напряжения питания от 4,5 до 16В. Так же датчик имеет кронштейны, позволяющие надежно закрепить его.