Так как используя MCC мы можем его использовать со своими библиотеками, поэтому настало время и свое создать.

Для начала откроем наш заголовочный файл в нем очень много букв:

По этому. да простит нас майкрочип, почистим его, изменим и оставим только:

сразу скажем для чего нужна конструкция

Она необходима, чтобы компилятор при использовании нашей библиотеки добавил функции только один раз в проект.

Файл I2C.c совершенно чисты, в него добавим заголовок

С начала необходимо активировать модуль MSSP в режиме I2C (это актуально для 8 битной серии). Для этого необходимо настроить регистры (это все будет актуально для нашего микроконтроллера и для любого 8 битного микроконтроллера)

Что первое необходимо знать в работе I2C  это, то что при работе на шине существует два логических состояния. Это состояние СТАРТ скорого начинаются все операции транзакций по шине, состояние СТОП, при формировании которого все передачи прекращаются. Есть дополнительное состояние РЕСТАРТ предназначенное для формирования транзакций, когда необходимо обратиться к конкретному регистру к устройству на шине I2C для чтения его.

Создадим эти функции с основой на XC8. Более того будем создавать для устройств которых адрес 7 бит. Для начала необходимо  определить состояние активности модуля, для работы с модулем нам необходимо знать, что модуль не занят работой с шиной.

Добавим описание функции в заголовок, а саму функцию в рабочий файл

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

При варианте обращения к чтению конкретного регистра в устройстве на шине, понадобиться операция рестарта, для этого создадим функцию рестарт:

Далее добавим функцию записи байта:

Функцию чтения байта, которая предусматривает, что будет дальнейшее чтение:

Функцию чтения последнего байта и указания внешнему устройству, что дальнейшее чтение прекращается:


Комбинируя эти функции мы можем создать различные варианты чтения и записи информации с устройств расположенных на шине I2C.

На этом этапе подразумевается, что все, что мы говорили мы вписали в наши файлы библиотеки, как это выглядит можно саму библиотеку скачать здесь:


Наша цель это оживить ОЛЭД индикатор, для этого нам предстоит еще пару библиотек. Первая это библиотека, это инициализация и включение индикатор, а также для вывода элементарных примитивов, и символов. Вторая это для вывода изображений.

В нашем индикаторе установлен драйвер SSD1305, изучив описание драйвера, создадим функции ориентированные на этот драйвер.  Описание этой библиотеки думаю будет не интересна, но отметим основные особенности управления индикатором. Сам индикатор идет с завода изготовителя настроенного для работы с параллельным интерфейсом, который позволяет все функции драйвера, но для него необходимо довольно большое количество выводов микроконтроллера,  у нас на нажмем варианте такого нет, поэтому необходимо перепаять резисторы для настройки драйвера для работы с шиной I2C. Что и как делать читаем здесь.

Обратите внимание, что при использовании последовательных шин в драйвер можно только писать данные, но для работы шины I2C все таки соединить два входа индикатора для возможности формирования индикатор ответа.

Необходимо организовать управление сбросом индикатор и управление высоковольтным преобразователем, Если кому интересно, то ОЛЭД матрица для своей работы требует для работы более высокого напряжения от 9 до 12 вольт, для этого и необходим повышающий DC/DC конвертер (он собран на дополнительной плате индикатора). Начать процедуру инициализации драйвера только после подачи высокого напряжения на матрицу.



 Добавим библиотеку в наш проект, для этого скопируем файлы библиотеки SSD1309_I2C в проект. Папка нашего проекта, будут выглядеть так:

Подключим библиотеку к нашему проекту, сначала добавим исполнительный файл, через подключение папки:

Откроется диалоговое окно, нажимает кнопку добавить папку:

Выберем папку библиотеки:

Добавим её проект, в проекте (Select, Add), в проекте появиться папка:

Проделаем, тоже самое для подключения заголовка библиотеки, для этого установим курсор на папке Header Files

Повторим всю процедуру с добавлением папки аналогичную, как это делали для рабочего файла:

Но папка заголовка добавляется пустой, для добавления файла дополнительно проедаем процедуру добавления файла:

Выберем файл заголовка:

Нажмем клавишу выбрать, в проекте появиться файл:

Следующий этап настроить, т.е сконфигурировать наши библиотеки под нашу схему.

Настройка I2C.

В библиотеку надо передать параметры, а тактовой частоте, это необходимо для формирования скорости шины I2C. Значение рабочей частоты у на прописано файле mcc.h. Для этого добавим в заголовочный файл, строку

Необходимо определить к каким портам подключен модуль MSSP  в режиме I2C, в нашем микроконтроллере, для этого порты к которым подключен модуль I2C должны быть настроены на вход, и работать как цифровые порты ввода вывода (отключим аналоговые входы). В файле I2C.c в функции инициализации добавим строки:

Библиотека _SSD1309_I2C заточена, под шину I2C и предназначена, только для вывода символов на дисплей. Почему только символов?

Проблема последовательных шин в простых, монохромных  графических дисплеях, где запись идет по 8 бит за один раз.

Дело в том, чтобы полноценно организовать графику, необходимо, при выполнении записи, организовать чтение данных с дисплея, что бы понять, что в этой области уже записано, это необходимо, для выполнения наложения новой графики. Но шина I2C в драйвере SSD1309 однонаправленная и не позволяет читать данные с дисплея.

Выход из этого положения может быть сделан, формирование в памяти контроллера буфера, в который будут одновременно записываться данные которые передаются в дисплей и в нем будет храниться копия изображения на дисплеи. И при необходимости можно будет из него выполнить чтение для получения информации о изображении на дисплеи. Но в нашем микроконтроллере памяти меньше всего 512 байт, а для дисплея 128*64, необходимо 128*8*=910 байт. Т.е. опять неудача.

Конечно можно поставить внешнюю память, на эту же шину, но это не входит в тему этого урока.

Поэтому у нас остается только одна возможность вывода только символьной информации, кодировка W1251 (надо не забывать создавать проекты именно в этой кодировке), в этой библиотеки будут доступны символы трех языков English, Український и Русский.


В основном файле нашего проекта добавим строки подключения наших библиотек:

В коде программы добавим строки инициализации модуля MSSP и драйвера ОЛЭД-дисплея.

Для проверки и тестирования, всё ли у нас работает, добавим классические строки:

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

А в итоге мы должны получить на дисплее вот такое:


Проект



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


  • ESP8266 применение в проектахESP8266 применение в проектах
    ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT команд. Все требования по обмену данными, между устройствами, …
  • ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302ch-4060 – регулятор температуры и влажности на датчике DHT11/DHT22/AM2302
    На плате ch-4000 очень легко собрать устройство регулятора температуры и влажности. Датчик DHT11  самый недорогой вариант для создания такого устройства, правда точность его не велика, но для бытовых устройств он даже …
  • Проект с использованием MCC часть 06Проект с использованием MCC часть 06
    Изменим схему следующим образом добавим две тактовые кнопки BT1 и BT2. Теперь переключимся на конфигурацию выводов, для этого сделаем двойной клик в окне Ресурсы проекта на Pin Module. В окне Pin …
  • Moving average – скользящее среднееMoving average – скользящее среднее
    Скользящая средняя, скользящее среднее (англ. moving average, MA) — общее название для семейства функций, значения которых в каждой точке определения равны среднему значению исходной функции за предыдущий период. Скользящие средние обычно используются с данными временных рядов для сглаживания краткосрочных колебаний …
  • PIC18 – System ArbitrationPIC18 – System Arbitration
    Системный арбитр. Разрешает доступ к памяти между выборами уровнями системы (т.е. Main, Interrupt Service Routine) и выбором периферийных устройств (т.е. DMA и Scanner) на основе назначенных пользователем приоритетов. Каждый из уровней …
  • Просто о внешних переменныхПросто о внешних переменных
     Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как внешние. В …
  • Гаджеты для домашней автоматики – Датчик приближенияГаджеты для домашней автоматики – Датчик приближения
    Управление светодиодным освещением – Датчик приближения. Данный гаджет предназначен для управления внутренним освещением мебели. Датчик позволяет определить закрытие или открытие дверцы или ящика и при этом включать или выключать освещение. …
  • MAX7219/21 и 8х8 LED дисплеиMAX7219/21 и 8х8 LED дисплеи
    MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно Метки:MAX7219, MAX7221
  • ch-светомузыка и AK4113ch-светомузыка и AK4113
    Пришло время вернуться к светомузыке. На сегодня использование аналогового входа стало непрактичным, на сегодня необходимо использовать S/PDIF и Toslink. С этим надо было как то разобрать, что это такое, так …
  • Проект с использованием MCC часть 02Проект с использованием MCC часть 02
    Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем тактовый генератор. …



Tagged with →  
Share →
Translate »

Copyright © Catcatcat electronics 2013-2019. Все права защищены.
Копирование разрешается только с указанием активной ссылки на правообладателя.

e-mail: catcatcat.electronics@gmail.com