Подключение ЦАП MCP4921 к микроконтроллеру PIC16F877A


Цифро-аналоговые преобразователи (ЦАП) находят широкое применение в современной электронике, в основном, для синтеза звуков. Но также они используются для управления двигателями, регулировки силы свечения светодиода, аудио усилителях, видео декодерах и т.д. В данной статье мы рассмотрим подключение ЦАП MCP4921 к микроконтроллеру PIC16F877A. Результат цифро-аналогового преобразования мы будем отображать на экране ЖК дисплея 16х2.

Ранее на нашем сайте мы рассматривали подключение модуля ЦАП к платам Raspberry Pi, Arduino и STM32 Blue Pill.

Необходимые компоненты

  1. Микроконтроллер PIC16F877A (купить на AliExpress).
  2. Модуль ЦАП MCP4921 (купить на AliExpress).
  3. Программатор PICkit 3 (купить на AliExpress).
  4. ЖК дисплей 16х2 (купить на AliExpress).
  5. Кварцевый генератор 20 МГц (купить на AliExpress).
  6. Конденсаторы 33 пФ (2 шт.) (купить на AliExpress).
  7. Резисторы 2 кОм, 4,7 кОм (купить на AliExpress).
  8. Мультиметр для измерения выходного напряжения.
  9. Источник питания 5V.
  10. Макетная плата.
  11. Соединительные провода.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Принципы работы ЦАП MCP4921

Модуль MCP4921 представляет собой 12-битный ЦАП, то есть работает с 12-битным разрешением. Это значит что на своем выходе он может формировать 4096 различных значений. Используя это и значение опорного напряжения можно легко рассчитать шаг преобразования. Если у нас опорное напряжение равно 5V, то, используя формулу 5/4095, получим что шаг ЦАП равен 0.00122100122 милливольт. То есть изменение значения на входе ЦАП на единицу будет приводить к изменению напряжения на его выходе на величину равную 0.00122100122 милливольт.

Распиновка микросхемы MCP4921 представлена на следующем рисунке. Как видим, она имеет 8 контактов.

Распиновка микросхемы MCP4921

Назначение контактов ЦАП MCP4921

С микроконтроллерами ЦАП MCP4921 обменивается информацией используя протокол SPI. Более подробно об использовании протокола SPI в микроконтроллерах PIC16F877A вы можете прочитать в этой статье.

Для передачи данных и команд модулю ЦАП MCP4921 необходимо понимать принципы работы его регистра команд. Структура данного регистра представлена на следующем рисунке.

Структура регистра команд ЦАП MCP4921

Регистр команд представляет собой 16-битный регистр. Биты с 15 по 12 данного регистра используются для настройки команд. В данном проекте мы будем использовать конфигурацию данных бит, представленную в следующей таблице.

Номер бита Конфигурация Значение конфигурации
Bit 15 DACA 0
Bit 14 Unbuffered 0
Bit 13 1x(VOUT*D/4096) 1
Bit 12 бит управления выходной мощностью 1

Для того чтобы настроить регистр команд на эту конфигурацию, ему необходимо в двоичном виде передать 0011, а следом за ними передать информацию для бит с D11 до D0. То есть ЦАП MCP4921 необходимо передать 16 бит данных в формате 0011 xxxx xxxx xxxx, где первые 4 бита являются наиболее значащими битами (MSB), а остальные – наименее значащими битами (LSB). Более подробно это показано на следующей временной диаграмме.

Временная диаграмма передачи данных ЦАП MCP4921

Как видно из представленной диаграммы, на контакт CS необходимо подавать уровень low на все время передачи команды модулю MCP4921.

Схема проекта

Схема подключения ЦАП MCP4921 к микроконтроллеру PIC16F877A представлена на следующем рисунке.

Схема подключения ЦАП MCP4921 к микроконтроллеру PIC16F877AВнешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

Объяснение программы для микроконтроллера PIC

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Первым делом в программе настроим биты конфигурации микроконтроллера PIC.

Далее подключим необходимые заголовочные файлы, укажем частоту кварцевого генератора и контакт, к которому подключен контакт CS модуля ЦАП.

Запрограммируем функцию SPI_Initialize_Master(), в которой будут задаваться настройки для работы с протоколом SPI. Регистр SSPSTAT конфигурируется таким образом, чтобы входные данные дискретизировались в конце времени выходных данных, а частота синхронизации SPI настраивается таким образом, чтоб передача осуществляется во время переключение между активным и незанятым/нерабочим (idle). Остальные настройки для работы с протоколом SPI будут стандартными. В комментариях указаны страницы даташита на микроконтроллер, в которых описаны эти настройки.

Также немного модифицируем функцию SPI_Write() таким образом, что передача данных будет происходить после очистки буфера.

Основной частью нашей программы будет драйвер для работы с модулем  MCP4921. Его код немного сложноват поскольку команды и цифровые данные объединяются вместе в 16-битный формат для передачи по протоколу SPI.

В основной функции программы main в цикле loop мы последовательно на вход ЦАП подаем такие значения, чтобы на его выходе сформировались уровни напряжений 1V, 2V, 3V, 4V и 5V. Для этого мы необходимое значение выходного напряжения делим на величину 0.0012210012210012 милливольт.

Тестирование работы проекта

Тестирование работы ЦАП мы производили с помощью мультиметра. Результаты тестирования вы можете посмотреть на следующих рисунках.

Результаты тестирования ЦАП

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы

Видео, демонстрирующее работу проекта

(1 голосов, оценка: 5,00 из 5)
Загрузка...
961 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *