PIC32 – графическая библиотека для OLED дисплея


Для практического развития приведу схему подключения, библиотеку и проект для вывода информации на графический дисплей  OLED 1.1″ RGB UG-9696TDDCG02 использующий драйвер SEPS114A. Этот раздел для специалистов и сильно расписывать нет необходимости. Все параметры видны со схемы, с программы можно понять что где и как настраивается и работает.


 


Схема подключения

cat_pic32_0led01


Библиотека

Что нового в этой библиотеки по сравнению с прошлыми, так это добавлен функция рисования окружности, а так все аналогично предыдущим вариантам, для других типов микроконтроллеров.

/*
* File: SEPS114A.h
* Author: Gena Chernov – http://catcatcat.d-lan.dp.ua/
* Catcatcat 2015
* catcatcat@e-mail.ua
* Демонстрационный пример работы графический дисплей CNK111063 драйвер SEPS114A
* OLED 1.1″ RGB UG-9696TDDCG02
* интерфейс SPI.
* версия PIC32_1.0
* интерфейс PIC32MX795F512H
* —————————————————————————–
* вывод номер порт вывод
* индикатора ноги модуля SPI
* D0-SCL 29 RB14 SCK4 – синхронизация
* D1-SDI 32 RF5 SDO4 – данные
* D2-SDO — SDI4 – нет подключения
* D3-R/W 22 RB9 RC1
* D4-VSS
* D5-VSS
* D6-VSS
* D7-VSS
* A0 23 RB10 – тип передаваемых данных 0-команда/1-данные
* CSB 24 RB11 – Выбор кристалла – низкий активный, высокий – отключение драйвера от всех управляющих сигналов шины
* RSTB 30 RB15 – Данные/Команда, 0 – передача команды, 1 – передача данных-RC6 – Чтение/Запись 0 – режим записи 1 – режим чтения
* VCC_C 31 RF4 – управление повышающим DC/DC
* C80-VSS
* PS-VSS
* 96RGB96
* Индикатор подключается к SPI4 PIC32MX795F512H
* Для выполнения функции задержки используется таймер 5
* Кординаты нормальные. Начало нижний левый угол
* Microchip MPLAB® XC32 Compiler v1.34
* Created on 1 Марта 2015 г.
*/
//—————————————————————————————————–
// формат дисплея
#define dispX 96 // ширина дисплея
#define dispY 96
#define FCY 80000000 // 80 MHz

//—————————————————————————————————–
// описание управляющих сигналов

#define A0_OLED LATBbits.LATB10 // *данные/команда
#define CSB_OLED LATBbits.LATB11 // *выбор микросхемы
#define RW_OLED LATBbits.LATB9 // *чтение/запись
#define RSTB_OLED LATBbits.LATB15 // *сброс
#define VCC_C_OLED LATDbits.LATD8 // *вывод управления работой повышающего преобразователя для OLED

#define A0_TRIS TRISBbits.TRISB10 //
#define CSB_TRIS TRISBbits.TRISB11 //
#define RW_TRIS TRISBbits.TRISB9 //
#define RSTB_TRIS TRISBbits.TRISB15 //
#define VCC_C_TRIS TRISDbits.TRISD8 //

//—————————————————————————————————–
void SPI4_ON (void); // инициализация SPI2

//—————————————————————————————————–
void OledInt (void); // инициализация драйвера дисплея
void OledFic_read (void); // фиктивное чтение данных, для эмуляции автоприращения
void OledWriteCom (int IR, int datain); // запись команды управления драйвером

void OledEnVcc (int enable_disable); // выключение/включение внешнего DC/DC преобразователя/off / on the external DC / DC converter

void OledData (void); // установка обращению к регистру данных изображения
void OledPict (void); // запись точки в DDRAM (цветом установленным для рисунка)
void OledFon (void); // запись точки фона в DDRAM (цветом установленным для фона)

void kvadr (unsigned char tip, unsigned char X, unsigned char Y); // рисование квадратиков

//—————————————————————————————————–
void delay_ms (int zad); // функция задержки zad от 0 до 200
//—————————————————————————————————–
// расширенная задание рабочих цветов
// необходимо ввести цвет рисунка, и фона в формате RGB (0-255)
void OledColorSet (unsigned char Rr, unsigned char Gr, unsigned char Br,unsigned char Rf, unsigned char Gf, unsigned char Bf);

//—————————————————————————————————–
// компактная настройка цвета

// необходимо ввести цвет рисунка, и фона в формате 0-15
/* номер цвета R G B R G B
* 0-Black (черный) #000000 (000,000,000)
* 1-Maroon (темно-бордовый) #800000 (128,000,000)
* 2-Red (красный) #FF0000 (255,000,000)
* 3-Green (зеленый) #008000 (000,128,000)
* 4-Lime (ярко-зеленый) #00FF00 (000,255,000)
* 5-Olive (оливковый) #808000 (128,128,000)
* 6-Yellow (желтый) #FFFF00 (255,255,000)
* 7-Navy (темно-синий) #000080 (000,000,128)
* 8-Blue (голубой) #0000FF (000,000,255)
* 9-Purple (фиолетовый) #800080 (128,000,128)
* 10-Fuchsia (фуксин) #FF00FF (255,000,255)
* 11-Teal (серо-зеленый) #008080 (000,128,128)
* 12-Aqua (морская волна) #00FFFF (000,255,255)
* 13-Gray (серый) #808080 (128,128,128)
* 14-Silver (серебряный) #C0C0C0 (192,192,192)
* 15-White (белый) #FFFFFF (255,255,255)
*/
void OledColorFast (unsigned char colP, unsigned char colF);// установить цвет выводимой точки

//—————————————————————————————————–
// быстрая очистка в черный цвет
void OledClearAll (void);// быстрая очистка в черный цвет

//—————————————————————————————————–
/*установка курсора/positioning of the cursor X-(0,95),Y-(0,95)*/
void OledCursor (char Xp, char Yp);

//—————————————————————————————————–
/* Закраска прямоугольной области
* XS – начало левый нижний угол (0-95)
* YS – начало левый нижний угол (0-95)
* XE – конец правый верхний угол (0-95)
* YE – конец правый верхний угол (0-95)
* tip – тир заливки 0-сплошная, 1-градиентная, 2-градиентная серая
* NAP – направление градиента (0-7)
* colorN – цвет 1 (0-15)
* colorS – цвет 2 (0-15)
*/
void OledFillRect (unsigned char XS,unsigned char YS,unsigned char XE,unsigned char YE,unsigned char tip,unsigned char NAP,unsigned char colorN,unsigned char colorS);
//—————————————————————————————————–
/*вывод символа//the output symbol*/
// прорисовка символа
// X – 0-132; Y – 0-64
// cod – символ
// tip – расстояние после символа
// sti – тип наложения на фон 0-наложение 1 – стирание фона
// shi – ширина 0/1-стандартная 7-максимальная.
// vis – высота 0/1-стандартная, 7-максимальная
void OledSymbol (unsigned char cod,unsigned char tip,unsigned char inv,unsigned char shi,unsigned char vis);

//—————————————————————————————————–
/*
* вывод строк/output character strings
* OledString – вывод на дисплей строк c любой точки дисплея
* str строка символов или указатель на строку в ПЗУ
* prop – расстояние между символами
* nalo – тип наложения на фон 0-наложение 1 – стирание фона
* width-[ширина символа] 0-нормальное до 7
* height-[высота символа] 0-нормальное, 1-двойная высота
* X-[координата по X][-1 = центрирование строки Х 0-dispX]
* Y-[координата по Y][координата Y 0-62]
*/
void OledString(const char *str,char prop,char nalo,char width,char height,char X,char Y);
/*вывод строки с текущей позиции*/
void OledStringCur(const char *str,char prop,char inv,char width,char height);

//—————————————————————————————————–
/*
* бегущая строка/ / Ticker
* при вызове функции в окно бегущей строки выводиться 1 следующий символ.
* в цикле вывода информации должна быть одна строка OledTicker
* строка выезжает в окно, пробегает окно, и начинается заново
* str – символьная строка – max 255 символов
* tipvy – тип вывода информации 0- нормальный, 1- в начале наложение
* shiS – ширина символа 0-2 (0,1 == 1)
* vysS – высота символа 0-3 (0,1 == 1)
* X – положение по X
* Y – высота строки (низ)
* dlinokna – длина окна в пикселях (ширина будет подогнана к размеру символов)
*/
void OledTicker (const char *str,char tipvy,char shiS,char vysS,char X,char Y,char dlinokna);
//—————————————————————————————————–
// рисование точки
//[тип] 0-цвет рисунка,1-цвет фона
//[координата по X] 0-95
//[координата по Y] 0-95
void point(unsigned char tip, unsigned char X, unsigned char Y);

//—————————————————————————————————–
// рисование линии алгоритм Брезенхема
// tip тип линии 0-цвет рисунка 1-цвет фона, 2-варианты пунктиров
// x0 y0 x1 y1 – координаты линии
void line(unsigned char tip, unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1);

//—————————————————————————————————–
//Рисование прямоугольника (есть ограничение на задание координат – задание координаты верхний левый угол + ширина и высота)
//1-[тип углов]0-прямые, 1-скругленные
//2-[тип линии] 0-отсутствует 1- сплошная, от 2 и более варианты прорисовки
//3-[толщина бордюра] 0- нет (заливка все равно будет делать 1 пиксель отступа), 1,2,3 толщина
//4-[тип заливки]0-нет заливки,1-цвет рисунка,2-цвет фона, 3 и более варианты
//5-[x0][y0] – координата нижнего левого угла
//6-[ширина] – ширина прямоугольника
//7-[высота] – высота прямоугольника
void rectangle(unsigned char ugl, unsigned char tip, unsigned char bor, unsigned char tipzal, unsigned char x0, unsigned char y0, unsigned char sh, unsigned char vs);

//—————————————————————————————————–
// полоса загрузки индикатор линейный (есть ограничение на задание координат – задание координата нижнего левый угол + ширина и высота)
//[тип углов]0-прямые, 1-скругленные
//[тип линии]0-белая 1- сплошная, от 2 и более варианты
//[тип заливки]0-белая,1-черная, 2 и более варианты
//[x0][y0] – координата нижнего левого угла
//[ширина] – ширина прямоугольника
//[высота] – высота прямоугольника
//[vol] – уровень 0-100%
void strip(unsigned char ugl, unsigned char tip, unsigned char tipzal, unsigned char x0, unsigned char y0, unsigned char sh, unsigned char vs, unsigned char vol);

//—————————————————————————————————–
//tip [тип заливки]0-цвет рисунка,1-цвет фона

//[cx][cy] – координаты центра окружности
//radius[радиус] – радиус окружности
void Circle(unsigned int tip, unsigned int cx, unsigned int cy ,unsigned int radius);

//—————————————————————————————————–


Значок

PIC32 - графическая библиотека для OLED дисплея 16.46 KB 321 downloads

PIC32 - графическая библиотека для OLED дисплея ...
Значок

PIC32 - графическая библиотека для OLED дисплея - демо проект 124.48 KB 365 downloads

PIC32 - графическая библиотека для OLED дисплея -...

версия 1,1 добавлена функция визуализации чисел в шестнадцатеричном формате

void bin_HEX (unsigned long chisloin);

Значок

PIC32 - графическая библиотека для OLED дисплея - v1.1 17.58 KB 22 downloads

PIC32 - графическая библиотека для OLED дисплея -...
Login Required Message:

Продолжение еще будет…

PIC32 – Output Compare


Здесь хочу на реальном примере показать как например можно модуль использовать для создания генератора импульсов.

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

cat_max740401

Подавая на вход CLK заданную частоту мы можем задать полосу среза фильтра.

Модуль OUTPUT COMPARE имеет следующую структурную схему

OUTPUT_COMPARE01

Для работы модуля в режиме генератора необходимо использовать совместно с таймером.


ПРОДОЛЖЕНИЕ СЛЕДУЕТ…


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

  • MPLAB® Harmony – или как это просто! Часть 1.MPLAB® Harmony – или как это просто! Часть 1.
    Часть первая – Установка Гармонии. Музыкальная тема к статье, слушаем: В начале запуска нового проекта и выбора микроконтроллера стоит задача правильно его сконфигурировать, прежде чем перейти к реализации самой задачи. …
  • Проект с использованием MCC часть 11Проект с использованием MCC часть 11
    Можно несколько облагородить программу вынести наши процедуры обработки нажатия кнопок в отдельные функции. Но вы должны понимать, что это хоть и не значительно, но будет тормозить общую скорость работы проекта, …
  • PIC18 – System ArbitrationPIC18 – System Arbitration
    Системный арбитр. Разрешает доступ к памяти между выборами уровнями системы (т.е. Main, Interrupt Service Routine) и выбором периферийных устройств (т.е. DMA и Scanner) на основе назначенных пользователем приоритетов. Каждый из уровней …
  • MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)MCC PIC24 – модуль REAL-TIME CLOCK AND CALENDAR (RTCC)
    RTCC предоставляет пользователю часы реального времени и функция календаря (RTCC), точность “хода” может быть откалибрована. Основные особенности модуля RTCC: • Работает в режиме глубокого сна. • Возможность выбора источника синхронизации. • …
  • MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМMCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ
    Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые ЦАП. MCC …
  • Ссылки на интересные источникиСсылки на интересные источники
    Сбор 3D моделей от André L’Hérault конденсаторы, резисторы, индуктивности dropbox IPC-SM-782 Surface Mount Design and Land Pattern Standard Видео уроки по Altium designer Alexey Sabunin https://www.youtube.com/channel/UCG7N5CqXpyK8nQjr1EmMgng Сергей Булавинов https://www.youtube.com/channel/UCISAMXRnN_Qw9UTjUwZI1Jw Robert Feranec https://www.youtube.com/user/matarofe Самый быстрый, …
  • Просто о внешних переменныхПросто о внешних переменных
     Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как внешние. В …
  • Оптосимистор и его применениеОптосимистор и его применение
    Эрве Кадино “Цветомузыкальные установки” Ответ на вопрос – управление мощным тиристором или симистором, от терморегулятора. Статья в pdf Оптосимистор принадлежат к классу оптронов и обеспечивают очень хорошую гальваническую развязку (порядка …
  • CCP – модуль в режиме Compare на примере PIC18CCP – модуль в режиме Compare на примере PIC18
    CCP – модуль можно использовать в трех режимах: Capture – позволяет захватывать входной сигнал и определять его параметры (длительность или частоту). Дополнительно управлять внутренними модулями. Compare –  позволяет формировать импульсы …
  • Бегущие огни (ch-bo-36)Бегущие огни (ch-bo-36)
    Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется увеличивать кратно …

PIC32 – SPI


В PIC32MX795F512H доступно 3 SPI это SPI2, SPI3, SPI4.

Cat_SPI_01схема в PDF 

Значок

PIC32 – SPI - схема подключения 45.28 KB 228 downloads

PIC32 – SPI - схема ...

Настройка SPI модуля сводиться к следующим параметрам, например, для SPI2 для работы со светодиодами APA102, в этом варианте нам требуются только две линии линия данных и линия синхронизации.

Выключим модуль (если он был включен)

Выберем тип буфера, 0 – обычный или 1-расширенный, в расширенном режиме в зависимости от того какой раз мер данных мы получаем разную глубину FIFO. Если размер данных 8 бит, то получаем 16 буферов, приема передачи в отделенности, 16 бит – 8 байт, если 32 бит – 4 байта в каждом буфере.

Настраиваем длину данных, в нашем случае 8 бит

Задаем режим работы модуля

Задаем параметры шины синхронизации

Задаем тактовую частоту шины

Включаем модуль в работу

В общем виде


Если необходимо работать с прерывания можно настроить



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


  • I2C MODULE – PIC18F25K42 Device ID Revision = A001I2C MODULE – PIC18F25K42 Device ID Revision = A001
    I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все режимы этой …
  • MPLAB® Code Configurator and EncoderMPLAB® Code Configurator and Encoder
    Еще раз про энкодер… Для некоторых приложений очень удобно и экономически выгодно, для настройки и управления использовать энкодер. Такие энкодеры имеют строенную тактовую кнопку которую можно применить для выбора режимов работы …
  • Acquaintance with audio-bluetooth modules F-6888 (BK3254).Acquaintance with audio-bluetooth modules F-6888 (BK3254).
    Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, как в …
  • AD9833 – Programmable Waveform Generator – part twoAD9833 – Programmable Waveform Generator – part two
    Прошло время и появилась тема, что-бы закончить проект AD9833 – Programmable Waveform Generator. Приехали печатные платы. В этот раз я печатные платы заказывал в https://jlcpcb.com/ делал это в первый раз …
  • Проект с использованием MCC часть 15Проект с использованием MCC часть 15
    EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, добавим выход …
  • Простой цифровой регулятор мощностиПростой цифровой регулятор мощности
    Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью работы вентиляторов …
  • УКВ – радиоприем, часть 1УКВ – радиоприем, часть 1
    Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. Проблема была …
  • VU Meter Tower ART – part 2VU Meter Tower ART – part 2
    Проект – VU Meter Tower ART получил продолжение в своем развитии. Теперь можно заказать набор деталей из акрила для самостоятельной сборки. В проект корпуса внесено целый ряд доработок, позволяющие улучшить …
  • Audio-bluetooth modules F-6188 (BK8000L)Audio-bluetooth modules F-6188 (BK8000L)
    Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная прошивка. …
  • Проект с использованием MCC часть 08Проект с использованием MCC часть 08
    И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, которыи позволяет …


PIC32 – “Привет мир”


Запуск первой программы при изучении микроконтроллера сводиться, к тому, чтобы начал мигать светодиод. В нашем случае светодиод подключен к Выводу RB13.

Catcatcat_led01

В PIC32 не рекомендуется использовать макросы типа DELAY для формирования задержки, ну это и по большому счету не корректно, по этому для формирования задержки воспользуемся таймером T1. Работу таймера описывать не буду, только уточним, что таймер тактируется от системного генератора частотой 80 МГц (внешний керамический резонатор 8 МГц). Настройка таймера для получения видимых мигание светодиода сводиться к трем строкам:

Управление миганием светодиода поместим в основной цикл и контролировать будем по флагу переполнения таймера.


Проект формате MPLABX v2.30 компилятор XC32 v1.34

Значок

PIC32 – "Привет мир" 50.71 KB 216 downloads

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

 


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

  • Акриловый корпус для платы ch-4000Акриловый корпус для платы ch-4000
    Плата ch-4000 подходит для монтажа в корпуса на дин рейку, но для домашней автоматики необходимо что-то другое, поэтому был разработан корпус из акрила который позволит создавать настольные и настенные устройства. Корпус состоит из …
  • LED модуль P10 (1R) V706ALED модуль P10 (1R) V706A
    Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа  R-красные, но не верьте паяют светики и зеленые и синие, в общем любые какие …
  • I2C MODULE – PIC18F25K42 Device ID Revision = A001I2C MODULE – PIC18F25K42 Device ID Revision = A001
    I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все режимы этой …
  • LM317 и светодиодыLM317 и светодиоды
    LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла зависит от …
  • ch-светомузыка от теории до реализацииch-светомузыка от теории до реализации
    Сразу оговоримся технология или теория ch-светомузыки, это постоянно развивающийся процесс и то что будет сказано сегодня завтра может быть опровергнуто и считаться ошибочным. Назовем само решение проблемы автоматического преобразования или …
  • REFERENCE CLOCK OUTPUT MODULEREFERENCE CLOCK OUTPUT MODULE
    REFERENCE CLOCK OUTPUT MODULE Модуль формирования опорного тактового сигнала Модуль опорного тактового сигнала обеспечивает возможность посылать сигнал синхронизации на тактовый опорный выходной контакт или контакты (CLKR) в зависимости от конфигурации выводов …
  • Проект с использованием MCC часть 07Проект с использованием MCC часть 07
    Модуль PWM – широтно импульсная модуляция (ШИМ). ПИК контроллеры часто на борту имеют модули ШИМ. На их основе строятся многие узлы управления электро приводами. В нашем варианте мы будем его …
  • PIC18 – System ArbitrationPIC18 – System Arbitration
    Системный арбитр. Разрешает доступ к памяти между выборами уровнями системы (т.е. Main, Interrupt Service Routine) и выбором периферийных устройств (т.е. DMA и Scanner) на основе назначенных пользователем приоритетов. Каждый из уровней …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое таймер? Это …
  • Toyota Auto Fader – Модуль включения усилителяToyota Auto Fader – Модуль включения усилителя
    Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить в работе …

PIC32 – конфигурирование контроллера


Первоначальная настройка микроконтроллера сводится к настройке регистров конфигураций. В этих регистрах производиться основная настройка микроконтроллера, это как мы в основном будем микроконтроллер. сразу возникает вопрос где найти описание и как их настраивать. Первым делом необходимо обратиться к файлу PIC32ConfigSet.html который можно найти в папке C:\Program Files (x86)\Microchip\xc32\v1.32\docs (если компилятор Си установлен по умолчанию).


пример описания для микроконтроллера

Configuration-Bit Settings for PIC32MX795F512H

Usage:

#pragma config SETTING = VALUE  

SRS Select (FSRSSEL)
FSRSSEL = PRIORITY_0 SRS Priority 0
FSRSSEL = PRIORITY_1 SRS Priority 1
FSRSSEL = PRIORITY_2 SRS Priority 2
FSRSSEL = PRIORITY_3 SRS Priority 3
FSRSSEL = PRIORITY_4 SRS Priority 4
FSRSSEL = PRIORITY_5 SRS Priority 5
FSRSSEL = PRIORITY_6 SRS Priority 6
FSRSSEL = PRIORITY_7 SRS Priority 7

 

Ethernet RMII/MII Enable (FMIIEN) – Настройка Ethernet модуля
FMIIEN = OFF RMII Enabled
FMIIEN = ON MII Enabled

 

Ethernet I/O Pin Select (FETHIO) – Настройка портов вывода Ethernet модуля
FETHIO = OFF Alternate Ethernet I/O
FETHIO = ON Default Ethernet I/O

 

CAN I/O Pin Select (FCANIO) – Настройка портов вывода CAN модуля
FCANIO = OFF Alternate CAN I/O
FCANIO = ON Default CAN I/O

 

USB USID Selection (FUSBIDIO)
FUSBIDIO = OFF Controlled by Port Function
FUSBIDIO = ON Controlled by the USB Module

 

USB VBUS ON Selection (FVBUSONIO)
FVBUSONIO = OFF Controlled by Port Function
FVBUSONIO = ON Controlled by USB Module

 

PLL Input Divider (FPLLIDIV) настройка предварительного делителя тактовой частоты. В этом делители необходимо выбрать такой коэффициент деления, чтобы после него тактовая была пределах от 4 до 5 МГц. Рекомендую выбирать вариант 4 МГц. Например, внешний генератор 8 Мгц, нам надо выбрать делитель на 2 FPLLIDIV = DIV_2.
FPLLIDIV = DIV_1 1x Divider
FPLLIDIV = DIV_2 2x Divider
FPLLIDIV = DIV_3 3x Divider
FPLLIDIV = DIV_4 4x Divider
FPLLIDIV = DIV_5 5x Divider
FPLLIDIV = DIV_6 6x Divider
FPLLIDIV = DIV_10 10x Divider
FPLLIDIV = DIV_12 12x Divider

 

PLL Multiplier (FPLLMUL) Настройка умножителя частоты. Тут необходимо выбрать такой множитель, чтобы частота не превышала максимальную рабочую (для варианта когда необходима максимальная производительность). Но тут надо понимать чем выше рабочая частота тем выше потребление, поэтому необходимо выбирать компромисс. Если мы все таки выбираем максимальную производительность, то например, надо 4 МГц * 20 – и мы получаем 80 МГц FPLLMUL = MUL_20.
FPLLMUL = MUL_15 15x Multiplier
FPLLMUL = MUL_16 16x Multiplier
FPLLMUL = MUL_17 17x Multiplier
FPLLMUL = MUL_18 18x Multiplier
FPLLMUL = MUL_19 19x Multiplier
FPLLMUL = MUL_20 20x Multiplier
FPLLMUL = MUL_21 21x Multiplier
FPLLMUL = MUL_24 24x Multiplier

 

USB PLL Input Divider (UPLLIDIV) настройка тактовой частоты USB модуля.
UPLLIDIV = DIV_1 1x Divider
UPLLIDIV = DIV_2 2x Divider
UPLLIDIV = DIV_3 3x Divider
UPLLIDIV = DIV_4 4x Divider
UPLLIDIV = DIV_5 5x Divider
UPLLIDIV = DIV_6 6x Divider
UPLLIDIV = DIV_10 10x Divider
UPLLIDIV = DIV_12 12x Divider

 

USB PLL Enable (UPLLEN)
UPLLEN = ON Enabled
UPLLEN = OFF Disabled and Bypassed

 

System PLL Output Clock Divider (FPLLODIV)
FPLLODIV = DIV_1 PLL Divide by 1
FPLLODIV = DIV_2 PLL Divide by 2
FPLLODIV = DIV_4 PLL Divide by 4
FPLLODIV = DIV_8 PLL Divide by 8
FPLLODIV = DIV_16 PLL Divide by 16
FPLLODIV = DIV_32 PLL Divide by 32
FPLLODIV = DIV_64 PLL Divide by 64
FPLLODIV = DIV_256 PLL Divide by 256

 

Oscillator Selection Bits (FNOSC)
FNOSC = FRC Fast RC Osc (FRC)
FNOSC = FRCPLL Fast RC Osc with PLL
FNOSC = PRI Primary Osc (XT,HS,EC)
FNOSC = PRIPLL Primary Osc w/PLL (XT+,HS+,EC+PLL)
FNOSC = SOSC Low Power Secondary Osc (SOSC)
FNOSC = LPRC Low Power RC Osc (LPRC)
FNOSC = FRCDIV16 Fast RC Osc w/Div-by-16 (FRC/16)
FNOSC = FRCDIV Fast RC Osc w/Div-by-N (FRCDIV)

 

Secondary Oscillator Enable (FSOSCEN)
FSOSCEN = OFF Disabled
FSOSCEN = ON Enabled

 

Internal/External Switch Over (IESO)
IESO = OFF Disabled
IESO = ON Enabled

 

Primary Oscillator Configuration (POSCMOD)
POSCMOD = EC External clock mode
POSCMOD = XT XT osc mode
POSCMOD = HS HS osc mode
POSCMOD = OFF Primary osc disabled

CLKO Output Signal Active on the OSCO Pin (OSCIOFNC)

OSCIOFNC = OFF Disabled
OSCIOFNC = ON Enabled
Peripheral Clock Divisor (FPBDIV)
FPBDIV = DIV_1 Pb_Clk is Sys_Clk/1
FPBDIV = DIV_2 Pb_Clk is Sys_Clk/2
FPBDIV = DIV_4 Pb_Clk is Sys_Clk/4
FPBDIV = DIV_8 Pb_Clk is Sys_Clk/8
Clock Switching and Monitor Selection (FCKSM)
FCKSM = CSECME Clock Switch Enable, FSCM Enabled
FCKSM = CSECMD Clock Switch Enable, FSCM Disabled
FCKSM = CSDCMD Clock Switch Disable, FSCM Disabled
Watchdog Timer Postscaler (WDTPS)
WDTPS = PS1 1:1
WDTPS = PS2 1:2
WDTPS = PS4 1:4
WDTPS = PS8 1:8
WDTPS = PS16 1:16
WDTPS = PS32 1:32
WDTPS = PS64 1:64
WDTPS = PS128 1:128
WDTPS = PS256 1:256
WDTPS = PS512 1:512
WDTPS = PS1024 1:1024
WDTPS = PS2048 1:2048
WDTPS = PS4096 1:4096
WDTPS = PS8192 1:8192
WDTPS = PS16384 1:16384
WDTPS = PS32768 1:32768
WDTPS = PS65536 1:65536
WDTPS = PS131072 1:131072
WDTPS = PS262144 1:262144
WDTPS = PS524288 1:524288
WDTPS = PS1048576 1:1048576
 Watchdog Timer Enable (FWDTEN)
FWDTEN = OFF WDT Disabled (SWDTEN Bit Controls)
FWDTEN = ON WDT Enabled
Background Debugger Enable (DEBUG)
DEBUG = ON Debugger is enabled
DEBUG = OFF Debugger is disabled
ICE/ICD Comm Channel Select (ICESEL)
ICESEL = ICS_PGx1 ICE EMUC1/EMUD1 pins shared with PGC1/PGD1
ICESEL = ICS_PGx2 ICE EMUC2/EMUD2 pins shared with PGC2/PGD2
Program Flash Write Protect (PWP)
PWP = OFF Disable
PWP = PWP4K First 4K
PWP = PWP8K First 8K
PWP = PWP12K First 12K
PWP = PWP16K First 16K
PWP = PWP20K First 20K
PWP = PWP24K First 24K
PWP = PWP28K First 28K
PWP = PWP32K First 32K
PWP = PWP36K First 36K
PWP = PWP40K First 40K
PWP = PWP44K First 44K
PWP = PWP48K First 48K
PWP = PWP52K First 52K
PWP = PWP56K First 56K
PWP = PWP60K First 60K
PWP = PWP64K First 64K
PWP = PWP68K First 68K
PWP = PWP72K First 72K
PWP = PWP76K First 76K
PWP = PWP80K First 80K
PWP = PWP84K First 84K
PWP = PWP88K First 88K
PWP = PWP92K First 92K
PWP = PWP96K First 96K
PWP = PWP100K First 100K
PWP = PWP104K First 104K
PWP = PWP108K First 108K
PWP = PWP112K First 112K
PWP = PWP116K First 116K
PWP = PWP120K First 120K
PWP = PWP124K First 124K
PWP = PWP128K First 128K
PWP = PWP132K First 132K
PWP = PWP136K First 136K
PWP = PWP140K First 140K
PWP = PWP144K First 144K
PWP = PWP148K First 148K
PWP = PWP152K First 152K
PWP = PWP156K First 156K
PWP = PWP160K First 160K
PWP = PWP164K First 164K
PWP = PWP168K First 168K
PWP = PWP172K First 172K
PWP = PWP176K First 176K
PWP = PWP180K First 180K
PWP = PWP184K First 184K
PWP = PWP188K First 188K
PWP = PWP192K First 192K
PWP = PWP196K First 196K
PWP = PWP200K First 200K
PWP = PWP204K First 204K
PWP = PWP208K First 208K
PWP = PWP212K First 212K
PWP = PWP216K First 216K
PWP = PWP220K First 220K
PWP = PWP224K First 224K
PWP = PWP228K First 228K
PWP = PWP232K First 232K
PWP = PWP236K First 236K
PWP = PWP240K First 240K
PWP = PWP244K First 244K
PWP = PWP248K First 248K
PWP = PWP252K First 252K
PWP = PWP256K First 256K
PWP = PWP260K First 260K
PWP = PWP264K First 264K
PWP = PWP268K First 268K
PWP = PWP272K First 272K
PWP = PWP276K First 276K
PWP = PWP280K First 280K
PWP = PWP284K First 284K
PWP = PWP288K First 288K
PWP = PWP292K First 292K
PWP = PWP296K First 296K
PWP = PWP300K First 300K
PWP = PWP304K First 304K
PWP = PWP308K First 308K
PWP = PWP312K First 312K
PWP = PWP316K First 316K
PWP = PWP320K First 320K
PWP = PWP324K First 324K
PWP = PWP328K First 328K
PWP = PWP332K First 332K
PWP = PWP336K First 336K
PWP = PWP340K First 340K
PWP = PWP344K First 344K
PWP = PWP348K First 348K
PWP = PWP352K First 352K
PWP = PWP356K First 356K
PWP = PWP360K First 360K
PWP = PWP364K First 364K
PWP = PWP368K First 368K
PWP = PWP372K First 372K
PWP = PWP376K First 376K
PWP = PWP380K First 380K
PWP = PWP384K First 384K
PWP = PWP388K First 388K
PWP = PWP392K First 392K
PWP = PWP396K First 396K
PWP = PWP400K First 400K
PWP = PWP404K First 404K
PWP = PWP408K First 408K
PWP = PWP412K First 412K
PWP = PWP416K First 416K
PWP = PWP420K First 420K
PWP = PWP424K First 424K
PWP = PWP428K First 428K
PWP = PWP432K First 432K
PWP = PWP436K First 436K
PWP = PWP440K First 440K
PWP = PWP444K First 444K
PWP = PWP448K First 448K
PWP = PWP452K First 452K
PWP = PWP456K First 456K
PWP = PWP460K First 460K
PWP = PWP464K First 464K
PWP = PWP468K First 468K
PWP = PWP472K First 472K
PWP = PWP476K First 476K
PWP = PWP480K First 480K
PWP = PWP484K First 484K
PWP = PWP488K First 488K
PWP = PWP492K First 492K
PWP = PWP496K First 496K
PWP = PWP500K First 500K
PWP = PWP504K First 504K
PWP = PWP508K First 508K
PWP = PWP512K First 512K
Boot Flash Write Protect bit (BWP) защита области загрузчика от перезаписи.
BWP = ON Protection Enabled
BWP = OFF Protection Disabled
Code Protect (CP) защита кода программы от чтения через программатор.
CP = ON Protection Enabled
CP = OFF Protection Disabled

 


PIC32 – описание регистров портов ввода вывода


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

В описываемом контроллере PIC32MX795F512H присутствует 6 портов, доступны следующие порты

Порт RB  доступные разряды 0-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15
Порт RC доступные разряды 12-13-14-15
Порт RD доступные разряды 0-1-2-3-4-5-6-7-8-9-10-11
Порт RE доступные разряды 0-1-2-3-4-5-6-7
Порт RF доступные разряды 0-1-3-4-5
Порт RG доступные разряды 2-3-6-7-8-9

Регистры управления и контроля, по умолчанию (состояние при подаче описания) необходимо смотреть в описании конкретного контроллера.

TRISх – регистр управления направлением передачи цифровых данных. Пример инициализации, все выводы на передачу данных из микроконтроллера, кроме RB0 на ввод информации, представления в двоичном виде более наглядно дает представление какой разряд настроен на какое направление. И в таком варианте мы одной командой настраиваем сразу весь порт.

PORTх – регистр информации о состоянии сигналов на выводах порта микроконтроллера. Считывая информацию с этого регистра мы можем увидеть какие сигналы реально присутствуют на выводах порта. Пример инициализации порта. В порт можно писать, при этом компилятор переопределяет запись в регистр LAT.

LATх – регистр управления состоянием выходного буфера, регистр передаваемых данных. Запись 1 в этот регистр позволяет установить высокий уровень на выходе порта, 0 – в низкий. Пример инициализации порта:

ODCх – регистр управления для переключение порта для функции “открытого коллектора” или стока. Многие приложения требуют для подключения в варианте “замыкания” внешнего сигнала на массу, без возможности подачи в линию высокого уровня.

CNPUE – регистр подключения к выводу порта подтягивающего резистора. При установки соответствующего разряда в 1 на соответствующем входе подключается подтягивающий резистор и соответственно при чтение данных с этого порта будет считываться высокий уровень. инициализация регистра – отключить все резисторы.

Внимание, как определить какой бит регистра соответствует какому выводу. На схеме микроконтроллера при описании выводов есть обозначение CN. Например, соответствие обозначение CNPUE2 соответствует на схеме CN2.

Нововведением – это регистры установки, сброса и инверсии бита порта SET, INV, CLR. Эти регистры позволяют одной операций выполнить необходимую функцию, подобными регистрами обладают многие регистры микроконтроллера, для установки, сброса или инверсии необходимо использовать маску, значение в маске “1” оказывает воздействие на  текущий бит, если “0” значение бита не изменяется.

Написание регистров на примере регистра порта В – LATBSET, LATBCLR, LATBINV.

Например, установить в 1 на выводе порта RB13, биты в состоянии 1 устанавливаются, в состоянии 0 не изменяются.

Сбросить в 1 на выводе порта RB13, биты в состоянии 1 устанавливаются, в состоянии 0 не изменяются.

Инвертировать в 1 на выводе порта RB13, биты в состоянии 1 устанавливаются, в состоянии 0 не изменяются.

Пример:

 

Регистр контроля изменения состояния на порту микроконтроллера.

CNCON регистр управления

В этом регистре все го два бита управления. Бит ON – включает или выключает функцию контроля, бит SIDL – разрешает работу функции в режиме ожидания (idle). например, в программе

CNEN регистр разрешения по активации функции по изменения состояния по конкретным входам. Для нашего микроконтроллера это выводы (для других контроллеров смотрите описание) по умолчанию все отключены, запись – 1 активирует функцию контроля.

CNPUE – регистр разрешения подтягивающих резисторов на входах

название – вывод
CN0             48
CN1             47
CN2             16
CN3             15
CN4             14
CN5             13
CN6             12
CN7             11
CN8             4
CN9             5
CN10           6
CN11            8
CN12           30
CN13           52
CN14           53
CN15           54
CN16           55
CN17           31
CN18           32

продолжение следует…


Подключение PIC32


PIC32MX795F512H

Схема подключения. При подключении, для фильтрации, необходимо использовать высокочастотные керамические конденсаторы. Номинал на рабочее напряжение 20V, номиналом 0,1 и 0,001 мкф.

svetomoozika_01

Для цепи VCAP необходимо использовать танталовый конденсатор 4.7-50.0 mkF на 6 вольт, Я использовал керамику на 10,0 мкФ. Цепь сброса состоит из двух резисторов 1 и 10 кОм и конденсатора 0,1 мкФ.

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

Вариант подключения микроконтроллера со схемой питания, подключения USB соединителя, соединителя для внутрисхемного программирования:

catcatcat_pic32_01

Вывод RBO в дальнейшем будет использоваться для описания работы АЦП. Для контроля работы внутреннего стабилизатора на выводе VCAP должно быть 1,8 вольта.


Изучаем PIC32, компилятор XC32


Обучение начнем с версии корпуса на 64 вывода PIC32MX795F512H.

Для изучение рекомендую использовать макетную плату проекта ИЛЛИССИ CHI0040

illissi04

Обозначение выводов


Статьи по изучению PIC32


  1. Подключение питания и требования к установки фильтрующих конденсаторов.
  2. Подключение микроконтроллера к дебагеру, для отладки и внутрисхемного программирования.
  3. PIC32 – конфигурирование контроллера
  4. PIC32 – описание регистров портов ввода вывода
  5. PIC32 – первая программа
  6. PIC32 – сторожевой таймер
  7. PIC32 – “Привет мир”
  8. PIC32 – прерывания (кратко)
  9. PIC32 – SPI
  10. PIC32 – TIMERs
  11. PIC32 – Output Compare
  12. PIC32 – ADC
  13. PIC32 – PIC32 – Формат данных
  14. PIC32 – графическая библиотека для OLED дисплея
  15. PIC32 – DMA + ADC
  16. PIC32 – Дистанционное управление на ИК (простая реализация).
  17. PIC32 – MPLAB® Harmony – или как это просто! Часть 1. 
  18. PIC32 – MPLAB® Harmony – или как это просто! Часть 2. 
  19. PIC32 – MPLAB® Harmony – или как это просто! Часть 3. 
  20. PIC32 – MPLAB® Harmony – или как это просто! Часть 4.