Тестирование модуля генератора

Настройка, запуск и проверка рабочей частоты на примере PIC18F26K40.

Чтобы понять из-за чего зависит производительность микроконтроллера просто надо понять как работает его задающий тактовый генератор.
Для тестирования соберём небольшую схему на PIC18F26K40 (покупаем в Гамме). Для тестирования частоты нам потребуется выход RA6 настроить на вывод частоты синхронизации. Надо учесть, что на нем будет формироваться значение от системной частоты деленное на 4.

Микроконтроллер серии K40 работают в широком диаразон напряжений от 1,8 до 5 вольт!

Создадим проект с использование MCC. Я решил тут еще раз повторить весь процесс  создания проекта, в кратце, для обновления знаний.

Запустим MPLAB® X IDE, клацаем на иконку создать новый проект:

Выбиваем стандартный проект.

Выбираем тип дебаггера (ну у кого, что есть)

Выбираем компилятор (если будем использовать Си, а мы будем использовать Си). 

Зададим имя проекта и не забудем установить кодировку (это в будущих проектах. особенно, для русского виндовс, будет актуально для формирования кодов символов).  При необходимости можно задать папку хранения проекта.

Для кирилицы выбираем windows-1251

Давим на кнопку финиш и MPLAB® X IDE создает проект. Проект будет пустой в нем нет никаких файлов. Не спешите создавать файлы самостоятельно, их будем создавать при помощи MCC.

После запуска MCC  мы увидим следующее: 

Настроим генератор: Для начала выберем самый "мощный" режим 64 МГц и делитель частоты не используется (на 1).

Настроим порты: В строке OSC функция CLKOUT активируем выход тактовой частоты. По нему будем судить, о настройке генератора, а порты RC0 и RC1 настроим на выход.

В окне Ресурсы проекта выберем PIN Module. Обратите внимание на текущие настройки портов, необходимо отключить аналоговые входы.

После снятия флажков Analog, нажмем кнопку Generate для генерации файлов проекта. MPLAB® X предложит вам выбрать папку для сохранения файла конфигурации MCC.

После завершения преобразования, откроем закладку проекты и раскроем папки мы увидим, что в нашем проекте появились файлы.

Сделаем двойной клик по файлу main.c для его открытия. 

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

Подключим наше устройство к дебаггеру и "прошьём" его. Светодиод начнет мигать, замеряем частоту на выходе у нас 16 МГц. Т.е. с настройкой 
HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1 имеем на выходе 16 Мгц. Установим делитель на  4. С генерируем MCC и перепрошьем нам микроконтроллер. 

Измерив мы получаем 4 МГц. Т.е. при настройки HFFRQ = 64 MHz and CDIV = 1:4 тактовая - 64/4/4 = 4. Обратите внимание. что период мигания светодиода не изменился, независимо от тактовой частоты, компилятор задает такое значение макроса delay, что работа программы остается корректной. 
Зададим значение  HFFRQ = 12 MHz and CDIV = 1:8 и измеряем частоту на выходе.

На выходе я получили по своему частотомеру 376 500 Гц (расчетное значение если тактовая была бы точно ровна 12 МГц - 375 кГц), учитывая погрешность и измерения мы получаем довольно приличную точность на внутреннем встроенном RC генераторе!!!

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

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

Конкретно в этом нами выбранном микроконтроллере мы имеем регистры:
OSCCON1 - в нем задается выбор нового генератора и значение выходного делителя.
OSCCON2 - в нем показан какой генератора на данный момент используется, и настройка делителя частоты, этот регистр только для чтения. 
OSCCON3 - управление мощностью, режимом переключения и контроль готовности генератора.
OSCSTAT - флаги состояния модуля генераторов модуля и умножителя частоты.
OSCFRQ - выбор частоты встроенного высокочастотного генератора.
OSCTUNE - подгонка частоты встроенного высокочастотного генератора.
OSCEN - регистр ручного включения выключения генераторов модуля.

Процедура переключения состоит в следующем, если мы меняем только частоту работающего генератора (внутренний высокочастотный генератор), то мы изменяем значение параметров частоты OSCCON1, потом смотрит флаг ORDY в регистре OSCCON3 если он "1" , то переключение выполнилось (OSCCON1 = OSCCON2), потом проверяем флаг NOSCR - ("1") новый генератор можно использовать.
Если мы переходим на другой генератор модуля, для этого надо вручную включить другой генератор в регистре OSCEN. Проверить статус генератора, что он запустился в регистре OSCSTAT. Переключится на новый генератор в регистре OSCCON1, а дальше аналогично, потом смотрит флаг ORDY в регистре OSCCON3 если он "1" , то переключение выполнилось (OSCCON1 = OSCCON2), потом проверяем флаг NOSCR - ("1") новый генератор можно использовать. Далее выключим неиспользуемый генератор в регистре OSCEN, для, чтобы он не потреблял энергию.
Для окончания ознакомимся со структурой генератора:

В наличии мы имеем 5 независимых генераторов (один генератор ADC на схеме не показан). Внешний главный генератор EXTOSC - к нему модно подключать внешний кварц или керамический генератор, это если необходимо высокая точность и стабильность частоты. Вторичный низкочастотный генератор SOSC - он предназначен для использования кварцевого генератора в основном для формирования часов реального времени, в основном с использованием таймера T1, который может работать в режиме сна. Встроенный низкочастотный генератор LFINTOSC - предназначен для работы микроконтроллера в супер эконом режиме. Встроенный высокочастотный генератор HFINTOSC и его модуль для низкочастотного генератора MFINTOSC - этот генератор имеет большую гибкость с выбором тактовой частоты для управления центральным процессором и периферийными модулями.

Обратите внимание, что тут описан модуль генератора который имеют микроконтроллеры последнего поколения в которые созданы по типу XLP Technology.


Фото проекта


Зададим тактовую частоту 64 МГц HFINTOSC with HFFRQ = 64 MHz and CDIV = 1:1. При этом MCC конфигурирует наши регистры для работы с заданными параметрами.
Для дальнейших экспериментов можно скачать готовый проект

Icon

Тестирование модуля генератора - проект 344.09 KB 11 downloads

Чтобы понять из-за чего зависит производительность...


Распространите статью!

Share →

Copyright © Catcatcat 2013-2017. Все права защищены.
Копирование разрешается только с указанием активной ссылки на правообладателя.

e-mail: catcatcat.electronics@gmail.com