Первая программа на PIC24

Visits: 2033


При написании первой программы всегда начинает вопрос с чего начать. Пропустим весь процесс установки среды программирования так ка считаем, что это пройденный этап. Программировать будем учиться на языке С 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 секунды

	}

 Первая программа – мигание светодиода, для встроенных систем, это как “Привет Мир”. Светодиод мигает – мир радуется!


Демонстрационное видео

 


Проект для загрузки

Значок

Первая программа на PIC24 41.56 KB 1089 downloads

Первая программа на PIC24 ...


Это может быть интересно

  • Индикатор кода – RC-5 Protocol PhilipsИндикатор кода – RC-5 Protocol Philips
    Visits: 974 Индикатор кода – RC-5 Protocol Philips При конструировании дистанционного управления на инфракрасных лучах для контроля удобно иметь индикатор кодов передаваемых пультом. Плата ch-c3000 позволяет изготавливать устройства с возможностью …
  • WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)WiFi ESP8266 – AT команды связанные с функцией TCP/IP (v.1.6.1)
    Visits: 5003 AT команды связанные с функцией TCP/IP В этом разделе описаны команды которые позволяют устанавливать соединения между серверами и клиентами в сети. Приведено описание команд и примеры их выполнения. …
  • Самый простой индикатор уровня звукового сигналаСамый простой индикатор уровня звукового сигнала
    Visits: 6206 Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете  самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на …
  • Сумеречное релеСумеречное реле
    Visits: 1423 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
  • Дисплей KD035C-3A подключение и управлениеДисплей KD035C-3A подключение и управление
    Visits: 686 Дисплей KD035C-3A производиться компанией SHENZHEN STARTEK ELECTRONIC TECHNOLOGY CO.,LTD Характеристики Параметр Спецификация Единицы измерения Размер дисплея 70.08(H)*52.56(V) (3.5inch) mm Тип дисплея TFT active matrix Цветовая гамма 65K/262K colors Разрешение …
  • WiFi ESP8266 – AT команды связанные с функцией Wi-FiWiFi ESP8266 – AT команды связанные с функцией Wi-Fi
    Visits: 5226 AT команды связанные с функцией Wi-Fi Функции Wi-Fi подключения, запускаться из командной строки Команда Описание  1 AT+CWMODE Проверка, настройка режима работы Wi-Fi (sta/AP/sta+AP), (не рекомендуется для новых проектов). 2 …
  • Проект с использованием MCC часть 13Проект с использованием MCC часть 13
    Visits: 1015 Так как используя MCC мы можем его использовать со своими библиотеками, поэтому настало время и свое создать. Для начала откроем наш заголовочный файл в нем очень много букв: По …
  • Проект с использованием MCC часть 07Проект с использованием MCC часть 07
    Visits: 942 Модуль PWM – широтно импульсная модуляция (ШИМ). ПИК контроллеры часто на борту имеют модули ШИМ. На их основе строятся многие узлы управления электро приводами. В нашем варианте мы …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Visits: 1858 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Visits: 1913 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …


Поделись этим!