Visits: 2037
При написании первой программы всегда начинает вопрос с чего начать. Пропустим весь процесс установки среды программирования так ка считаем, что это пройденный этап. Программировать будем учиться на языке С XC16. Я считаю для начинающих, это самый простой вариант для обучения, так как ассемблер для 16 разрядных более сложен для понимания, чем для 8 разрядных PIC-контроллеров.
Первое, что необходимо, это какие необходимы начальные строки, чтобы компилятор понял, что мы от него хотим. Первая строка:
#include <xc.h> // подключение процессора
А хотим мы от него, что бы он выбрал из настроек среды MPLAB с каким контроллером мы работаем.
Дальше, для уменьшения наших мук, будем использовать библиотеку libpic30. Поэтому включим следующие две строчки, в первой – разъясняем компилятору какая у нас тактовая частота. Вторая, что будем использовать библиотеку.
#define FCY 32000000UL // определение тактовой частоты для макросов __delay_ms() и __delay_us() #include <libpic30.h> // библиотека функций
Определение тактовой частоты полезно настройки для макросов __delay_ms() и __delay_us().
Теперь надо настроить регистр конфигурации контроллера. Каждая строка имеет комментарий описывающий назначение. В двух словах – используем внутренний генератор с умножителем, запустим сторожевой, таймер. Для чего? Чтобы научиться с первых шагов с ним работать!
//--------------------------------------------------------------------------- // конфигурирование контроллера #pragma config POSCMOD = NONE // Главный генератор отключен #pragma config I2C1SEL = PRI // Использовать SCL1/SDA1 контакты по умолчанию #pragma config IOL1WAY = OFF // Впоследствии состояние IOLOCK может быть изменено с помощью разблокировки #pragma config OSCIOFNC = ON // OSC2/CLKO/RC15 функциями, как порт ввода / вывода (RC15) #pragma config FCKSM = CSDCMD // Переключатель генератора отключен, Fail-Safe монитор генератора отключен #pragma config FNOSC = FRCPLL // Тактирование от внутреннего скоростного генератора через умножитель PLL - (FRCPLL) #pragma config SOSCSEL = LPSOSC // Вторичный генератор внутренний низкоскоростной 31 кГц LPRC генератор (LPSOSC) #pragma config WUTSEL = FST // Быстрый пробуждения таймер #pragma config IESO = OFF // IESO режим (две скорости запуска) отключены #pragma config WDTPS = PS1024 // Сторожевой таймер Postscaler #pragma config FWPSA = PR128 // Сторожевой таймер Prescaler соотношении 1: 128 #pragma config WINDIS = ON // Оконный режим сторожевого таймера - отключен #pragma config FWDTEN = ON // Сторожевой таймер выключен #pragma config ICS = PGx1 // Эмулятор EMUC1/EMUD1 выводы совместно с PGC1/PGD1 #pragma config COE = OFF // Сброс в рабочий режим #pragma config BKBUG = OFF // Устройство сбрасывает в рабочий режим #pragma config GWRP = OFF // Запись в память программы отключены #pragma config GCP = ON // Код защита включена для всего пространства памяти программы #pragma config JTAGEN = OFF // JTAG порт отключен
Сама первая программа это показать для самого себя, что контроллер начал работать, а для этого мы будем использовать индикацию на наших светодиодах подключенных портам (см. схему).
Программа, практически всегда, должна начинаться с настройки основного генератора, после этого необходимо перейти к настройке портов ввода вывода, а после можно перейти к этого основному циклу, в котором будет “вечно” работать наше устройство.
Настройка тактового генератора:
// настройка тактового генератора OSCCON=0b00000111000000001; // |||||||||||||||+-- OSWEN: выбор генератора определяется в регистре конфигураций // ||||||||||||||+--- SOSCEN: вторичный внутренний генератора 32 кГц отключен // |||||||||||||+---- неиспользуемый // ||||||||||||+----- CF: флаг детектора сбоя тактового генератора // |||||||||||+------ неиспользуемый // ||||||||||+------- LOCK: флаг состояния работы PLL модуля // |||||||||+-------- IOLOCK: блокировка активна // ||||||||+--------- CLKLOCK: часы и PLL выбор не заблокирован // |||||+++---------- NOSC2:NOSC0: новый генартор 001 - Тактирование от внутреннего скоростного генератора через умножитель PLL - (FRCPLL) // ||||+------------- неиспользуемый // |+++-------------- COSC2:COSC0: текущий генаратор 001 - Тактирование от внутреннего скоростного генератора через умножитель PLL - (FRCPLL) // +----------------- неиспользуемый // настройка регистра делителя тактовой частоты CLKDIV=0b0000000000000000; // ||||||||++++++++-- неиспользуемые // |||||+++---------- RCDIV2:RCDIV0:постделитель - 000 = 8 MHz (divide by 1) // ||||+------------- DOZEN: делитель отключен, тактирование 1:1 (первый делитель тактовой частоты) // |+++-------------- DOZE2:DOZE0: - 1:1 // +----------------- прерывания не влияют DOZEN // регистр калибровки внутреннего тактового генератора OSCTUN=0;
По регистру OSCCON хотелось бы добавить, пока мы не трогаем флаг блокировки IOLOCK, он будет вести себя как обычный регистр, но если его установить, то в зависимости от условий в регистре состояния, мы или не сможем его в последствии программе изменить или нам придется выполнять последовательность разблокирование для того чтобы, в нем что-то изменить.
Настройка портов:
AD1PCFG = 0xffff; // все выводы цифровые TRISA = 0; // разряды порта A на выход TRISB = 0; // разряды порта B на выход
И сам главный цикл программы, в нем мы используем банальную задержку для управления анимации светодиодов.
while(1) { ClrWdt(); // сброс сторожевого таймера _LATA0 = 0; // выключить светодиод _LATB0 = 1; // включить светодиод __delay_ms(500); // ждать 0,5 секунды _LATA0 = 1; // включить светодиод _LATB0 = 0; // выключить светодиод __delay_ms(500); // ждать 0,5 секунды }
Первая программа – мигание светодиода, для встроенных систем, это как “Привет Мир”. Светодиод мигает – мир радуется!
Демонстрационное видео
Проект для загрузки
Это может быть интересно
- Проект с использованием MCC часть 16Visits: 1051 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …
- Применение typedef, struct и unionVisits: 8703 Полезные описания переменных Часто необходимо в памяти расположить последовательно разные виды данных, что бы потом можно было их использовать. Полезные ссылки Взято и переработано с сайта http://www.butovo.com/~zss/cpp/struct.htm http://cppstudio.com/post/9172/ …
- JDY-62A Audio bluetooth moduleVisits: 1642 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
- OLED RET012864E/REX012864JVisits: 1445 RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как …
- MPLAB® Harmony – или как это просто! Часть 2.Visits: 2657 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
- Проблемы классической светомузыкиVisits: 2043 Светомузыка – что это такое? Определение: Светомузыка (жаргонное: цветомузыка) — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
- MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)Visits: 1161 Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на Cи для емкостной сенсорной кнопки, датчика приближения и слайдера.
- Acquaintance with audio-bluetooth modules F-6888 (BK3254).Visits: 2126 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
- Мультизоновый индикатор-терморегулятор ch-c3010Visits: 1154 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) …
- Стабилизатор тока на SN3350, часть 2Visits: 1147 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …