Pic16c505 применение как подключить

от admin

Datasheet PIC16C505-04I/P — Microchip Даташит 8- бит микроконтроллеры (MCU) 1.5 Кб 72 RAM 12 I/O 4 МГц Ind Temp PDIP14 — Даташит

Краткое содержание документа:
PIC16C505
14-Pin, 8-Bit CMOS Microcontroller
Device included in this Data Sheet:
PIC16C505
Special Microcontroller Features:

  • Supply Voltage — Max: 5.5 В
  • Supply Voltage — Min: 3 В
  • Вид монтажа: Through Hole
  • Встроенный в чип АЦП: нет
  • Высота: 3.3 мм
  • Длина: 19.05 мм
  • Количество линий ввода/вывода: 11
  • Количество таймеров: 1
  • Рабочее напряжение питания: 3 В .

Микроконтроллеры PIC для начинающих

На современном рынке есть ряд семейств и серий микроконтроллеров от разных производителей, среди них можно выделить AVR, STM32 и PIC. Каждое из семейств нашло свою сферу применения. В этой статье я расскажу начинающим о микроконтроллерах PIC, а именно, что это такое и что нужно знать для начала работы с ними.

Что такое PIC

PIC – это название серии микроконтроллеров, которые производятся компанией Microchip Technology Inc (США). Название PIC происходит от Peripheral Interface Controller.

Микроконтроллеры PIC имеют RISC-архитектуру. RISC – сокращённый набор команд, используется также в процессорах для мобильных устройств. Есть целый ряд примеров её использования: ARM, Atmel AVR и другие.

Компания Microchip в 2016 году купила Atmel – производителя контроллеров AVR. Поэтому на официальном сайте представлены микроконтроллеры семейства и PIC и AVR.

Семейства

Среди 8-битных микроконтроллеров PIC она состоит из 3-х семейств, которые отличаются архитектурой (разрядностью и набором команд).

Baseline (PIC10F2xx, PIC12F5xx, PIC16F5x, PIC16F5xx) ;

Mid-range (PIC10F3xx, PIC12F6xx, PIC12F7xx, PIC16F6xx, PIC16F7xx, PIC16F8xx, PIC16F9xx) ;

Enhanced Mid-range (PIC12F1xxx, PIC16F1xxx) ;

High-end или PIC18 (18Fxxxx, 18FxxJxx and 18FxxKxx).

Характеристики, которых приведены в таблице ниже.

Кроме 8 битных микроконтроллеров компания Microchip производит 16-битные:

DsPIC30/33F для обработки сигналов.

Представители 16-битного семейства работают со скоростью от 16 до 100 MIPS (выполнено миллионов инструкций в секунду). Стоит отметить и особенности:

машинный цикл – 2 такта;

разрядность АЦП – 16 бит;

поддерживают ряд протоколов связи (UART, IrDA, SPI, I2S™, I2C, USB, CAN, LIN and SENT), ШИМ и прочее.

Также есть семейство 32 битных микроконтроллеров – PIC32MX, основные особенности:

работают на частоте до 120 мГц;

выполняют до 150 MIPS;

АЦП: 10-бит, 1 Msps (скорость квантования), до 48 каналов.

С какого PIC начать?

Новичкам стоит начать осваивать микроконтроллеры PIC с 8-битной линейки. Вообще, производитель заявляет о том, что особенностью всего семейства является лёгкая переносимость программ с одного семейства на другое и совпадения цоколевки ряда моделей.

Одним из популярнейших в среде радиолюбителей микроконтроллеров является PIC16f628A. Его технические характеристики такие:

Есть встроенный тактовый генератор. Вы можете настроить для работы с частотой 4 или 8 МГц;

18 пинов, из них 16 – ввод/вывод, а 2 – питание;

Для работы на частотах до 20 МГц можно подключить кварцевый резонатор, но в этом случае на ввод/вывод останется не 16, а 14 ног;

В маркировке есть буква F, это значит, что используется FLASH-память, объёмом в 2048 слов;

14-битные инструкции, 35 штук;

4 аналоговых входа;

На входах PORTB есть подтягивающие резисторы;

Два 8-битных таймера и один 16-битный;

Машинный цикл – 4 такта кварцевого резонатора или внутреннего генератора);

USART – последовательный порт;

внутренний источник опорного напряжения;

питается от 3.3 до 5 В.

Причинами популярности является низкая цена и возможность тактирования от внутреннего генератора.

Какая цоколевка у 16f628 изображено ниже:

Блочная внутренняя схема этого микроконтроллера изображена ниже.

На что следует обратить внимание на схеме в первую очередь?

У этого микроконтроллера есть два порта PORTA и PORTB. Каждый пин, каждого из них может использоваться как вход и выход, а также для подключения периферии или задействования других модулей микроконтроллера.

Рассмотрим эту часть схемы крупно.

Например, порты RB0-RB3 – могут выступать в роли аналоговых. К RA6, RA7 в случае необходимости подключается источник тактирования (кварцевый резонатор). Сами же выводы микроконтроллера настраиваются в режим входа/выхода с помощью регистра TRIS.

Для этого есть команды типа:

TRISA = 0; // Все выводы порта А устанавливаются как выходы
TRISB = 0xff; // Все выводы порта B назначаются как входы
TRISA0 = 1; // Так назначается отдельный пин как вход (1) или выход (0)
TRISA5 = 1 ; // здесь 5 вывод порта А – назначен входом

Вообще режимы работы, включение WDT (сторожевого таймера) выбор источника тактирования микроконтроллера и прочее настраивается с помощью регистров специального назначения — SFR, а память и данные хранятся в GFR – простыми словами это статическое ОЗУ.

Для удобства ниже приведены эти таблицы в виде картинок (нумерация регистров, как и всё в цифровой электронике начинается с 0, поэтому номер четвертого – 3).

Как подключить и на каком языке программировать?

Чтобы запустить этот микроконтроллер достаточно подать плюс на Vdd и минус на Vss. Если нужен кварцевый резонатор, то он подключается к выводам 16 и 15 (OSC1 и OSC2) микроконтроллера PIC16f628, для других контроллеров с большим или меньшим числом выводов – смотрите в datasheet. Но этот момент нужно указывать при программировании и прошивке.

Кстати о переносимости и совпадении цоколевки – на 16f84A – она аналогична, и на многих других.

Фрагмент схемы с подключенным к pic16f628a внешним резонатором:

Есть два основных языка для программирования микроконтроллеров PIC – это assembler и C, есть и другие, например PICBasic и т.д. Еще можно выделить упрощенный язык программирования JAL (just another language).

Для примера ниже приведена программа для «мигания светодиодом» — своего рода «Hello World» для микроконтроллера PIC на языке C.

В 1 строке подключается библиотека микроконтроллеров PIC, далее подключается библиотека программы задержки.

В функции main(void) в начале устанавливаются начальные параметры, подобно тому как мы это делали в функции Void setup () – в статьях об ардуино. Далее в строках 11-16 объявляется бесконечный цикл while(1), в ходе которого и выполняется программа «мигания светодиодом».

В примере состояние порта постоянно инвертируется, т.е. если он был в «0», то перейдет в «1» и наоборот. На C для PIC есть следующие команды управления команды:

PORTA = 0; // переводит все пины порта А в низкий уровень (лог. 0)
PORTB = 0xff; // переводит все пины порта B в высокий уровень (лог. 1)
RB5 = 1; // На пятом выводе порта B высокий уровень

А так выглядит та же программа, но уже на языке JAL, я перевел на русский язык комментарии от разработчиков встроенных примеров в JALedit (среда разработки).

Возникает соблазн выбрать JAL, и вам он может показаться проще. Безусловно на нём можно реализовать любые проекты, но с точки зрения пользы для вас как для специалиста – это бесполезный язык. Значительно больших результатов вы добьетесь, изучая синтаксис и принципы программирования на языке C (большая часть популярных сейчас языков C-подобны) или на Assembler – это низкоуровневый язык, который заставит вас понимать принцип работы устройства и что происходит в программе в каждый конкретный момент времени.

В чем работать

Если сказать совсем обобщенно для работы с любыми микроконтроллерами нужно:

1. Текстовый редактор.

3. Программа для загрузки прошивки в микроконтроллер.

И я даже читал старые учебники, где автор, работая из-под DOS писал код, компилировал и прошивал его разными средствами. Сейчас же под все популярные операционные системы есть среды для разработки, как узкоспециализированные (для конкретного семейства микроконтроллеров или семейств от одного производителя) так и универсальные (либо содержат все необходимые инструменты, либо они подключаются в виде плагинов).

Например, в цикле статей об Arduino мы рассматривали среду Arduino IDE в ней же мы и код писали и с её помощью «заливали» прошивку в «камень». Для микроконтроллеров PIC есть такие программы, как:

MPASM — используется для разработки на языке Assembler от фирмы Microchip ;

MPLAB — также IDE от Microchip для PIC-контроллеров. Состоит из множества блоков для тестирования, проверки, работы с кодом и компиляции программ и загрузки в микроконтроллер. Также есть версия MPLAB X IDE – отличается большим функционалом и построена на базе платформы NetBeans ;

MikroC — универсальная среда (не только для ПИКов) для разработки. Как видно из названия «заточена» под программирование на C, а также есть такие программы как MikroBasic и MikroPascal, для соответствующих языков ;

JALedit — подходит для языка JAL, о котором мы упоминали выше ;

И ряд других менее известных.

Как прошивать микроконтроллер?

Для PIC-микронотроллеров есть ряд программаторов. Официальным считается PICkit. Их 4 версии. Но можно прошивать и универсальными, например, TL866 (он поддерживает почти всё, что может понадобится начинающему радиолюбителю, при этом очень дешевый).

Также в сети есть ряд различных схем программаторов для ПИКов, как для работы через COM-порт:

Так и через USB (на самом деле тоже com, только через преобразователь на ИМС MAX232).

Заключение

Микроконтроллеры PIC16 подходят для простых проектов, типа простой автоматики, вольтметров, термометров и прочих мелочей. Но это не значит, что нельзя делать на этом семействе сложные и большие проекты, я привел пример того для чего чаще всего их используют. Для общего представления рекомендую посмотреть несколько видео:

В одной статье рассматривать темы о том, как программировать микроконтроллеры, неважно какого семейства, безсмысленно. Поскольку это очень большой объём информации. Для начинающих советую к прочтению:

Катцен С. — PIC-микроконтроллеры. Все что вам необходимо знать;

Кёниг А. — Полное руководство по PIC микроконтроллерам;

Шпак Ю.А. — Программирование на языке С для AVR и PIC микроконтроллеров;

Магда Ю.С. — Микроконтроллеры PIC: архитектура и программирование;

Яценков В.С. — Микроконтроллеры Microchip. Практическое руководство.

Нужно дизассемблировать прошивку PIC16C505. Вопрос к PICоведам

Коллеги,
помощь нужна.
Есть прошивка, нужно понять что и как она делает.
а от PIC я далек.

работает с внутр. генератора.

По моему стоит бит защиты. Смысл имеют первые 64 байта.

у них защита легко снимается, а первые 64слова не имеют защиты.

AnSi: у них защита легко снимается
а можно чуток по-подробнее?

вот скрин с пиккита

AnSi: у них защита легко снимается
И мне интересно.

IC-Prog имеет встроеный дизассемблер, главное прочитать, а потом потихоньку разбираться. если действительно это вся программа, значит писали на ассемблере
Программу загрузить в IC-prog, переключить в режим ассемберных кодов, распечатать-записать, далее можно разбираться с карандашиком, а можно попытаться загрузить асемблерный текст в MPLAB и эмулировать работу программы.

Полученно с помощью MPlab

Line Address Opcode Disassembly

1 000 025 MOVWF 0x5
2 001 A4A GOTO 0x4a
3 002 E03 ANDLW 0x3
4 003 1E2 ADDWF 0x2, F
5 004 8EE RETLW 0xee
6 005 8FC RETLW 0xfc
7 006 8DE RETLW 0xde
8 007 E03 ANDLW 0x3
9 008 1E2 ADDWF 0x2, F
10 009 8D0 RETLW 0xd0
11 00A 8C2 RETLW 0xc2
12 00B 8E0 RETLW 0xe0
13 00C E03 ANDLW 0x3
14 00D 1E2 ADDWF 0x2, F
15 00E 836 RETLW 0x36
16 00F 83A RETLW 0x3a
17 010 838 RETLW 0x38
18 011 667 BTFSC 0x7, 0x3
19 012 800 RETLW 0
20 013 3F0 INCFSZ 0x10, F
21 014 A11 GOTO 0x11
22 015 2B1 INCF 0x11, F
23 016 004 CLRWDT
24 017 771 BTFSS 0x11, 0x3
25 018 A11 GOTO 0x11
26 019 800 RETLW 0
27 01A 064 CLRF 0x4
28 01B 5A4 BSF 0x4, 0x5
29 01C 071 CLRF 0x11
30 01D 070 CLRF 0x10
31 01E 212 MOVF 0x12, W
32 01F 902 CALL 0x2
33 020 007 TRIS 0x7
34 021 212 MOVF 0x12, W
35 022 907 CALL 0x7
36 023 127 IORWF 0x7, F
37 024 911 CALL 0x11
38 025 C01 MOVLW 0x1
39 026 167 ANDWF 0x7, F
40 027 CC4 MOVLW 0xc4
41 028 007 TRIS 0x7
42 029 210 MOVF 0x10, W
43 02A 1F4 ADDWF 0x14, F
44 02B 603 BTFSC 0x3, 0
45 02C 2B5 INCF 0x15, F
46 02D 211 MOVF 0x11, W
47 02E 1F5 ADDWF 0x15, F
48 02F 2F3 DECFSZ 0x13, F
49 030 800 RETLW 0
50 031 C04 MOVLW 0x4
51 032 033 MOVWF 0x13
52 033 403 BCF 0x3, 0
53 034 335 RRF 0x15, F
54 035 334 RRF 0x14, F
55 036 2F3 DECFSZ 0x13, F
56 037 A33 GOTO 0x33
57 038 212 MOVF 0x12, W
58 039 90C CALL 0xc
59 03A 024 MOVWF 0x4
60 03B 215 MOVF 0x15, W
61 03C 020 MOVWF 0
62 03D 2A4 INCF 0x4, F
63 03E 214 MOVF 0x14, W
64 03F 020 MOVWF 0
65 040 000 NOP
.
.
1023 3FE 000 NOP
1024 3FF C9C MOVLW 0x9c ; калиб. конст.

Cheeeper: а можно чуток по-подробнее?

Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем.

Pic16c505 применение как подключить

На современном рынке есть ряд семейств и серий микроконтроллеров от разных производителей, среди них можно выделить AVR, STM32 и PIC. Каждое из семейств нашло свою сферу применения. В этой статье я расскажу начинающим о микроконтроллерах PIC, а именно, что это такое и что нужно знать для начала работы с ними.

Микроконтроллеры PIC для начинающих

Что такое PIC

PIC – это название серии микроконтроллеров, которые производятся компанией Microchip Technology Inc (США). Название PIC происходит от Peripheral Interface Controller.

Микроконтроллеры PIC имеют RISC-архитектуру. RISC – сокращённый набор команд, используется также в процессорах для мобильных устройств. Есть целый ряд примеров её использования: ARM, Atmel AVR и другие.

Компания Microchip в 2016 году купила Atmel – производителя контроллеров AVR. Поэтому на официальном сайте представлены микроконтроллеры семейства и PIC и AVR.

Микроконтроллер PIC16F1xxx

Семейства

Среди 8-битных микроконтроллеров PIC она состоит из 3-х семейств, которые отличаются архитектурой (разрядностью и набором команд).

Baseline (PIC10F2xx, PIC12F5xx, PIC16F5x, PIC16F5xx) ;

Mid-range (PIC10F3xx, PIC12F6xx, PIC12F7xx, PIC16F6xx, PIC16F7xx, PIC16F8xx, PIC16F9xx) ;

Enhanced Mid-range (PIC12F1xxx, PIC16F1xxx) ;

High-end или PIC18 (18Fxxxx, 18FxxJxx and 18FxxKxx).

Сравнение семейств микроконтроллеров

Характеристики, которых приведены в таблице ниже.

Характеристики микроконтроллеров PIC

Кроме 8 битных микроконтроллеров компания Microchip производит 16-битные:

DsPIC30/33F для обработки сигналов.

Представители 16-битного семейства работают со скоростью от 16 до 100 MIPS (выполнено миллионов инструкций в секунду). Стоит отметить и особенности:

машинный цикл – 2 такта;

разрядность АЦП – 16 бит;

поддерживают ряд протоколов связи (UART, IrDA, SPI, I2S™, I2C, USB, CAN, LIN and SENT), ШИМ и прочее.

Также есть семейство 32 битных микроконтроллеров – PIC32MX, основные особенности:

работают на частоте до 120 мГц;

выполняют до 150 MIPS;

АЦП: 10-бит, 1 Msps (скорость квантования), до 48 каналов.

С какого PIC начать?

Новичкам стоит начать осваивать микроконтроллеры PIC с 8-битной линейки. Вообще, производитель заявляет о том, что особенностью всего семейства является лёгкая переносимость программ с одного семейства на другое и совпадения цоколевки ряда моделей.

Одним из популярнейших в среде радиолюбителей микроконтроллеров является PIC16f628A. Его технические характеристики такие:

Есть встроенный тактовый генератор. Вы можете настроить для работы с частотой 4 или 8 МГц;

18 пинов, из них 16 – ввод/вывод, а 2 – питание;

Для работы на частотах до 20 МГц можно подключить кварцевый резонатор, но в этом случае на ввод/вывод останется не 16, а 14 ног;

В маркировке есть буква F, это значит, что используется FLASH-память, объёмом в 2048 слов;

14-битные инструкции, 35 штук;

4 аналоговых входа;

На входах PORTB есть подтягивающие резисторы;

Два 8-битных таймера и один 16-битный;

Машинный цикл – 4 такта кварцевого резонатора или внутреннего генератора);

128 байт EEPROM;

USART – последовательный порт;

внутренний источник опорного напряжения;

питается от 3.3 до 5 В.

Причинами популярности является низкая цена и возможность тактирования от внутреннего генератора.

Какая цоколевка у 16f628 изображено ниже:

Цоколевка у 16f628

Блочная внутренняя схема этого микроконтроллера изображена ниже.

Структура микроконтроллера 16f628

Научитесь разрабатывать устройства на базе микроконтроллеров и станьте инженером умных устройств с нуля: Инженер умных устройств

На что следует обратить внимание на схеме в первую очередь?

У этого микроконтроллера есть два порта PORTA и PORTB. Каждый пин, каждого из них может использоваться как вход и выход, а также для подключения периферии или задействования других модулей микроконтроллера.

Рассмотрим эту часть схемы крупно.

Порты МК

Например, порты RB0-RB3 – могут выступать в роли аналоговых. К RA6, RA7 в случае необходимости подключается источник тактирования (кварцевый резонатор). Сами же выводы микроконтроллера настраиваются в режим входа/выхода с помощью регистра TRIS.

Для этого есть команды типа:

TRISA = 0; // Все выводы порта А устанавливаются как выходы
TRISB = 0xff; // Все выводы порта B назначаются как входы
TRISA0 = 1; // Так назначается отдельный пин как вход (1) или выход (0)
TRISA5 = 1 ; // здесь 5 вывод порта А – назначен входом

Вообще режимы работы, включение WDT (сторожевого таймера) выбор источника тактирования микроконтроллера и прочее настраивается с помощью регистров специального назначения — SFR, а память и данные хранятся в GFR – простыми словами это статическое ОЗУ.

В официальном Datasheet, на страницах 18-21 вы найдете 4 банка памяти регистров специального назначения SFR и регистров общего назначения GFR. Знание регистров важно, поэтому распечатайте и выучите указанные страницы из Datasheet .

Для удобства ниже приведены эти таблицы в виде картинок (нумерация регистров, как и всё в цифровой электронике начинается с 0, поэтому номер четвертого – 3).

Регистры специального назначения

Регистры специального назначения

Регистры специального назначения

Регистры специального назначения

Как подключить и на каком языке программировать?

Чтобы запустить этот микроконтроллер достаточно подать плюс на Vdd и минус на Vss. Если нужен кварцевый резонатор, то он подключается к выводам 16 и 15 (OSC1 и OSC2) микроконтроллера PIC16f628, для других контроллеров с большим или меньшим числом выводов – смотрите в datasheet. Но этот момент нужно указывать при программировании и прошивке.

Кстати о переносимости и совпадении цоколевки – на 16f84A – она аналогична, и на многих других.

Подключение кварцевого резонатора

Фрагмент схемы с подключенным к pic16f628a внешним резонатором:

Фрагмент схемы с подключенным к pic16f628a внешним резонатором

Есть два основных языка для программирования микроконтроллеров PIC – это assembler и C, есть и другие, например PICBasic и т.д. Еще можно выделить упрощенный язык программирования JAL (just another language).

Для примера ниже приведена программа для «мигания светодиодом» — своего рода «Hello World» для микроконтроллера PIC на языке C.

Пример программы микроконтроллера PIC на языке C

В 1 строке подключается библиотека микроконтроллеров PIC, далее подключается библиотека программы задержки.

В функции main(void) в начале устанавливаются начальные параметры, подобно тому как мы это делали в функции Void setup () – в статьях об ардуино. Далее в строках 11-16 объявляется бесконечный цикл while(1), в ходе которого и выполняется программа «мигания светодиодом».

В примере состояние порта постоянно инвертируется, т.е. если он был в «0», то перейдет в «1» и наоборот. На C для PIC есть следующие команды управления команды:

PORTA = 0; // переводит все пины порта А в низкий уровень (лог. 0)
PORTB = 0xff; // переводит все пины порта B в высокий уровень (лог. 1)
RB5 = 1; // На пятом выводе порта B высокий уровень

А так выглядит та же программа, но уже на языке JAL, я перевел на русский язык комментарии от разработчиков встроенных примеров в JALedit (среда разработки).

Пример программы на языке JAL

Возникает соблазн выбрать JAL, и вам он может показаться проще. Безусловно на нём можно реализовать любые проекты, но с точки зрения пользы для вас как для специалиста – это бесполезный язык. Значительно больших результатов вы добьетесь, изучая синтаксис и принципы программирования на языке C (большая часть популярных сейчас языков C-подобны) или на Assembler – это низкоуровневый язык, который заставит вас понимать принцип работы устройства и что происходит в программе в каждый конкретный момент времени.

В чем работать

Если сказать совсем обобщенно для работы с любыми микроконтроллерами нужно:

1. Текстовый редактор.

3. Программа для загрузки прошивки в микроконтроллер.

И я даже читал старые учебники, где автор, работая из-под DOS писал код, компилировал и прошивал его разными средствами. Сейчас же под все популярные операционные системы есть среды для разработки, как узкоспециализированные (для конкретного семейства микроконтроллеров или семейств от одного производителя) так и универсальные (либо содержат все необходимые инструменты, либо они подключаются в виде плагинов).

Например, в цикле статей об Arduino мы рассматривали среду Arduino IDE в ней же мы и код писали и с её помощью «заливали» прошивку в «камень». Для микроконтроллеров PIC есть такие программы, как:

MPASM — используется для разработки на языке Assembler от фирмы Microchip ;

MPLAB — также IDE от Microchip для PIC-контроллеров. Состоит из множества блоков для тестирования, проверки, работы с кодом и компиляции программ и загрузки в микроконтроллер. Также есть версия MPLAB X IDE – отличается большим функционалом и построена на базе платформы NetBeans ;

MikroC — универсальная среда (не только для ПИКов) для разработки. Как видно из названия «заточена» под программирование на C, а также есть такие программы как MikroBasic и MikroPascal, для соответствующих языков ;

JALedit — подходит для языка JAL, о котором мы упоминали выше ;

И ряд других менее известных.

MPLAB IDE

Как прошивать микроконтроллер?

Для PIC-микронотроллеров есть ряд программаторов. Официальным считается PICkit. Их 4 версии. Но можно прошивать и универсальными, например, TL866 (он поддерживает почти всё, что может понадобится начинающему радиолюбителю, при этом очень дешевый).

Программаторы для PIC-микронотроллеров

Также в сети есть ряд различных схем программаторов для ПИКов, как для работы через COM-порт:

Схема программатора

Так и через USB (на самом деле тоже com, только через преобразователь на ИМС MAX232).

Заключение

Микроконтроллеры PIC16 подходят для простых проектов, типа простой автоматики, вольтметров, термометров и прочих мелочей. Но это не значит, что нельзя делать на этом семействе сложные и большие проекты, я привел пример того для чего чаще всего их используют. Для общего представления рекомендую посмотреть несколько видео:

В одной статье рассматривать темы о том, как программировать микроконтроллеры, неважно какого семейства, безсмысленно. Поскольку это очень большой объём информации. Для начинающих советую к прочтению:

Катцен С. — PIC-микроконтроллеры. Все что вам необходимо знать;

Кёниг А. — Полное руководство по PIC микроконтроллерам;

Шпак Ю.А. — Программирование на языке С для AVR и PIC микроконтроллеров;

Магда Ю.С. — Микроконтроллеры PIC: архитектура и программирование;

Яценков В.С. — Микроконтроллеры Microchip. Практическое руководство.

Осваиваем простейший микроконтроллер PIC. Часть 1

Выбор микроконтроллера обычно осуществляется под необходимые задачи. Для изучения хорошо подойдет популярный МК с минимальным набором периферии: PIC16F628A.

Первым делом необходимо скачать документацию по выбранному микроконтроллеру. Достаточно зайти на сайт производителя и скачать Datasheet.

На первых страницах перечислены основные характеристики МК (русское описание).

  • микроконтроллер содержит внутренний генератор на 4 MHz, так же можно подключить внешний кварц частотой до 20 MHz
  • 16 ног микроконтроллера можно использовать как цифровые входы\выходы
  • есть 2 аналоговых компаратора
  • 3 таймера
  • CCP модуль
  • USART модуль
  • 128 байт энергонезависимой памяти EEPROM

Схема расположения выводов:

Vdd — питание.
Vss — земля.

Это минимум, необходимый для работы МК.

Остаются доступными 16 ног МК. Не сложно посчитать, что использование каждой ноги каким-либо модулем уменьшает максимальное число используемых цифровых портов.

Компилятор

Как я уже писал в предыдущих статьях, самым простым и легким я посчитал компилятор JAL с IDE JALEdit.

Качаем JALPack, устанавливаем.
В этом паке содержаться все необходимые библиотеки, а так же примеры их использования.

Запускаем JALEdit. Открываем пример програмы для нашего микроконтроллера: 16f628a_blink.jal, дабы не портить исходник, сразу сохраняем ее в новый файл, к примеру, 16f628a_test.jal.

    выбор МК и его конфигурация

Если прочитать комментарии, то станет ясно, что данная программа рассчитана на использование внешнего кварца 20MHz.
Так как у нас его пока нет, разберемся с конфигурацией и перепишем программу на использование внутреннего генератора.

Конфигурация
  • OSC — конфигурация источника тактирования
    может принимать 8 различных значений, 4 из которых нам могут понадобиться
    1. INTOSC_NOCLKOUT — внутренний генератор (4M Hz)
    2. HS — внешний высокочастотный кварц (8-20 MHz)
    3. XT = внешний кварц (200 kHz — 4 MHz)
    4. LP — внешний низкочастотный кварц (до 200 kHz)
  • WDT — сторожевой таймер.
    Основная работа этого таймера в том, что бы перезагрузить микроконтроллер когда он дотикает до конца.
    Что бы перезагрузки не происходило, его нужно своевременно обнулять.
    Таким образом при сбое счетчик таймера перестанет обнуляться, что приведет к сбросу МК. Иногда бывает удобно, но в данный момент нам это не потребуется.
  • PWRTE — очередной таймер.
    При активации он будет сбрасывать МК до тех пор, пока питание не поднимется до нужного уровня.
  • BROWNOUT — сброс МК при падении питания ниже нормы.
  • MCLR — активация возможности внешнего сброса МК.
    При включении функции МК будет в постоянном резете до тех пор, пока на ноге MCLR (pin 4) не будет положительного напряжения.
    Для сброса МК достаточно установить кнопку, замыкающую pin 4 на землю.
  • LVP — активация возможности программирования при низком напряжении.
    При активации один цифровой вход переключится в режим LVP (pin 10). Если подать 5В на эту ногу, то МК перейдет в режим программирования. Для нормальной работы МК требуется держать на этой ноге 0В (подсоединить к земле).
    Мы будем использовать программатор, использующий повышенное напряжение, потому LVP активировать не требуется.
  • CPD — защита EEPROM от считывания программатором.
  • CP — защита FLASH (прошивки) от считывания программатором.

Изменим конфигурацию под себя:

Моргаем светодиодом по нажатию кнопки

Модифицируем программу так, что бы светодиод моргал только тогда, когда зажата кнопка.
Решив данную задачу мы научимся работать с цифровыми портами как в режиме входа, так и в режиме выхода.

Цифровой выход

Выберем еще неиспользуемую ногу МК. Возьмем, к примеру, RB5(pin 11). Данная нога не имеет дополнительных функций, потому она нам более нигде не понадобится.
В режиме цифрового выхода МК может притягивать к ноге либо питание, либо землю.
Подключать нагрузку можно как к плюсу, так и к минусу. Разница будет лишь в том, когда и в какую сторону потечет ток.


В первом случае ток потечет от МК при установке единицы, а во втором — к МК при установке нуля.

Дабы светодиод зажигался от логической единицы, остановимся на первом варианте.

Для ограничения тока через ногу (максимально допустимо 25 мА на цифровой вход или 200 мА на все порты) установлен токоограничительный резистор. По простейшей формуле высчитываем минимальное значение в 125 Ом. Но так как предел нам не нужен, возьмем резистор в 500 Ом (а точнее ближайший подходящий).

Для подключения более мощной нагрузки можно использовать транзисторы в различных вариантах.

Цифровой вход

Возьмем вторую неиспользуемую нигде ногу — RB4 (pin 10, указанная в распиновке функция PGM отностися к LVP, который мы отключили).
В режиме цифрового входа микроконтроллер может считывать два состояния: наличие или отсутствие напряжения. Значит нам необходимо подключить кнопку так, что бы в одном состоянии на ногу шел плюс, а во втором состоянии — к ноге подключалась земля.

В данном варианте резистор используется в качестве подтяжки (Pull-up). Обычно для подтяжки применяют резистор номиналом 10 кОм.

Можно подключать не только кнопку, главное помнить о ограничении тока через МК.

Кнопка сброса

Пока не забыли, что мы активировали внешний сброс, добавим аналогичную кнопку на ногу MCLR (pin 4).

После нажатия такой кнопки МК начнет выполнение программы с нуля.

Прошивка

Присваиваем нашему светодиоду и кнопке переменные:

Теперь присваивая переменной led значения 1 или 0 (on или off, true или false, другие алиасы..) мы будем подтягивать к нужной ноге МК или плюс, или минус, тем самым зажигая и гася светодиод, а при чтении переменной button мы будем получать 1 если кнопка не нажата и 0 если кнопка нажата.

Теперь напишем необходимые нам действия в бесконечном цикле (эти действия будут выполняться постоянно. При отсутствии бесконечного цикла МК зависнет):

Задержка считается просто:
частота генератора у нас 4MHz. Рабочая частота в 4 раза меньше: 1 MHz. Или 1 такт = 1 мкс. 500.000 мкс = 0,5 с.

Теперь нам необходимо записать эту прошивку в МК, собрать устройство согласно схеме и проверить, что у нас все получилось как надо.

Программатор

Все таже схема:

  • PGD — pin 13
  • PGC — pin 12
  • MCLR(Vpp) — pin 4
  • Vdd — pin 14
  • Vss — pin 5

Подключаем к компьютеру.

Качаем и запускаем WinPic800.

Идем в Settings->Hardware, выбираем JDM и номер порта, на котором висит программатор

Нажимаем Hardware Test, затем Detect Device

Открываем нашу прошивку pic628a_test.hex

На вкладке Setting можно проверить, что конфигурационные биты выставлены верно, при желании тут же их можно изменить

Program All, затем Verify All

Если ошибок не возникло, продолжаем паять.

Результат

Кнопку на MCLR паять можно по желанию, но подтяжка обязательна.


Результат работы можно увидеть на видео.

Итак, у нас получилось самое простое устройство на микроконтроллере: мигалка светодиодом.

Теперь нам необходимо научиться пользоваться всей оставшейся периферией, но об этом в следущей статье.

Микроконтроллеры PIC: регистры, схема, процессор, управление, состав (PIC16C5X)

PIC16C5XСостав контроллера

Обобщенная структурная схема микроконтроллеров (МК) семейства PIC16C5Xизображена на рис. 6.2.1. С функциональной точки зре­ния в контроллере можно выделить:

● процессор, к которому относятся арифметическо–логическое устройство (АЛУ), рабочий регистр W и регистр состояния STATUS

● блок управления программой содержащий память программы, регистр ко­манд, дешифратор, счетчик команд и двухуровневый стек;

● регистровую память, состоящую из ОЗУ и специальных регистров;

● блок таймеров, включающий 8–разрядный счетчик/таймер (регистр TMR0), сторожевой таймер (WDT), предварительный делитель WDT/TMR0, регистр OPTION управления таймером TMR 0 и предварительным делителем;

● блок синхронизации и специальных функций, включающий модуль управле­ния (узел выбора типа генератора, узел сброса и др.) и регистр конфигура­ции CONFIG;

● шинный интерфейс, предназначенный для передачи данных (8 бит), команд (12 бит), адресного кода (9–11 бит в зависимости от модели контроллера) и управляющих сигналов. Шина данных соединяет группу регистров ОЗУ, порты ввода/вывода и 8–разрядное АЛУ.

рис. 6.2.1

Назначение внешних выводов микроконтроллера приведено в табл. 6.2.1.

табл. 6.2.1

Рассмотрим назначение отдельных блоков контроллеров и выполняемые ими функции.

Процессор

Основными функциями процессора являются обработка данных и выдача сведений о своем состоянии.

Арифметическо–логическое устройство (АЛУ)предназначено для об­работки данных, которая осуществляется с помощью арифметических, логических и битовых операций, предусмотренных системой команд для рассматрива­емого семейства.

При выполнении арифметических (сложение, вычитание) и логических (И, ИЛИ, исключающее ИЛИ) команд с двумя 8–разрядными операндами один из них по­ступает в АЛУ из рабочего регистра W, другой — из любого регистра общего назначения (POH) или регистра специальных функций. Результат операции может быть размещен в одном из регистров–источников.

При выполнении команд с одним операндом (инкремент, декремент, сдвиги вправо и влево) источником операнда может быть любой из указанных выше ре­гистров, результат операции размещается в регистре–источнике или в рабочем регистре W (даже, если он не является источником).

При выполнении битовых команд происходит сброс/установка бита в адресу­емом регистре, выполнение/пропуск следующей команды в зависимости от зна­чения бита.

В зависимости от результата выполненной операции могут измениться значе­ния битов переноса С, дополнительного (десятичного) переноса DCи нуля Z в ре­гистре состояния STATUS . Битовые команды не изменяют значений битов состоя­ния С, DC, Z.

табл. 6.2.2

Рабочий регистр W выполняет функции аккумулятора: может быть источ­ником и приемником 8–разрядных операндов для АЛУ, поддерживает передачу данных в регистры управления портами RIS и в регистр управления таймером
OPTION (рис. 6.2.1) с помощью специальных команд. В отличие от аккумулятора регистр W не может быть прямо адресован, т. е. в адресном пространстве данных его адрес отсутствует. Для его загрузки и пересылки используются специальные команды (MOVW f, MOVLW k).

STATUS предназначен для хранения флагов состояния АЛУ (С, DC, Z), флагов состояния контроллера при сбросе (PD#, ТО#, где # — знак инверсии) и биты выбора страниц памяти программы (РА0, РА1). Назначение разрядов регистра приведено в табл. 6.2.2.

Регистр STATUS доступен для любой команды. Однако следует иметь в виду, что при выполнении команд с использованием регистра состояния биты PD# и ТО# устанавливаются аппаратно и не могут быть изменены программно. Напри­мер, при выполнении команды CLRF сброса регистра STATUS сначала обнуляются все биты, кроме битов PD# и ТО#, а затем для фиксации нулевого результата ус­танавливается бит Z= 1. После этой команды регистр STATUS
переходит в состо­яние 000 bТО bРО 100, где биты bТО, bРО остались без изменения. Некоторые команды могут изменять значение бит. Поэтому для целенаправленного изменения значе­ний бит регистра состояния рекомендуется использовать только те команды, ко­торые не вызывают случайного изменения бит PD# и ТО#. К ним относятся ко­манды битовой установки BCF, BSF, а также пересылки MOVWF и обмена тетрад SWAPF.

Блок управления программой

Этот блок является основным средством, обеспечивающим выполнение программы.

Память программы

В этой памяти хранится код программы. Память про­граммы контроллеров семейства PIC16C5X содержит 512, 1024 или 2048 ячеек, в каждой из которых может храниться 12–битная инструкция. Для доступа к ячей­кам памяти в зависимости от их количества используется 9–, 10– или 11–разряд­ный адресный код. Память разбита на страницы по 512 слов (ячеек), выборка ко­торых осуществляется путем изменения значений разрядов 10, 11 кода с помощью бит РА0, РА1 регистра состояния STATUS.

Счетчик команд PC

В счетчике команд формируется адресный код требу­емой разрядности для очередной команды. Для каждой модели контроллера раз­рядность счетчика команд PC определяется объемом резидентного постоянного запоминающего устройства, которое хранит прикладную программу, и может со­ставлять 9, 10 или 11 бит. Разряды 0…7 адресного кода, или младший байт PCL, счетчика команд интерпретируются как регистр специальных функций, который имеет собственный адрес в адресном пространстве памяти данных и поэтому программно доступен. Разряд 8 кода (вместе с байтом PCL) поступает по 9–раз­рядной шине прямой адресации из дешифратора команд, разряды 9, 10 — из ре­гистра состояния STATUS (биты РА0, РА1). При выполнении программы содержи­мое счетчика автоматически увеличивается, также автоматически осуществляет­ся переход на следующую страницу памяти.

Если счетчик команд PC загружается какой–либо командой (например MOVWF PC, ADDWF PC или BSF РС,5), изменяющей его содержимое, то в младший байт PCL счетчика команд записывается результат операции в 8–разрядном формате; бит 8 сбрасывается в 0, а биты 9, 10 загружаются из регистра состояния STATUS.

Наличие 0 в разряде 8 свидетельствует о том, что доступны только первые 256 адресов каждой страницы памяти программ. Такое действие оказывает команда CALL k (k= 0–255) вызова подпрограммы. Команда передачи управления GOTO k (k= 0–511), поступающая по 9–разрядной шине, обеспечивает прямой доступ к памяти про­грамм по всем адресам текущей страницы.

Двухуровневый аппаратный стек предназначен для хранения только со­держимого счетчика команд и используется при выполнении команды CALL вызо­ва подпрограммы. Его разрядность соответствует разрядности адресного кода.

При вызове подпрограммы осуществляется переход на новый адрес. Для про­должения основной программы адрес ее следующей команды помещается в стек на временное хранение. При этом содержимое счетчика команд увеличивается на единицу и загружается в стек 1, предыдущее содержимое стека 1 переносится в стек 2, а предыдущее содержимое стека 2 теряется. Таким образом, глубина вложения подпрограмм равна 2.

После выполнения подпрограммы адрес следующей команды основной про­граммы возвращается в счетчик команд. Так как стек содержит полный адрес возврата, то подпрограмму можно вызвать из любого места в программе.

Регистр команд служит для хранения текущей команды в процессе ее ис­полнения.

Дешифратор команд обеспечивает прямую адресацию памяти программы и данных, а также выборку константы из кода команды (при непосредственной адресации).

Регистровая память

рис. 6.2.2

Регистры микроконтроллера разделяются на две груп­пы (рис. 6.2.2).

Специальные регистры

Эти регистры управляют работой отдельных узлов контроллера, конфигурацией портов ввода/вывода, адресацией памяти, режимами таймеров. По выполняемым функциям можно выделить две разновид­ности регистров:

● регистры, относящиеся к базовым функциям: рабочий регистр W, программ­ный счетчик PC, регистр состояния OPTION, регистр косвенной адресации FSR, регистр таймера (TMR0);

● регистры, относящиеся к периферийным устройствам: регистры ввода/выво­да PORTA, PORTB, PORTC, регистры управления порами TRISA, TRISB, TRISC.

Специальные регистры (кроме FSR) рассмотрены при описании соответству­ющих узлов контроллера. Регистр косвенной адресации FSR совместно с псевдо­регистром INDF (реально не существует) предназначен для косвенной адресации памяти данных. В ранних моделях контроллеров его разрядность составляет пять бит, в поздних — семь бит. Если в программе не используется режим косвенной адресации, регистр FSR может быть задействован как 5(7)–битный регистр общего назначения. Принципы адресации изложены ниже.

Регистры общего назначения

Регистры этой группы используются программой для хранения переменных по усмотрению пользователя и образуют память данных контроллера.

С точки зрения доступа к регистровой памяти можно выделить пять групп по 16 регистров в каждой группе (рис. 6.2.2). Две группы из специальных регистров и регистров общего назначения (POH) объединены в банк 0, каждая из оставших­ся трех групп представляет собой банк POH.

В ранних моделях МК семейства PIC16CX использовалась только прямая адресация к регистрам, обеспечивающая по пятиразрядной адресной шине доступ к 32 регистрам банка 0. Емкость памяти данных составляла 24–25 байт (16 + 8–9 POH). В поздних моделях максимальную емкость памяти данных составляет 72–73 байта (24–25 + 16×3 POH). Использова­ние прямой и косвенной адресации обеспечивает доступ ко всем регистрам.

Блок ввода/вывода

Для ввода/вывода информации используется три набора из регистров двух видов:

●регистры ввода/вывода портов А, В, С, причем регистры портов В и С имеют 8 разрядов, а регистр порта А — 4 разряда (отсутствующие 4 старших разря­да считываются как нули);

● регистры TRIS управления портами, задающие направление передачи данных через порты. Регистры доступны только для записи. В них с помощью коман­ды TRIS заносится содержимое рабочего регистра W.

Если значение в i–м разряде регистра TRIS равно 0, то внешний i–й вывод порта выполняет функ­ции выхода и обеспечивает выдачу бита данных во внешнее устройство. Зна­чение 1 в разряде определяет соответствующий вывод порта как вход. Все разряды портов могут быть запрограммированы индивидуально;

● логическая схема одного разряда порта ввода/вывода изображена на рис. 6.2.3. В ее состав входят: два D

рис. 6.2.3

–триггера, управляемый буфер, логические элемен­ты И и ИЛИ, двухтактный усилитель на КМОП транзисторах. Выходы портов представляют собой защелки. Их состояние не меняется до следующей запи­си в порт. Для установки режима ввода/вывода используется триггер регист­ра TRIS управления портом.

Рассмотрим работу схемы

● в режиме ввода, когда на выходах триггера управления портом установлены сигналы Q= 1, ¯Q=0, оба транзистора двухтактного выходного каскада закры­ты (отключены): транзистор Р единичным сигналом на затворе, транзистор N — нулевым. Сигналом «Чтение» = 1 входной буфер открыт, и бит данных с выво­да порта поступает линию шины данных. Ввод данных в порт не стробируется. Чтение порта производится соответствующими командами (например MOVF PORTB, W), во время выполнения которых уровень на входах порта ос­тается постоянным;

рис. 6.2.4

● в режиме вывода, когда на выходах триггера регистров управления TRISA, TRISB или TRISC установлены сигналы Q = 0, ¯Q = 1, состояние логических элементов зависит от содержимого выходной защелки, в которую записыва­ется выводимый бит данных. При выводе единичного бита с выхода защелки снимается сигнал ¯Q = 0, поэтому логические элементы открывают транзистор Р и закрывают транзистор N. На выводе порта устанавливается единичный уровень. При выводе нулевого бита с выхода защелки снимается сигнал ¯Q = 1, поэтому логические элементы открывают транзистор N и закрывают транзи­стор Р. На выводе порта устанавливается нулевой уровень. Состояние защел­ки не меняется до следующей записи в порт.

Блок таймеров

В состав этого блока (рис. 6.2.4) входят:

● 8–разрядный таймер–счетчик (регистр TMR0);

● сторожевой таймер (WDT);

● предварительный делитель частоты для TMR0/WDT;

● мультиплексоры для управления режимами с помощью бит регистра OPTION.

табл. 6.2.3

Регистр OPTION доступен только для записи. С помощью команды OPTION данные из рабочего регистра W переписываются в регистр OPTION. Назначение бит регистра приведено в табл. 6.2.3.

рис. 6.2.4

Для описания структурно–функциональной организации блока таймеров вос­пользуемся упрощенной структурной схемой, изображенной на рис. 6.2.4.

● логический элемент исключающее ИЛИ и мультиплексоры MUX–1, MUX–2, по­зволяющие с помощью бит TOSE, TOCS, PSA регистра OPTION задать режим работы таймера/счетчика согласно табл. 6.2.3;

● синхронизатор, обеспечивающий внутреннее тактирование с задержкой на два командных цикла;

● непосредственно 8–разрядный регистр–счетчик TMR0, доступный по чтению и записи.

Возможны два режима работы таймера–счетчика:

● режим таймера, для которого характерно увеличение содержимого TMR0 в каждом командном цикле при отсутствии предварительного делителя. Ре­жим выбирается установкой в «0» бита TOCS (разряд 5 регистра OPTION).

При записи в TMR0 увеличение счетчика задерживается на два последующих цикла выполнения команды. Для проверки регистра TMR0 на нуль без влия­ния на процесс счета можно пользоваться командой MOVF TMR0, W;

● режим счетчика, для которого содержимое TMR0 увеличивается по каждому перепаду 1 —> 0 или 0 —> 1 на внешнем выводе TOCKI.

Вид перепада задается битом выбора фронта переключения TOSE (разряд 4 регистра OPTION).

Ре­жим выбирается установкой в 1 бита TOGS (разряд 5 регистра OPTION).

Сторожевой таймер

Основное назначение сторожевого таймера WDT (WatchDog Timer) — защита микроконтроллера от сбоев:

● при нормальном порядке исполнения программы сторожевой таймер WDT пе­риодически переходит в начальное состояние через заданное время выдержки;

● при нарушении порядка исполнения программы (при сбое) сторожевой тай­мер не переходит в начальное состояние, происходит его переполнение, ко­торое вызывает сброс микроконтроллера.

табл. 6.2.5

Номинальное время выдержки сторожевого таймера, называемое периодом тайм–аута WDT, выбирается исходя из заданных интервалов изменения пита­ющих напряжений, температуры, технологического разброса параметров и других дестабилизирующих факторов. В контроллерах PIC16C5X период тайм–аута со­ставляет 18 мс. Для его увеличения (до 2,3 секунды) можно использовать встро­енный предварительный делитель с программируемым коэффициентом деления частоты (до 128 раз).

Внешний тактовый генератор может быть построен:

● по описанной выше трехточечной схеме с емкостной обратной связью (рис. 6.2.5, б);

● по схеме с включением кварцевого (керамического) резонатора в цепь обрат­ной связи на частоте последовательного резонанса (рис. 6.2.5, в). При установке бит FOSC1 =FOSC0= 1 регистра конфигурации в микроконт­роллерах предусмотрены внутренние средства (триггер Шмитта и КМОП транзи­стор) для построения RC–генератора (рис. 6.2.5, г) с использованием всего лишь двух внешних элементов, задающих частоту внутреннего тактового сигнала. Ког­да не предъявляются высокие требования к точности и стабильности частоты ге­нератора, использование RC–генератора позволяет дополнительно уменьшить стоимость приложения.

На выводе OSC2/CLKOUT в режиме RC присутствует сигнал с частотой генера­тора, деленной на четыре, который может быть использован для синхронизации других схем.

Реализация сброса

Микроконтроллеры имеют специальную схему, позволя­ющую выполнить следующие виды сброса:

● сброс по включению питания (POR);

● сброс по внешнему входу MCLR# при обычной работе и в режиме пониженно­го энергопотребления SLEEP, где # — знак инверсии;

● сброс по сторожевому таймеру WDT.

Состояние регистров после сброса приведено в табл. 6.2.5.

табл. 6.2.6

Некоторые регистры всегда устанавливаются в определенное состояние, дру­гие регистры при сбросе по включению питания имеют неопределенное значе­ние, в остальных случаях их состояние не изменяется (U). Биты тайм–аута ТО# и выключения питания Р D #регистра состояния (табл. 6.2.2) устанавливаются в определенное состояние в зависимости от причины сброса (табл. 6.2.6).

В состав схемы сброса входят (рис. 6.2.6):

● схема включения и триггер Шмитта, формирующие импульсы для запуска RS–триггера и четкой фиксации момента его установки;

● таймер сброса DRT и внутренний RC–генератор, используемые для формиро­вания сигнала выдержки времени (номинальное значение 18 мс) состояния сброса микроконтроллера. Таймер DRT запускается после перехода в высо­кий уровень сигнала на выводе MCLR#;

● RS–триггер и логические элементы. В исходном состоянии снимаемый с ин­версного выхода RS–триггера сигнал сброса микроконтроллера Q# =1. При появлении единичного логического уровня на одном из входов элемента ИЛИ триггер переводится в состояние сброса (Q# = 0).

Длительность сигнала Сброс составляет 18 мс. С помощью таймера сброса DRT триггер переводит­ся в исходное состояние, при котором сигнал Сброс Q# =1.

Сброс по включению питания

Для реализации этого сброса необходи­мо соединить внешние выводы MCLR# и VDD. При появлении на этих выводах на­пряжения происходит установка RS–триггера и запуск таймера сброса DRT.

На вы­ходе триггера формируется сигнал Сброс Q# = 0. Через 18 мс таймер ORT сбра­сывает триггер, и тем самым прекращает действие сигала Сброс. Запуск кон­троллера завершается и он готов к работе. При этом все параметры (напряжение питания, частота, температура и др.) должны соответствовать допустимым.

Внешний сброс

Когда напряжение питания устанавливается очень мед­ленно и после окончания выдержки времени таймера D RT напряжение питания не достигло номинального значения микроконтроллер может не запустится или запуститься некорректно. Кроме того, схема сброса может также не обеспечить достаточную выдержку времени в устройствах с низкочастотными кварцевыми генераторами, которые требуют достаточно большего времени для запуска и ста­билизации режима генерации. В этих случаях необходимо использовать внеш­нюю схему сброса микроконтроллера.

На рис. 6.2.7, а приведена широко распространенная схема внешнего сброса, в которой:

● элементы R и С определяют скорость нарастания напряжения;

● диод VD предназначен для разряда конденсатора С при выключении питания;

● резистор R 3 служит для ограничения тока по выводу MCLR

# при перезарядке конденсатора С и импульсных помехах (выполняет защитные функции).

На рис. 6.2.7, б приведена схема внешнего сброса с использованием стаби­литрона Эта схема вырабатывает сигнал сброса при понижении напряжения. Когда напряжение питания VDD становится ниже, чем напряжение UCT + 0,7 В, где 0,7 В — напряжение отпирания транзистора, UCT — напряжение на стабилитроне, транзистор запирается. напряжение на входе MCLR# становится равным нулю, срабатывает R 3–триггер и контроллер переводится в состояние сброса.

На рис. 6.2.7, в приведен вариант схемы сброса с резистивным делителем на­пряжения.

Специальные функции

Режим пониженного энергопотребления (SLEEP).

Вход в режим инициируется командой SLEEP, после выполнения которой:

● сбрасывается и начинает новый отсчет времени сторожевой таймер WDT, если он разрешен, т. е. бит 2 в регистре конфигурации WDTE = 1 (табл. 6.2.4);

● сбрасывается бит выключения питания (PD# = 0) и устанавливается бит тайм–аута (ТО# = 1) в регистре состояния STATUS(табл. 6.2.2);

● выключается тактовый генератор;

● порты ввода/вывода сохраняют состояние, которое они имели до входа в ре­жим SLEEP.

Выход из режима SLEEP возможен в следующих случаях:

● по внешнему сбросу подачей сигнала с нулевым логическим уровнем на вы­вод MCLR#;

● по сбросу при срабатывании сторожевого таймера WDT.

В обоих случаях происходит сброс микроконтроллера. Биты ТО# и PD# ре­гистра состояния определяют причину сброса (табл. 6.2.2). При выходе из режи­ма пониженного энергопотребления SLEEP сторожевой таймер WDT переводится в нулевое состояние независимо от причины сброса.

Для минимизации потребления в режиме SLEEP принимаются специальные меры, например, все разряды внешних портов должны находиться либо на уровне общего вывода VSS, либо на уровне напряжения питания VDD.

Защита программного кода от считывания

Для защиты кода, запи­санного в память программ (ППЗУ или ПЗУ), следует установить в нуль все име­ющиеся биты защиты CP регистра конфигурации CONFIG (табл. 6.2.4). После вы­полнения этой операции:

● содержимое памяти программы не считывается в исходном виде, тем самым невозможно реконструировать записанную программу. Чтение любого адреса памяти программы дает кодированный результат в виде двоичного кода 00000000ФФФФ, где Ф = 0 или 1;

● невозможно допрограммировать контроллер. Однако для микроконтроллеров с ППЗУ возможно допрограммирование адресов 00h–3Fh. Кодирование осу­ществляется побитовым выполнением операции «Исключающее ИЛИ» между старшей и средней тетрадами содержимого памяти программы, а затем с младшей тетрадой. Результирующее 4–битовое значение используется для контроля правильности программирования. Программа, записанная по этим адресам, не может считаться защищенной от считывания. Для контроля пра­вильности записи при допрограммировании области памяти 00h–3Fh необходимо учитывать метод кодирования, используемый для защиты памяти про­граммы;

● сохраняется возможность считывания и модификации содержимого регистра конфигурации CONFIG.

Индивидуальная метка

В микроконтроллеры PIC16C5X имеются четыре специальных адреса, не являющиеся частью памяти программы. По этим адресам хранится идентификационный код пользователя, контрольная сумма или другие данные. Как и слово конфигурации, они могут быть прочитаны или записаны толь­ко с помощью программатора. Программно эти адреса недоступны.

Читать:
Тип подключения умс что это

Похожие публикации