Использование битов конфигурации в проектах на базе микроконтроллеров

admin

Микроконтроллеры, как правило, предназначены для определенной цели, поэтому, в то время как они очень гибкие устройства в наши дни, существует множество различных (часто противоречивых) вариантов того, как вы можете захотеть, чтобы оборудование работало. Вы можете подумать, что эта конфигурация выполняется в программном обеспечении, но что, если вы хотите, чтобы аппаратные средства действовали определенным образом с самого начала? Помня о том, что устройства Microchip PIC могут «загружаться» в течение миллисекунд, необходимо, чтобы вы рассказывали аппаратным средствам о том, как это сделать до запуска. В этой статье описывается, как заставить ваш проект на базе микроконтроллера работать так, как вы ожидаете, когда он начнется.

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

В любом случае есть множество «конфигурационных слов», которые определяют, как микро будет поступать с выхода. Давайте рассмотрим некоторые из этих вариантов (в качестве примера выберем PIC18F2620), а затем посмотрим, как их программировать. Sourceboost дает вам все строки конфигурации в готовом к использованию формате для включения в ваш проект. Формат имеет биты конфигурации с суффиксом с тем же именем, что и слово конфигурации, поэтому вы можете убедиться, что правильные биты идут в правильном слове. Конечно, ваши конфигурационные слова будут отличаться, если вы используете другой микроконтроллер, но вы должны узнать достаточно здесь, чтобы указать вам в правильном направлении.

В 18F2620 биты конфигурации хранятся во флэш-памяти, но в высокой ячейке памяти. Они сохраняются при 0x300001 и выше. По историческим причинам из-за того, что память ранее была размещена на микроконтроллерах PIC, конфигурационные слова нумеруются с каждым числом с байтом «высокий» и «низкий».

CONFIG1L не существует на 18F2620. Если бы это было так, то он жил бы в 0x300000 месте.

CONFIG1H содержит биты, которые задают параметры генератора. Как правило, в проектах Embedded Adventures мы стараемся использовать внешние кристаллы, которые дают более точные и надежные результаты. Однако это использует два булавки, и иногда они могут быть более важными, чем скорость, с которой работает чип. Внешний кварцевый осциллятор называется генератором HS (если вы обычно делаете попытку запустить микро так быстро, как только это произойдет). В 18F2620 вы также можете включить модуль PLL, который даст вам четырехкратное увеличение скорости. Из CONFIG1H также доступны опции для включения отказобезопасного монитора часов (который переключается на внутренний генератор, если внешний не работает, и возможность включения переключения между различными источниками генератора.

Обычно мы рекомендуем использовать внешний кристалл , а также отключить любые режимы переключения генератора / переключения. В прототипировании важно иметь надежные, повторяемые результаты (в основном, чтобы уменьшить оси ошибки). Можно настроить 18F2620 на запуск с использованием внутреннего генератора ( который работает на частоте 8 МГц или 32 МГц с включенным PLL), а затем переключается на внешний (мы используем кристалл 10 МГц с поддержкой PLL, давая вам 40 МГц). Это дает вам более быстрый запуск от прерываний в спящем режиме или при загрузке, если этот & # Это важно, однако, для прототипирования это обычно не требуется.

Наша рекомендуемая строка конфигурации для CONFIG1H:

#pragma DATA _CONFIG1H, _OSC_HSPLL_1H & _IESO_OFF_1H & _FCMEN_OFF_1H

CONFIG2L han сброс сброса и таймер включения. Brown Out Reset (или BOR) — это возможность перезагрузки микроконтроллера, если напряжение питания падает ниже заданного порога. Он будет оставаться в состоянии сброса, пока питание не вернется через порог. Это может означать некоторую экономию заряда батареи (по крайней мере, когда батарея разряжена на определенном уровне, она быстро прекратит слив мощности), но в этот момент нет никакой функциональности. Таймер включения питания ожидает первоначального включения питания, чтобы питание превышало порог напряжения BOR, а затем висело в течение еще 65 мс, прежде чем полностью отбросить все. Это может помочь убедиться, что ваш источник питания устойчив, прежде чем пытаться выполнить какой-либо код.

Мы видели некоторые довольно непредсказуемые результаты 18F2620 при тестировании некоторых светодиодных панелей. Мы думали, что программное обеспечение терпит крах или перезагружает микрофон, когда на самом деле произошло то, что BOR срабатывало, когда зажигались больше светодиодов, а блок питания упал. Таким образом, если вам не нужна настоящая потребность, мы рекомендуем отключить его. Если вы оставите источник питания для установки перед запуском прошивки, это, как правило, хорошая идея (вы, вероятно, не заметите 65 мс, которые требуется).

#pragma DATA _CONFIG2L, _BOREN_OFF_2L & _BORV_2_2L & _PWRT_ON_2L

CONFIG2H дает вам настройки для сторожевого таймера. Это таймер, который сбрасывает PIC за определенное время (вы можете в целом указать, как долго это может быть). Возможно, будет хороший план сброса вашего ПОС, если вы сделаете что-то, из которого вы никогда не сможете восстановиться, хотя, надеюсь, вы написали достаточно хороший код, которого это не может произойти! В качестве альтернативы сторожевой таймер также может вывести PIC из режима ожидания. Это означает, что вы можете организовать для ПОС спать на определенное время (если ничего не происходит). Для прототипирования мы рекомендуем отключить сторожевой таймер. Если вы включите его, убедитесь, что вы регулярно перезагружаете сторожевой таймер или — ну, вы можете догадаться, что произойдет.

#pragma DATA _CONFIG2H, _WDT_OFF_2H & _WDTPS_128_2H

CONFIG3H имеет набор элементов конфигурации. Вы можете выбрать для вывода RE3, который будет доступен (только для ввода), или для того, чтобы этот вывод был MCLR (который сбрасывает микро при низком снижении). Для прототипирования возможность сброса микросъемки нажатием кнопки проще, чем вытягивание питания.

Бит LPT1OSC дает возможность режима «высокой мощности» или «режима низкого энергопотребления». Режим с низким энергопотреблением более чувствителен в среде с высоким уровнем шума. Поэтому, если использование батареи очень важно, вам нужно тщательно спроектировать свою схему. Разумеется, для прототипирования мы рекомендуем оставить это в режиме высокой мощности.

PBABEN, позволяет указать, должны ли контакты PORTB 0 — 4 просыпаться в качестве аналоговых входных контактов или цифровых контактов при сбросе. Конечно, вы можете в любое время изменить это в программном обеспечении в регистре ADCON1.

Модуль CCP — это модуль Capture / Compare / PWM, а окончательный бит CONFIG3H позволяет «рулевому управлению» этого выхода быть RC1 или RB3. Это удобно для изменения, если вам требуется другая функциональность, доступная на одном из этих контактов (RB3 также является аналоговым входом 9, а RC1 может быть входом генератора таймера 1). Альтернативно, компоновка печатной платы может быть проще, если вы можете перенести этот вывод на тот или иной. Для прототипирования, как правило, это не имеет значения в любом случае.

#pragma DATA _CONFIG3H, _CCP2MX_PORTC_3H & _PBADEN_OFF_3H & _MCLRE_ON_3H

CONFIG4L содержит некоторые интересные варианты и очень четко показывает, насколько важно настроить PIC перед запуском.

Бит DEBUG позволяет отлаживать аппаратные средства. Вы можете выполнить код, установить точки останова и т. Д. — если у вас правильно установлено ваше программное обеспечение, и этот бит очищен. Отладка аппаратных средств также требует исключительного использования RB6 и RB7 (также используемых для программирования ICSP). Честно говоря, мы обнаруживаем, что серийный выход обычно достаточен для поиска ошибок, хотя вы можете отлаживать множество PIC только с помощью PicKit2.

XINST позволяет использовать расширенный режим набора команд 18F. Это не используется Sourceboost, и если вы включите его по ошибке (независимо от используемого вами компилятора), то будут некоторые довольно непредсказуемые результаты. Один из наших читателей провел дни, пытаясь найти, что не так с его кодом, только для того, чтобы понять, что бит XINST установлен.

LVP дает вам возможность программировать ПОС с использованием ICSP, не требуя «более высокого» напряжения Vpp. Однако есть уловка — вам нужно назначить вывод RB5 (PGM) индикатором, если вы находитесь в режиме программирования или нет. Учитывая, что PicKit2 генерирует нужное напряжение, в любом случае, похоже, что это не так важно для переключения в целях прототипирования.

Наконец, STVREN дает возможность сброса PIC, если стек переполнен или переполнен. Если, например, вы вызываете слишком много вложенных функций, это позволит перезагрузить ПОС. После сброса вы можете проверить, почему PIC сбросить и сообщить об ошибке. Мы рекомендуем оставить это, если ваш PIC загрузится в середине чего-то, вы можете разумно предположить, что вы использовали пространство стека (возможно, когда вы глубоко погружаетесь в вложенную ситуацию, а затем происходит прерывание ).

#pragma DATA _CONFIG4L, _STVREN_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L & _XINST_OFF_4L

CONFIG5L дает возможность указать, защищен ли какой-либо из четырех непрерывных блоков памяти от любых попыток ПОС изменить (т.е. записать) флэш-память значения.

#pragma DATA _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L

CONFIG5H дает возможность защитить блок памяти, начиная с 0x0000 до 0x7fff) — используется некоторыми загрузчиками, а также бит, чтобы обеспечить защиту EEPROM-память. Загрузочный загрузчик PicPack, «Boostbloader», находится в верхней памяти, что означает, что, хотя он немного менее надежный, чем заблокированный, физически защищенный загрузчик, он не требует «двойного перехода» для прерываний, которые выполняют загрузчики, расположенные в нижней памяти. Мы можем предоставить это в качестве опции в будущем.

#pragma DATA _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H

CONFIG6L позволяет защитить блоки памяти защитой от записи.

#pragma DATA _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L

CONFIG6H, CONFIG7L и CONFIG7H обеспечивают более подробную защиту, позволяя защитить блоки памяти от того, когда выполняемый код не находится в одном блоке. Мы могли бы, например, сделать загрузчик, который был «секретным» и не мог быть готов каким-либо другим кодом.

#pragma DATA _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H

#pragma DATA _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L

#pragma DATA _CONFIG7H, _EBTRB_OFF_7H

Хотя, строго говоря, они & # 39; повторно не конфиг слова, слова DEVID позволяют коду определять, какая модель чипа работает и какая аппаратная ревизия. Это важно, когда на аппаратных средствах исправлены ошибки в разных версиях, и код должен выполняться по-разному на основе результата.

Создание конфигураций

. Вероятно, вы уже разработали конфигурацию конфигуратора Sourceboost, которые продуманно продублированы, так что вы можете просто и совместно использовать соответствующие параметры; это означает, что вам не нужно точно определять, какие позиции бит занимаются. #Pragma DATA дает вам возможность выталкивать байт в определенном месте (в нашем случае в слот с конфигурационным словом).

Другие ПОС

Здесь конфигурация, которую мы используем с PIC16F88:

#pragma DATA _CONFIG, _CP_OFF ​​& _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPDOFF & _LVP_OFF & _PWRTE_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _MCLR_ON & _INTRC_IO

Да, это так, это просто одно слово. Некоторые из этих вариантов, вероятно, будут вам уже знакомы.

Устранение сбоев в работе

Если ваш чип не ведет себя и вы хотите поработать, если вы допустили ошибку в своих конфигурационных битах, а удобный совет — использовать Microsoft MPLAB IDE, чтобы импортировать файл .hex, который вы создали, нажав Меню | Импортировать … затем Настроить | Биты конфигурации … Вот экран, который вы найдете при импорте BoostBloader PIC18F2620.

Вы даже можете изменить бит конфигурации, если хотите, а затем снова экспортировать файл a.hex, хотя имейте в виду, что это не изменяет исходный код.

Что вы, вероятно, поняли здесь, это то, что загрузчик определенно имеет конфигурационные биты, встроенные в файл .hex. Наши обычные программы PicPack — нет, так как мы предполагаем, что вы работаете с уже установленным загрузчиком. Если вы хотите напрямую запрограммировать ICSP, вам, конечно же, нужно будет использовать биты конфигурации, чтобы ваш PIC работал так, как вы планируете. Проверьте файл configbits.h, используемый Boostbloader — мы начнем создавать библиотеку удобных конфигурационных битов, включая некоторые параметры конфигурации, чтобы включить или выключить обычные вещи (они обычно размещаются в файле config.h в вашем проект).

Добавить комментарий