DAC模块(MCP44725芯片)

 DAC转换模块

MCP4725芯片

I2C.c

#include "I2C.h"
#include "CS100A.h"/*引脚配置*/
#define MCP4725_SCL_SET		HAL_GPIO_WritePin(GPIOF,GPIO_PIN_0,1)
#define MCP4725_SCL_RST		HAL_GPIO_WritePin(GPIOF,GPIO_PIN_0,0)#define MCP4725_SDA_SET		HAL_GPIO_WritePin(GPIOF,GPIO_PIN_1,1)
#define MCP4725_SDA_RST		HAL_GPIO_WritePin(GPIOF,GPIO_PIN_1,0)
#define MCP4725_SDAIN			HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_1)//初始化IIC
void IIC_Init(void)
{					     GPIO_InitTypeDef SCL = {.Pin = GPIO_PIN_0,.Mode = GPIO_MODE_OUTPUT_PP,};__HAL_RCC_GPIOF_CLK_ENABLE();HAL_GPIO_Init(GPIOF, &SCL);HAL_GPIO_WritePin(GPIOF, GPIO_PIN_0,1);GPIO_InitTypeDef SDA = {.Pin = GPIO_PIN_1,.Mode = GPIO_MODE_OUTPUT_PP,};__HAL_RCC_GPIOF_CLK_ENABLE();HAL_GPIO_Init(GPIOF, &SDA);HAL_GPIO_WritePin(GPIOF, GPIO_PIN_1,1);}//SDA设置为输入
void SDA_IN (void)
{GPIO_InitTypeDef SDA = {.Pin = GPIO_PIN_1,.Mode = GPIO_MODE_INPUT,};__HAL_RCC_GPIOF_CLK_ENABLE();HAL_GPIO_Init(GPIOF, &SDA);
}//SDA设置为输出
void SDA_OUT(void)
{ GPIO_InitTypeDef SDA = {.Pin = GPIO_PIN_1,.Mode = GPIO_MODE_OUTPUT_PP,};__HAL_RCC_GPIOF_CLK_ENABLE();HAL_GPIO_Init(GPIOF, &SDA);
}//产生IIC起始信号
void IIC_Start(void)
{SDA_OUT();          //SDA线设置为输出MCP4725_SDA_SET;	  	  MCP4725_SCL_SET;delay_us(10);MCP4725_SDA_RST;     delay_us(10);MCP4725_SCL_RST;    //钳住I2C总线,准备发送或接收数据 
}	  //产生IIC停止信号
void IIC_Stop(void)
{SDA_OUT();        //SDA线输出MCP4725_SCL_RST;MCP4725_SDA_RST;delay_us(10);MCP4725_SCL_SET;MCP4725_SDA_SET;  //发送I2C总线结束信号delay_us(10);							   	
}//等待应答信号到来
//返回值:1,接收应答失败
//        0,接收应答成功
uint8_t IIC_Wait_Ack(void)
{uint8_t ucErrTime=0;SDA_IN();      //SDA设置为输入  MCP4725_SDA_SET;delay_us(2);	   MCP4725_SCL_SET;delay_us(2);	 while(MCP4725_SDAIN){ucErrTime++;if(ucErrTime>250){IIC_Stop();return 1;}}MCP4725_SCL_RST;//时钟输出0 	   return 0;  
} //产生ACK应答
void IIC_Ack(void)
{MCP4725_SCL_RST;SDA_OUT();MCP4725_SDA_RST;delay_us(5);MCP4725_SCL_SET;delay_us(5);MCP4725_SCL_RST;
}//不产生ACK应答		    
void IIC_NAck(void)
{MCP4725_SCL_RST;SDA_OUT();MCP4725_SDA_SET;delay_us(5);MCP4725_SCL_SET;delay_us(5);MCP4725_SCL_RST;
}				//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答			  
void IIC_Send_Byte(uint8_t txd)
{                        uint8_t t;   SDA_OUT(); 	    MCP4725_SCL_RST;//拉低时钟开始数据传输for(t=0;t<8;t++)    //开始准备信号线{              if((txd&0x80)>>7)MCP4725_SDA_SET;elseMCP4725_SDA_RST;txd<<=1; 	  delay_us(5);   MCP4725_SCL_SET;delay_us(5); MCP4725_SCL_RST;delay_us(5);}	 
} 	//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
uint8_t IIC_Read_Byte(unsigned char ack)
{unsigned char i,receive=0;SDA_IN();//SDA设置为输入for(i=0;i<8;i++ ){MCP4725_SCL_RST;delay_us(5);MCP4725_SCL_SET;receive<<=1;if(MCP4725_SDAIN){receive++;  }delay_us(4); }					 if (!ack)IIC_NAck();//发送nACKelseIIC_Ack(); //发送ACK   return receive;
}

I2C.h

#ifndef __I2C_H
#define __I2C_H#include "main.h"//IIC所有操作函数
void IIC_Init(void);                //初始化IIC的IO口				 
void IIC_Start(void);				//发送IIC开始信号
void IIC_Stop(void);	  			//发送IIC停止信号
void IIC_Send_Byte(uint8_t txd);			//IIC发送一个字节
uint8_t IIC_Read_Byte(unsigned char ack);//IIC读取一个字节
uint8_t IIC_Wait_Ack(void); 				//IIC等待ACK信号
void IIC_Ack(void);			        //IIC发送ACK信号
void IIC_NAck(void);				//IIC不发送ACK信号void SDA_IN(void);
void SDA_OUT(void);void IIC_Write_One_Byte(uint8_t daddr,uint8_t addr,uint8_t data);
uint8_t IIC_Read_One_Byte(uint8_t daddr,uint8_t addr);	  
#endif

MCP4725.c

#include "MCP4725.h" //初始化IIC接口
void MCP4725_Init(void)
{IIC_Init();
}//使用快速模式写命令写DAC寄存器
void MCP4725_WriteData_Voltage(uint16_t Vout)   //电压单位mV
{uint8_t temp;uint16_t Dn;Dn = ( 4096 * Vout) / VREF_in; //这里的VREF宏定输入电压temp = (0x0F00 & Dn) >> 8;  //12位数据。0000XXXX XXXXXXXX IIC_Start();IIC_Send_Byte(0XC0);      //器件寻址,器件代吗:1100; 地址位A2,A1,A0为 0 , 0 , 1;-> 1100 0010//这个地址0XC0或0XC1,根据自己购买的模块决定IIC_Wait_Ack();	 IIC_Send_Byte(temp); 	  //将高8位送到DAC寄存器IIC_Wait_Ack();	 IIC_Send_Byte(Dn);        //将低8位送到DAC寄存器IIC_Wait_Ack();	IIC_Stop();//产生一个停止条件  	HAL_Delay(10);	
}void MCP4725_WriteData_Digital(uint16_t data)   //12位数字量
{uint8_t data_H=0,data_L=0;data_H = ( 0x0F00 & data) >> 8;data_L = 0X00FF & data ;IIC_Start();IIC_Send_Byte(0XC0);      //器件寻址,器件代吗:1100; 地址位A2,A1,A0为 0 , 0 , 0;-> 1100 0010IIC_Wait_Ack();	 IIC_Send_Byte(data_H); 	IIC_Wait_Ack();	 IIC_Send_Byte(data_L);IIC_Wait_Ack();	IIC_Stop();//产生一个停止条件  	HAL_Delay(10);	
}

MCP4725.h

#ifndef __MCP4725_H
#define __MCP4725_H
#include "I2C.h"   
#include "main.h"#define VREF_in     3300//这个数值根据自己给模块的供电电压而定void MCP4725_Init(void);
void MCP4725_WriteData_Digital(uint16_t data);
void MCP4725_WriteData_Voltage(uint16_t Vout);#endif

        主函数中需要初始化一下:MCP4725_Init();

        然后调用这个函数即可:MCP4725_WriteData_Voltage(1000);

我最近发了一篇文章里面包含了常用的功能函数以及常用的模块底层驱动函数封装库,大家感兴趣的可以收藏一下,需要的时候就不用到处找代码,一篇就够用,我会持续更新。

        常用模块函数封装库(持续更新中。。。。。。)-CSDN博客 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前后端的那些事】前后端环境搭建+树形结构表格实现

文章目录 1. 前后端项目环境搭建2. table-tree2.1 后端准备2.2 前端准备 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能&#xff0c;想写文章&#xff0c;录视频把这些内容记录下。但这些功能太零碎&#xff0c;如果为每个功能都单独搭建一个项目&#xff0…

(ros2)gazebo颜色设置

在gazebo当中不用再设置颜色了&#xff0c;因为完全可以使用urdf的设置 <robot name"base" xmlns:xacro"http://wiki.ros.org/wiki/xacro"><xacro:property name"PI" value"3.1415926"/><!--定义一个变量PI&#xff0…

vue前端开发自学,组件的生命周期函数介绍001

vue前端开发自学,组件的生命周期函数介绍001&#xff01;今天介绍一下&#xff0c;组件自身的生命周期函数。又叫做&#xff0c;钩子函数。可以借助于这些钩子函数&#xff0c;实现很多我们预想的效果。比如&#xff0c;在组件渲染 之前&#xff0c;就做一些特殊的操作等等。 …

sectigo通配符dv证书400元买一年送1月实际签发13个月

Sectigo就是众多颁发数字证书的CA认证机构之一&#xff0c;旗下的DV通配符SSL证书作为一种加密通信工具&#xff0c;广泛应用于保护网站数据的安全。其中&#xff0c;SectigoDV通配符SSL证书是一种受欢迎的产品&#xff0c;它不仅能够提供强大的加密功能&#xff0c;还可以提高…

firewalld防火墙命令行工具

firewall-cmd命令 &#xff08;1&#xff09;启动、停止、查看firewalld服务 在安装CentOS 7系统时&#xff0c;会自动安装firewalld 和图形化工具firewall-config.执行以下命令可 以启动 firewalld 并设置为开机自启动状态。 [rootllcgc ~]# systemctl start firewalld.serv…

SpringSecurity入门demo(一)集成与默认认证

一、集成与默认认证&#xff1a; 1、说明&#xff1a;在引入 Spring Security 项目之后&#xff0c;没有进行任何相关的配置或编码的情况下&#xff0c;Spring Security 有一个默认的运行状态&#xff0c;要求在经过 HTTP 基本认证后才能访问对应的 URL 资源&#xff0c;其默认…

1月自考本周末开考!自考考前注意事项及考试技巧

广东省2024年1月高等教育自学考试将于1月13日至14日举行。 注意&#xff1a; 考生应提前至少20分钟进入考场。 开考15分钟后&#xff0c;迟到考生不得进入考场参加当科考试。 2、自考考试必备物品 准考证&#xff1a;进入考场的有效证件&#xff0c;打印后妥善保存 身份证…

C#编程-实现多线程

实现多线程 多线程帮助同时执行各种操作。这为用户节省时间。多线程程序包括一个主线程和其他用户定义的线程以同时执行多个任务。 微处理器为执行的进程分配内存。每个进程占有内存中它们自己的地址空间。但是,所有在进程中的线程占有相同的地址空间。多线程允许在一个程序…

Linux:进程的通信

目录 进程间的通信 管道 1.概念 2.匿名管道 3.命名管道 4.匿名管道与命名管道的区别 5.总结管道的特点 共享内存 1.原理 2.共享内存的建立 3.代码 1.相关函数 2.总结 进程间的通信 1.进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程…

软件测试|Beautiful Soup库详细使用指南

简介 Beautiful Soup是一款强大的Python库&#xff0c;广泛用于解析HTML和XML文档&#xff0c;从中提取数据并进行处理。它的灵活性和易用性使得数据抽取变得简单&#xff0c;本文将详细介绍Beautiful Soup库的基本用法和示例。 安装Beautiful Soup 首先&#xff0c;需要确保…

JavaEE学习笔记 2024-1-12 --Tomcat服务器、Servlet

JavaEE JavaEE是企业级开发 是综合性非常强的阶段  包含的知识点:JavaSE,MySQL,JDBC,WEB(HTML,CSS,JS,前端框架),Servlet,JSP,XML,AJAX等技术 1.服务器 JavaEE项目需要运行在服务器之上 WEB服务器就是WEB项目的容器,WEB项目的运行环境,将项目部署到服务器下,可以通过服务器…

Java面试之并发篇(二)

1、前言 本篇主要基于Java面试题之并发篇&#xff08;一&#xff09;继续梳理java中关于并发相关的高频面试题。本篇的面试题基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、synchronized 的原理是什么? synchronized是 Java 内置的关键字&#xff0c;它提供…

js入口函数和jQuery入口函数的区别

JS入口函数指的是JavaScript中的主入口函数&#xff0c;用来初始化页面加载完成后的操作。通常情况下&#xff0c;JS入口函数是在HTML页面中的<script>标签中定义的&#xff0c;通过onload事件等方式触发调用。 jQuery入口函数则是指使用jQuery库时的主入口函数&#xf…

软件测试|selenium 元素无法选择异常的原因及解决

简介 在进行 Web 自动化测试时&#xff0c;使用 Selenium 可能会遇到各种异常情况。其中之一就是 ElementNotSelectableException 异常&#xff0c;该异常通常意味着在尝试选择一个不可选元素时出现了问题。本文将详细介绍这个异常的原因、可能的解决方法&#xff0c;并提供示…

mysql undo log、redo log、binlog、mvcc、Buffer Pool的关系

1、作用 MySQL中的undo log、redo log、binlog和MVCC&#xff08;多版本并发控制&#xff09;是数据库管理系统中的 重要概念&#xff0c;它们各自有不同的作用和关系。 Buffer Pool&#xff08;缓冲池&#xff09;&#xff1a; 作为InnoDB存储引擎的核心组件&#xff0c;Buff…

韩国LG集团在 CES2024 消费电子展上发布的的无线透明OLED屏幕

国际消费类电子产品展览会&#xff08;International Consumer Electronics Show&#xff0c;简称CES&#xff09;&#xff0c;由美国电子消费品制造商协会&#xff08;简称CTA&#xff09;主办&#xff0c;旨在促进尖端电子技术和现代生活的紧密结合。该展始于1967年&#xff…

Oracle 19c OCP 1z0 082考场真题解析第32题

考试科目&#xff1a;1Z0-083 考试题量&#xff1a;85 通过分数&#xff1a;57% 考试时间&#xff1a;150min本文为云贝教育郭一军&#xff08;微信&#xff1a;guoyJoe&#xff09;原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎…

linux centos 账户管理命令

在CentOS或其他基于Linux的系统上&#xff0c;账户管理涉及到用户的创建、修改、删除以及密码的管理等任务。 linux Centos账户管理命令 1 创建用户&#xff1a; useradd username 这将创建一个新用户&#xff0c;但默认不会创建家目录。如果想要创建家目录&#xff0c;可以…

[DM8] 查看当前执行的查询并杀死

查看正在执行的语句&#xff1a; select * from v$sessions where state ACTIVE; 终止正在执行的语句&#xff1a; --sess_id是上面查询出的结果列 call sp_close_session(sess_id);

cookie共享和session共享实例演示

1、cookie共享实例 1.test1.share.com/index.php setcookie(dangqian, value, [domain > test1.share.com]); setcookie(gen, value, [domain > share.com]);2、test2.share.com/index.php $cookies $_COOKIE; // 打印所有Cookie的名称和值 foreach ($cookies as $n…