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 секунды }
Первая программа – мигание светодиода, для встроенных систем, это как “Привет Мир”. Светодиод мигает – мир радуется!
Демонстрационное видео
Проект для загрузки
Это может быть интересно
- AD9833 – Programmable Waveform Generator – part twoVisits: 1658 Прошло время и появилась тема, что-бы закончить проект AD9833 – Programmable Waveform Generator. Приехали печатные платы. В этот раз я печатные платы заказывал в https://jlcpcb.com/ делал это в …
- Датчик контроля протечки воды ch-c0020Visits: 1934 Как здорово летом под теплым дождем с тобою вдвоем оказаться. Как классно по лужам бежать босиком, с тобою играть и смеяться! Но совсем грустно оказаться под таким дождем, который течет с …
- NS108-5050-16bit от NewstarVisits: 577 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …
- Обновление ESP8266 c ESPFlashDownloadTool_v3.6.3Visits: 3441 Технология обновления следующая: Загружаем программу со страницы espressif.com. Разархивируем. Где находятся файлы, для прошивки? Заходим в каталоги Подключаем по схеме в статье WiFi ESP8266 (замыкаем BT2, перемычка). Запускаем программу, …
- Просто о внешних переменныхVisits: 763 Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
- Простой цифровой вольтметр ch-c3200Visits: 2480 В этой статье рассмотрен пример создания простого вольтметра постоянного тока на основе печатной платы ch-c0030pcb, а при возможности использования внешнего делителя и вольтметр переменного тока. Дан краткий принцип …
- Часы + Календарь + Термометр + …Visits: 2673 Часы + Календарь + Термометр + Индикатор влажности + Секундомер + Дистанционное управление на ИК лучах (пульты на RC-5 протоколе) + Автоматическая регулировка яркости + Возможность вывода данных через USB, …
- Проект с использованием MCC часть 15Visits: 1487 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …
- Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04Visits: 176 Смотри как установить и подключить библиотеку тут. V. – 23_04 – Component Database Update. – configuration file name – DXPPreferences1.DXPPrf. – Added two projects for audio amplifier …
- WiFi ESP8266 ESP-202 (ESP-12F)Visits: 7635 Первое знакомство, сначала надо его купить… http://voron.ua/catalog/024404 Схема для подключения и тестирования По схеме ставим две кнопки, сброс и кнопку BT2, для перевода в режим обновления прошивки. Если надо сделать …