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

Views: 770


Для практического развития приведу схему подключения, библиотеку и проект для вывода информации на графический дисплей  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 395 downloads

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

PIC32 - графическая библиотека для OLED дисплея - демо проект 124.48 KB 436 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

Views: 382


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

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

cat_max740401

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

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

OUTPUT_COMPARE01

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


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


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

  • Модуль CAN в микроконтроллерах PIC18Модуль CAN в микроконтроллерах PIC18
    Views: 5720 Введение   CAN последовательный интерфейс связи, который эффективно поддерживает распределенное управление в реальном масштабе времени с высокой помехозащищенностью. Протокол связи полностью определен Robert Bosch GmbH, в спецификации требований …
  • PIC32MZ – Core Timer (библиотека)PIC32MZ – Core Timer (библиотека)
    Views: 545 Переработанные файлы от Microchip, библиотека для работы с Core Timer.
  • NeoPixel LED and PIC24NeoPixel LED and PIC24
    Views: 629 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …
  • Бегущие огни на WS2812BБегущие огни на WS2812B
    Views: 4842 В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Views: 1906 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
  • WiFi ESP8266 ESP-202 (ESP-12F)WiFi ESP8266 ESP-202 (ESP-12F)
    Views: 7677 Первое знакомство, сначала надо его купить… http://voron.ua/catalog/024404 Схема для подключения и тестирования По схеме ставим две кнопки, сброс и кнопку BT2, для перевода в режим обновления прошивки. Если надо сделать …
  • MCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналовMCC PIC24 – модуль OUTPUT COMPARE – в режиме генератора звуковых сигналов
    Views: 614 При проектировании простых устройств автоматики, часто необходимо иметь механизм звукового оповещения. Самый верхний уровень, это формирование голосовых сообщений, но об этом, как то по позже… В самом примитивном …
  • Индикатор кода – RC-5 Protocol PhilipsИндикатор кода – RC-5 Protocol Philips
    Views: 986 Индикатор кода – RC-5 Protocol Philips При конструировании дистанционного управления на инфракрасных лучах для контроля удобно иметь индикатор кодов передаваемых пультом. Плата ch-c3000 позволяет изготавливать устройства с возможностью …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Views: 2678 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
  • Проект с использованием MCC часть 02Проект с использованием MCC часть 02
    Views: 2272 Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем …

PIC32 – SPI

Views: 667


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

Cat_SPI_01схема в PDF 

Значок

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

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

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

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

//
SPI2CON=0;                          // выключить SPI
//

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

//
SPI2CONbits.ENHBUF=1;               // Расширенный буфер
//

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

//
SPI2CONbits.MODE32=0;               // 0 - 8-bit - 16 буферов
//

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

//
SPI2CONbits.MSTEN=1;                // 1 = Master mode
//

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

//
SPI2CONbits.CKP=1;                  // пассивный уровень шины CLOCK высокий
SPI2CONbits.CKE=0;                  // данные передаются от активного к пассивному уровню пассивного к активному уровню
//

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

//
SPI2BRG = 15;                       // 2,5MHz для 80 MHz
//

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

//
SPI2CONbits.ON=1;                   // Включить модуль
//

В общем виде

// настройка SPI
    SPI2CON=0;                          // выключить SPI
    SPI2CONbits.ENHBUF=1;               // Расширенный буфер
    SPI2CONbits.MODE32=0;               // 0 - 8-bit - 16 буферов
    SPI2CONbits.MSTEN=1;                // 1 = Master mode
    SPI2CONbits.CKP=1;                  // пассивный уровень шины CLOCK высокий
    SPI2CONbits.CKE=0;                  // данные передаются от активного к пассивному уровню пассивного к активному уровню
    SPI2BRG = 15;                       // 2,5MHz для 80 MHz
    SPI2CONbits.ON=1;                   // Включить модуль
//

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

//
    SPI2CONbits.STXISEL=0b00;         //
    IFS1bits.SPI2TXIF = 0;            // сбросить флаг прерывания TX
    IEC1bits.SPI2TXIE = 1;            // разрешить прерывания от TX
    IPC7bits.SPI2IP = 3;              // приоритет 3
    IPC7bits.SPI2IS = 0;              // субприоритет уровень 0
//


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


  • Простой цифровой милливольтметр постоянного токаПростой цифровой милливольтметр постоянного тока
    Views: 4083 Простой цифровой вольтметр постоянного тока. Три диапазона измерений с автоматическим переключением 1 – 0,001 – 0,999 V, 2 – 0,01-9,99 V, 3 – 0,1-99,9. Четыре управляемых выхода с возможностью задания функции контроля …
  • AD9833 – Programmable Waveform GeneratorAD9833 – Programmable Waveform Generator
    Views: 2820 Простой генератор звуковых частот на AD9833. Для тестирования БПФ в светомузыке мне нужен был генератор звуковых частот. Я  использовал советский Г3-112, но он себя давно изжил.  Все думал купить …
  • Емкостной сенсорЕмкостной сенсор
    Views: 2986 Изучаем изготовление емкостных сенсоров на PIC-микроконтроллере. Конструкция емкостных сенсоров имеет вид: Емкостные сенсоры строятся по схеме высокочастотного генератора, сам принцип основан на измерение частоты этого генератора. Частота зависит …
  • DS18B20 – удаленный контроль температурыDS18B20 – удаленный контроль температуры
    Views: 3035 Контроль температуры с использованием датчиков температуры DS18B20 и платы ILLISSI-4B-09-primum Проект позволяет подключать к плате ILLISSI-4B-09-primum до 16 датчиков температуры DS18B20, удаленных более 300 метров,  и выводить информацию …
  • Arduino LCD + STONE STVI056WT-01 + Strain gaugeArduino LCD + STONE STVI056WT-01 + Strain gauge
    Views: 448 Author li grey email: greyli1987@outlook.com The strain assessment instrument is used to assess the degree of corresponding muscle strain by obtaining the muscle surface action potential through silver …
  • Мультизоновый индикатор-терморегулятор ch-c3010Мультизоновый индикатор-терморегулятор ch-c3010
    Views: 1164 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре,  температуру на улице, а в погребе (или на балконе) …
  • Бегущие огни (ch-bo-36)Бегущие огни (ch-bo-36)
    Views: 2426 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Views: 2678 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
  • My libraries for Altium DesignerMy libraries for Altium Designer
    Views: 3895 Attention, this version of the database is outdated today. See updates in articles https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure  and https://catcatcat.d-lan.dp.ua/altium-designer-my-setup-system-and-project-structure-v23-2/    My libraries for Altium designer  (Updated V – 29/05/2022) (c) 2021 …
  • Проект с использованием MCC часть 07Проект с использованием MCC часть 07
    Views: 970 Модуль PWM – широтно импульсная модуляция (ШИМ). ПИК контроллеры часто на борту имеют модули ШИМ. На их основе строятся многие узлы управления электро приводами. В нашем варианте мы …


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

Views: 568


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

Catcatcat_led01

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

//-------------------------------------------------------------------------------
    PR1 = 0xFFFF;                           // настройка периода
    T1CONbits.TCKPS = 0b11;                 // 11 = 1:256 prescale value
    T1CONbits.ON = 1;                       // включить
//-------------------------------------------------------------------------------

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

    while(1)
    {
        if(IFS0bits.T1IF == 1)
        {
           IFS0bits.T1IF = 0;            // сброс флага переполнения
           LATBINV = 0b0001000000000000; // мигание светодиодом
        }
        Clear_WDT();                     // сброс сторожевого таймера
    }

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

Значок

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

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

 


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

  • УКВ – радиоприем, часть 2УКВ – радиоприем, часть 2
    Views: 6198 Пришло свободное время решил вторую часть проекта реализовать (правда есть мысль и третью с использование цветного OLED и функцией ch-светомузыки, но это только задумка… Для понимания функций интегрального …
  • Проект с использованием MCC часть 01Проект с использованием MCC часть 01
    Views: 2512 Для изучения MCC я выбрал простой контроллер PIC16F1509. Выбор его был обусловлен богатой новой периферией которую можно изучить. Для начала была собрана схема на макетной плате Внешний вид …
  • OLED RET012864E/REX012864JOLED RET012864E/REX012864J
    Views: 1462 RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как …
  • Простой цифровой вольтметр ch-c3200Простой цифровой вольтметр ch-c3200
    Views: 2499 В этой статье рассмотрен пример создания простого вольтметра постоянного тока на основе печатной платы ch-c0030pcb, а при возможности использования внешнего делителя и вольтметр переменного тока. Дан краткий принцип …
  • ESP8266 применение в проектахESP8266 применение в проектах
    Views: 3539 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …
  • TDA7294 part 1TDA7294 part 1
    Views: 237 TDA7294 має унікальні дані для створення підсилювачів звукової частоти HI-FI класу. Варіант застосування є конфігурація BRIDGE (мостова схема включення), де використовуються два TDA7294, як показано на схематичній діаграмі …
  • Проект с использованием MCC часть 13Проект с использованием MCC часть 13
    Views: 1054 Так как используя MCC мы можем его использовать со своими библиотеками, поэтому настало время и свое создать. Для начала откроем наш заголовочный файл в нем очень много букв: По …
  • LED модуль P10C4V12LED модуль P10C4V12
    Views: 3093 LED панели на обычных регистрах типа 74HC595. Они выпускаются как монохромные так двух и полно цветные, особенность, что они предназначены для текстовой информации и имеют один уровень яркости. Общую яркость …
  • MPLAB® Code ConfiguratorMPLAB® Code Configurator
    Views: 1768 MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект.
  • Регулятор влажности ch-3800Регулятор влажности ch-3800
    Views: 1418   И еще один проект на плате ch-c3xxx –  универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон …

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

Views: 1179


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

Views: 1317


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

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

TRISB =	0b0000000000000001;		// регистр направления данных

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

PORTB =	0;                              // регистр приема данных

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

LATB =	0;                              // регистр передаваемых данных

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

ODCB =	0;                              // регистр настройки открытого коллектора

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

CNPUE   =   0;                              // регистр управления подтягивающими резисторами

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

CNPUE = 0b0000000000000100;                 // установить подтягивающий резистор на входе RB0

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

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

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

PORTBSET = 0b0010000000000000;              // установить RB13 -> 1

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

LATBCLR = 0b0010000000000000;               // сбросить RB13 -> 1

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

LATBINV = 0b0010000000000000;               // инвертировать RB13 -> 1

Пример:

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

#define LED01 0x1000

//включаем его на порту В

LATBSET = LED01

 

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

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

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

    //регистр контроля - функция по изменению состояния на входах
    CNCONbits.ON=0;                         // отключен
    CNCONbits.SIDL=0;                       // в режиме ожидания не активна

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

Views: 1088


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

Views: 4988


Обучение начнем с версии корпуса на 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.