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

Views: 773


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

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

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


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

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

cat_max740401

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

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

OUTPUT_COMPARE01

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


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


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

  • Униполярный шаговый двигательУниполярный шаговый двигатель
    Views: 2219     В приводах различных устройств часто применяются шаговые двигатели, Шаговый двигатели различают двух типов униполярные – когда обмотки коммутируются током текущим только в одну сторону, например при …
  • ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302
    Views: 2435 На плате ch-4000 очень легко собрать устройство регулятора температуры и влажности. Датчик DHT11  самый недорогой вариант для создания такого устройства, правда точность его не велика, но для бытовых устройств …
  • Униполярный шаговый двигатель – часть 2Униполярный шаговый двигатель – часть 2
    Views: 815 В этой части только итог и версия 2.0 универсальной, которая позволяет управлять шаговым двигателем во всех трех режимах и 3.0 специальной библиотеки только для одного полушагового режима. В …
  • Стабилизатор тока для светодиодов SN3350Стабилизатор тока для светодиодов SN3350
    Views: 2601 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V  драйвер светодиодов с внутренним ключом  SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
  • Проект с использованием MCC часть 09Проект с использованием MCC часть 09
    Views: 913   Эта часть будет посвящена созданию практического проекта управления освещение. Тех задание: Два выхода управления ШИМ – светодиодным освещением. Две кнопки управления, каждая кнопка управляет, своим каналом, логика самая …
  • Дифференциальный терморегуляторДифференциальный терморегулятор
    Views: 4004 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …
  • DS18B20 – удаленный контроль температурыDS18B20 – удаленный контроль температуры
    Views: 3042 Контроль температуры с использованием датчиков температуры DS18B20 и платы ILLISSI-4B-09-primum Проект позволяет подключать к плате ILLISSI-4B-09-primum до 16 датчиков температуры DS18B20, удаленных более 300 метров,  и выводить информацию …
  • TM1650 драйвер LED семисегментного индикатораTM1650 драйвер LED семисегментного индикатора
    Views: 17849 Китайский производитель Shenzhen Titan Micro Electronics Co., Ltd.  Выпускает широкую линейку драйверов управления светодиодными дисплеями, которые позволяют разгрузить микроконтроллер для основной работы, главная особенность этих драйверов не только …
  • MCC – K42 – настройка модуля DMAMCC – K42 – настройка модуля DMA
    Views: 772 MCC – в версии v.3.95.0 и начиная ядра 4.85.0 конфигуратор предоставляет графический интерфейс для настройки модуля DMA. Для начала: Посмотреть какая версия МСС можно в закладке версии, если …
  • Бегущие огни (ch-bo-36)Бегущие огни (ch-bo-36)
    Views: 2438 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …

PIC32 – SPI

Views: 670


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

Cat_SPI_01схема в PDF 

Значок

PIC32 – SPI - схема подключения 45.28 KB 282 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 часть 02Проект с использованием MCC часть 02
    Views: 2295 Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем …
  • Датчик контроля протечки воды ch-c0020Датчик контроля протечки воды ch-c0020
    Views: 1955 Как здорово летом под теплым дождем с тобою вдвоем оказаться. Как классно по лужам бежать босиком, с тобою играть и смеяться! Но совсем грустно оказаться под таким дождем, который течет с …
  • 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA20412-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204
    Views: 830 Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении …
  • NS108-5050-16bit от NewstarNS108-5050-16bit от Newstar
    Views: 599 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …
  • Altium Designer my setup system and project structure V23.3Altium Designer my setup system and project structure V23.3
    Views: 176 Оновлення бази даних та шаблонів від березня 2023 року. Updating the database and templates from March 2023. Altium Designer my Libraries, Project templates, System settings by Catcatcat. Дивись …
  • Просто о структурах и объединениях в СиПросто о структурах и объединениях в Си
    Views: 2177 Какие задачи нам позволяют решать структуры и объединения? Для разработчика встроенных систем эффективность и компактность кода всегда на первом месте. Если программировании на Ассемблере ты сам определяешь как …
  • Счетчики посетителейСчетчики посетителей
    Views: 1270 Вас сосчитали!? или счетчики посетителей.   Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …
  • MCC – K42 – настройка модуля DMAMCC – K42 – настройка модуля DMA
    Views: 772 MCC – в версии v.3.95.0 и начиная ядра 4.85.0 конфигуратор предоставляет графический интерфейс для настройки модуля DMA. Для начала: Посмотреть какая версия МСС можно в закладке версии, если …
  • USB K-L-line адаптерUSB K-L-line адаптер
    Views: 5989 USB K-L-line адаптер предназначен для связи персонального компьютера с диагностической шиной автомобиля – интерфейс ISO-9141. Этот проект предназначен для сборки недорого устройства с использованием специально для этой цели …
  • Интерактивные LedИнтерактивные Led
    Views: 464 Тема проекта   продолжение следует…. Это может быть интересно


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

Views: 579


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

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

 


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

  • Acquaintance with audio-bluetooth modules F-6888 (BK3254).Acquaintance with audio-bluetooth modules F-6888 (BK3254).
    Views: 2184 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
  • LM317 и светодиодыLM317 и светодиоды
    Views: 7856 LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла …
  • Система AT команд версии V2.0 для ESP8266 и ESP32Система AT команд версии V2.0 для ESP8266 и ESP32
    Views: 12836 Появление нового модуля на базе ESP32 заставило систематизировать систему AT команд, а так же систему обновления и для модулей на базе ESP8266. Начиная с версии v2.0 в ESP8266 …
  • LCD индикаторы на драйвере ML1001LCD индикаторы на драйвере ML1001
    Views: 1890  ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы. …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Views: 2686 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
  • NeoPixel LED and PIC24NeoPixel LED and PIC24
    Views: 646 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …
  • Audio-bluetooth modules BK8000L (noname)Audio-bluetooth modules BK8000L (noname)
    Views: 664 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …
  • WiFi ESP8266 ESP-202 (ESP-12F)WiFi ESP8266 ESP-202 (ESP-12F)
    Views: 7698 Первое знакомство, сначала надо его купить… http://voron.ua/catalog/024404 Схема для подключения и тестирования По схеме ставим две кнопки, сброс и кнопку BT2, для перевода в режим обновления прошивки. Если надо сделать …
  • Ultrasonic Level Meters – ULM –53LUltrasonic Level Meters – ULM –53L
    Views: 721 Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики …
  • CLUBBEST-50-LightCLUBBEST-50-Light
    Views: 277 CLUBBEST-50-LIGHT   Зміст Короткий опис проекту. 1 Опис схемотехніки візуалізатора музики. 2 Аудіо вхід. 3 MCU. 4 Цифровий вихід. 5 Схема живлення MCU. 6 Складання пристрою. 7 Список …

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

Views: 1186


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


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

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


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: 5042


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