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

Visits: 745


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

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

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

Visits: 363


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

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

cat_max740401

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

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

OUTPUT_COMPARE01

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


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


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

  • CCP – модуль в режиме Compare на примере PIC18CCP – модуль в режиме Compare на примере PIC18
    Visits: 3055 CCP – модуль можно использовать в трех режимах: Capture – позволяет захватывать входной сигнал и определять его параметры (длительность или частоту). Дополнительно управлять внутренними модулями. Compare –  позволяет …
  • Altium Designer my setup system and project structure V23.3Altium Designer my setup system and project structure V23.3
    Visits: 121 Оновлення бази даних та шаблонів від березня 2023 року. Updating the database and templates from March 2023. Altium Designer my Libraries, Project templates, System settings by Catcatcat. Дивись …
  • Ultrasonic Level Meters – ULM –53LUltrasonic Level Meters – ULM –53L
    Visits: 697 Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики …
  • Проект с использованием MCC часть 04Проект с использованием MCC часть 04
    Visits: 1092 Теперь простого горения светиков нам не достаточно, заставим их мигать. Для начала используем первобытно простой способ, но достаточно простой. Используем функции delay, напрягаться откуда они берутся не будем, самое …
  • LED модуль P10C4V12LED модуль P10C4V12
    Visits: 3058 LED панели на обычных регистрах типа 74HC595. Они выпускаются как монохромные так двух и полно цветные, особенность, что они предназначены для текстовой информации и имеют один уровень яркости. Общую яркость …
  • Altium Designer – создание рисунков на печатной платеAltium Designer – создание рисунков на печатной плате
    Visits: 3221   Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
  • Гаджеты для домашней автоматики – Датчик движенияГаджеты для домашней автоматики – Датчик движения
    Visits: 1416 Управление светодиодным освещением – Датчик движения. Данный гаджет предназначен для управления освещением рабочих столов (кухонных столов), освещение прихожих, освещение зеркал в прихожих, автоматическое включение света в коридорах. Датчик позволяет …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Visits: 1830 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
  • УКВ – радиоприем, часть 1УКВ – радиоприем, часть 1
    Visits: 9502 Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. …
  • Мультимедийная сеть – AVC-LAN TOYOTAМультимедийная сеть – AVC-LAN TOYOTA
    Visits: 5661 AVC LAN – протокол обмена данными мультимедийных систем автомобиля. Кодирование данных. При кодировании различаться три типа данных : преамбула – её назначение, это сообщение устройствам на шине, что начинается передача данных. …

PIC32 – SPI

Visits: 646


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

Cat_SPI_01схема в PDF 

Значок

PIC32 – SPI - схема подключения 45.28 KB 271 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
//


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


  • Проект с использованием MCC часть 16Проект с использованием MCC часть 16
    Visits: 1033 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …
  • PIC18 – модуль DMAPIC18 – модуль DMA
    Visits: 1133 Введение   Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной  обработки …
  • CAN – Controller Area NetworkCAN – Controller Area Network
    Visits: 1053 Controller Area Network (CAN) первоначально был создан немецким поставщиком автомобильных систем Робертом Бош в середины 1980-х для автомобильной промышленности как метод для обеспечения возможности надежной последовательной связи. Целью было сделать автомобили более надежными, …
  • MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМMCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ
    Visits: 1082 Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые …
  • WiFi ESP8266 ESP-202 (ESP-12F)WiFi ESP8266 ESP-202 (ESP-12F)
    Visits: 7622 Первое знакомство, сначала надо его купить… http://voron.ua/catalog/024404 Схема для подключения и тестирования По схеме ставим две кнопки, сброс и кнопку BT2, для перевода в режим обновления прошивки. Если надо сделать …
  • LED модуль P10 (1R) V706ALED модуль P10 (1R) V706A
    Visits: 7606 Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа  R-красные, но не верьте паяют светики и зеленые и синие, в общем …
  • NeoPixel LED и PIC18NeoPixel LED и PIC18
    Visits: 1635   Еще раз об управлении светодиодами на драйвере WS2812 и ему подобных. Как известно эти светики управляются по однопроводной шине. Основная особенность, что программно можно описать передачу данных, …
  • MPLAB® Code Configurator and EncoderMPLAB® Code Configurator and Encoder
    Visits: 1389 Еще раз про энкодер… Для некоторых приложений очень удобно и экономически выгодно, для настройки и управления использовать энкодер. Такие энкодеры имеют строенную тактовую кнопку которую можно применить для выбора …
  • Индикатор кода – RC-5 Protocol PhilipsИндикатор кода – RC-5 Protocol Philips
    Visits: 966 Индикатор кода – RC-5 Protocol Philips При конструировании дистанционного управления на инфракрасных лучах для контроля удобно иметь индикатор кодов передаваемых пультом. Плата ch-c3000 позволяет изготавливать устройства с возможностью …
  • Простой оптический сенсор приближенияПростой оптический сенсор приближения
    Оптический сенсор, назначение оптический концевик, для автоматики, бесконтактный выключатель с функцией автоматического отключения...


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

Visits: 551


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

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

 


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

  • Development of temperature control and management systemsDevelopment of temperature control and management systems
    Visits: 39 Catcatcat Electronics Пошта для контакту e-mail: catcatcat.electronics@gmail.com Метки: Altium Designer, MPLAB® Code Configurator, Измерение температуры
  • Емкостной сенсорЕмкостной сенсор
    Visits: 2948 Изучаем изготовление емкостных сенсоров на PIC-микроконтроллере. Конструкция емкостных сенсоров имеет вид: Емкостные сенсоры строятся по схеме высокочастотного генератора, сам принцип основан на измерение частоты этого генератора. Частота зависит …
  • HVLD модуль на примере PIC24FJ128GA204HVLD модуль на примере PIC24FJ128GA204
    Visits: 606 HVLD модуль представляет собой простое устройство, для контроля напряжения питания микроконтроллера или внешнего напряжения (через делитель). Его задача при “выходе” напряжения за заданные пределы сформировать сообщение микроконтроллеру, что …
  • Просто о внешних переменныхПросто о внешних переменных
    Visits: 751  Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
  • PIC18 – модуль DMAPIC18 – модуль DMA
    Visits: 1133 Введение   Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной  обработки …
  • Мультизоновый индикатор-терморегулятор ch-c3010Мультизоновый индикатор-терморегулятор ch-c3010
    Visits: 1139 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре,  температуру на улице, а в погребе (или на балконе) …
  • ESP8266 применение в проектахESP8266 применение в проектах
    Visits: 3496 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …
  • Development Boards PIC18F47Q84Development Boards PIC18F47Q84
    Visits: 525 Microchip тішить новими мікроконтролерами. Особливістю цього MCU – це багата інтелектуальна периферія, що дозволяє вирішувати такі завдання на 8 бітних MCU, які неможливо реалізувати на деяких навіть 32 …
  • Четырех канальный терморегулятор ch-4000Четырех канальный терморегулятор ch-4000
    Visits: 3126  Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать …
  • DS18B20 – удаленный контроль температурыDS18B20 – удаленный контроль температуры
    Visits: 3007 Контроль температуры с использованием датчиков температуры DS18B20 и платы ILLISSI-4B-09-primum Проект позволяет подключать к плате ILLISSI-4B-09-primum до 16 датчиков температуры DS18B20, удаленных более 300 метров,  и выводить информацию …

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

Visits: 1161


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

Visits: 1294


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

В описываемом контроллере 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

Visits: 1070


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

Visits: 4945


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