首页 > 其他分享 >MCP4921DAC芯片硬件设计及驱动代码(PIC单片机硬件SPI模式)

MCP4921DAC芯片硬件设计及驱动代码(PIC单片机硬件SPI模式)

时间:2024-10-22 14:46:06浏览次数:8  
标签:DAC 芯片 引脚 PIC 硬件 SPI 单片机 MCP4921

MCP4921DAC芯片硬件设计及驱动代码(PIC单片机硬件SPI模式)

MCP4921简介

MCP4921 是一款由 Microchip Technology 生产的单通道、12 位数模转换器 (DAC),具有外部电压参考引脚和 SPI 接口。它具有以下主要特点:
12 位分辨率:提供高精度的模拟输出。
单通道电压输出:适用于需要单一输出的应用。
外部电压参考引脚:允许用户使用外部参考电压以提高灵活性。
低功耗:典型工作电流为 175µA,非常适合便携式和电池供电的应用。
SPI 接口:支持高达 20 MHz 的时钟频率,便于与微控制器通信。
快速设定时间:输出设定时间为 4.5 µs,适用于需要快速响应的应用。
多种封装:提供 PDIP、SOIC、MSOP 和 DFN 封装,适应不同的设计需求。
MCP4921 适用于消费类和工业应用,如设定点控制、偏移调整和传感器校准等。
点击查看MCP4921中文数据手册

MCP4921电路设计

MCP4921芯片的外围电路相对简单,实际参考Mikro发布的DAC芯片模块进行设计。
点击查看参考电路图
根据参考电路绘制出电路图如下:
在这里插入图片描述
在完成对MCP4921的电路设计后,就可以对其进行驱动,使用到的单片机为PIC18F56Q71单片机。
PIC18F56Q71 是 Microchip Technology 推出的 8 位微控制器,专为高带宽、混合信号和传感器应用设计。以下是其主要特点:
集成运算放大器:内置两个运算放大器,支持 5.5 MHz 增益带宽。
12 位差分 ADC:具有计算和上下文切换功能,支持高达 43 个外部通道。
多种 DAC:包括一个 10 位 DAC 和两个 8 位 DAC。
高速模拟比较器:提供快速响应的模拟信号比较。
模拟外设管理器:优化使用模拟外设的功耗。
8 位信号路由端口:用于连接数字外设。
多种定时器和 PWM:包括三个 16 位双 PWM 输出和两个 16 位定时器。
直接内存访问 (DMA):四个 DMA 控制器,支持高效数据传输。
低功耗模式:包括睡眠、打盹和空闲模式,优化功耗。
灵活的引脚选择:支持外设引脚选择 (PPS),便于数字信号的引脚映射。
PIC18F56Q71 适用于多种应用场景,如 LED 照明、预测性维护、医疗设备、家居自动化、工业过程控制、汽车和物联网 (IoT) 等。
点击查看PIC18F56Q71数据手册

MCP4921驱动代码

使用MPLAB X IDE v6.20进行开发,代码生成工具为MCC v5.5.1。新建工程后,对单片机的硬件SPI进行配置。
在Device Resource中勾选SPI_Host。
在这里插入图片描述
勾选完成后,在Project Resource与Builder中就可以看到SPI_Host已经添加上了。
在这里插入图片描述
在这里插入图片描述
点击Pin Grid View选项卡,选择SPI对应端口。(这里选择PORTC3为SCK,PORTC4为SDO1,PORTC6为CS口)
在这里插入图片描述
并对管脚进行配置:
在这里插入图片描述
配置完管脚之后,双击Builder选项卡中的SPI1_Host标签,并对SPI1_Host进行配置:

在这里插入图片描述
配置完成后点击Project Resource选项卡里的Generate生成代码。

根据MCP4921的数据手册,编写用户代码。
在这里插入图片描述
在这里插入图片描述
总共命令为16位数据,分为高八位和低八位,可使用SPI1_BufferWrite()函数来发送命令,代码如下:

#define DAC_4_BIT_DATA      0x0F
#define DAC_8_BIT_DATA      0xFF
#define DAC_APPLY_SETTINGS  0x30

uint8_t cmd[2];
uint16_t vout = 0;

int main(void)
{
    SYSTEM_Initialize();

    // If using interrupts in PIC18 High/Low Priority Mode you need to enable the Global High and Low Interrupts 
    // If using interrupts in PIC Mid-Range Compatibility Mode you need to enable the Global Interrupts 
    // Use the following macros to: 

    // Enable the Global Interrupts 
    INTERRUPT_GlobalInterruptEnable(); 

    // Disable the Global Interrupts 
    //INTERRUPT_GlobalInterruptDisable(); 

SPI1_Open(HOST_CONFIG);


    while(1)
    {
        int i = 0;
        for(i = 0; i< 4095;i++)
        {
        
        cmd[ 0 ] = ( i >> 8 ) & DAC_4_BIT_DATA;
        cmd[ 0 ] |= DAC_APPLY_SETTINGS;
        cmd[ 1 ] = i & DAC_8_BIT_DATA;
        CS_SetLow();
        SPI1_BufferWrite(cmd,2);
        CS_SetHigh();
        __delay_ms(100);
        
        }

    }    
}

本段代码的意思为,让MCP4921芯片输出0-3.3V的电压。12位DAC芯片的分辨率为4095。

总结

使用MCC对PIC单片机开发大大减小了开发者的工作量,应用起来非常简单。但是要熟练的运用MCC还需要大家多多使用Microchip的产品进行练习。MCP4921芯片的开发也非常的简单,Microchip公司的芯片使用便捷,外围电路简单,本地化做的非常好,中文数据手册翻译的非常专业,在开发时应多多应用Microchip公司的产品。

标签:DAC,芯片,引脚,PIC,硬件,SPI,单片机,MCP4921
From: https://blog.csdn.net/qq_34436979/article/details/143155659

相关文章

  • 使用PIC单片机驱动OLED模块(软件模拟IIC模式)
    @使用PIC单片机驱动OLED模块(软件模拟IIC模式)使用PIC单片机驱动OLED模块(软件模拟IIC模式)最近学习Microchhip的PIC18系列单片机,使用该款单片机进行一些外设的开发。发现网上的资料很少,故开了此个博客,对自己的学习过程进行一些记录,希望未来国内Microchip的社区能有更多的资源......
  • 剖析Air724UG的硬件设计,有大发现?02篇
    ​ 3.8I2C管脚名类型序号电压域描述I2C2_SCLIO32V_GLOBAL_1V8I2C2 时钟信号,用作I2C 时需外加1.8V 上拉I2C2_SDAIO31V_GLOBAL_1V8I2C2 数据信号,用作I2C 时需外加1.8V 上拉CAMI2C_SCL1IO51V_GLOBAL......
  • 剖析Air724UG的硬件设计,有大发现?04篇
    ​ 接下来分享第四部分。 5.4功耗5.4.1模块工作电流测试仪器:综测仪R&S CMW500,程控电源安捷伦66319D测试条件:VBAT=3.8V,环境温度25℃,插入白卡,连接综测仪CMW500参数测试条件最小典型最大单位               ......
  • 剖析Air724UG的硬件设计,有大发现?03篇
    ​  今天我们分享第三部分。四、射频接口天线接口管脚定义如下:表格19:RF_ANT 管脚定义管脚名序号描述LTE_ANT46LTE 天线接口BT/WiFi_ANT34蓝牙/WiFi 共用天线接口4.1射频参考电路 ​图表20:射频参考电路注意:连接到模块RF......
  • 剖析Air724UG的硬件设计,还有大发现?01部分
    ​ 一、绪论Air724UG是一款基于紫光展锐UIS8910DM平台设计的LTE Cat 1无线通信模组。支持FDD-LTE/TDD-LTE的4G远距离通讯和Bluetooth近距离无线传输技术,支持WiFi Scan 和WiFi 定位,支持VoLTE、Audio、Camera、LCD、Keypad等功能。另外,模组提供了USB/UART/SPI/I2C/SDIO等......
  • ActiveMQ消息模式Queue和Topic机制讲解
    Docker安装ActiveMQ镜像以及通过Java生产消费activemq示例_dockeractivemq-CSDN博客背景周末由于服务器异常宕机,导致业务系统重启后出现ActiveMQ中的数据没有被正常消费,运维认为是消息积压,便联系博主排查。最终发现并不存在消息积压,是因为采用ActiveMQTopic模式生产消费......
  • iOS开发基础-iPhone所有机型的硬件生产代号与对应机型
    以下是根据公开资料整理的iPhone所有机型的硬件生产代号与对应机型的列表。硬件生产代号对应机型iPhone1,1iPhone2GiPhone1,2iPhone3GiPhone2,1iPhone3GSiPhone3,1iPhone4(GSM)iPhone3,2iPhone4(GSMRev.A)iPhone3,3iPhone4(CDMA)iPh......
  • 看看硬件工程师是如何写代码的(一),巧妙的程序!
     更多电路设计,PCB设计分享及分析,可关注本人微信公众号“核桃设计分享”!连载系列文章,欢迎点赞收藏关注,不迷路!目前本人已经不再写代码了,只是想把自己走过的弯路,踩过的坑分享出来,希望更多的小伙伴能看到,少走弯路,仅供参考哈!回想起来核桃已经很多年没有敲代码了,这么多年一直从事......
  • 车载多屏的实现方案屏幕管理的核心DisplayContent4.SurfaceFlinger中屏幕硬件的加载安
    ......
  • Python pickle
    Pythonpicklepickle在python中实现对象结构的序列化和反序列化python序列化(Pickling)是一个将python对象层次结构转换为可以本地储存或者网络传输的字节流的过程python反序列化(unpickling)是将字节流还原为对象层次结构数据序列化:就是把不能直接储存的数据储存到......