ESP32 系列文章
1、利用mesh ble_mesh_provisioner和 onoff_server建立网络传输温湿度以及pm2.5等数据
2、esp-idf v4.0 smartconfig wifi配置信息保存在nvs_flash,实现掉电重新启动直接连入wifi(已完成)
3、idf v4.0 调试esp-aliyun-master 生成对应的 NVS 分区

一、概述

该博客介绍使用软件模拟 SPI驱动16位 ADTM7705(兼容AD7705)
TM7705 使用SPI串行通信协议,使用十分方便快捷.并且兼容 2.7~3.3V 或 4.75~5.25V 单电源。可以直接使用单片机引脚进行供电. TM7705 是用于智能系统、微控制器系统和基于 DSP 系统的理想产品。其串行接口可配置为三线接口。增益值、信号极性以及更新速率的选择可用串行输入口由软件来配置。该器件还包括自校准和系统校准选项,以消除器件本身或系统的增益和偏移误差。TM7705 采用 16 脚塑料双列直插(DIP)和 16 脚宽体(0.3 英寸)SOIC 封装和 16 脚 TSSOP 封装。

二、特点

 TM7705:2 个全差分输入通道的 ADC16 位无丢失代码0.003%非线性可编程增益前端增益:1~128三线串行接口有对模拟输入缓冲的能力2.7~3.3V 或 4.75~5.25V 工作电压3V 电压时,最大功耗为 1mW等待电流的最大值为 8μA16 脚 DIP、SOIC 和 TSSOP 封装

三.引脚排列

四.引脚功能


五.代码讲解
esp32WROOM 32D 驱动AD 7705代码
AD7705.h头文件

#include "driver/gpio.h"#ifndef __AD7705_H__
#define __AD7705_H__#define ADC_DI 23//DIN引脚
#define ADC_DO1 25//DOUT引脚
#define ADC_CLK 19//SCK引脚
#define ADC_RESET 18//RST引脚#define ADC1_CS 22//CS引脚
#define ADC1_DRDY1 21//DRDY引脚#define ADC_CLK0 gpio_set_level(ADC_CLK, 0)//CLK引脚设置为低电平
#define ADC_CLK1 gpio_set_level(ADC_CLK, 1)//CLK引脚设置为高电平#define ADC_RESET0 gpio_set_level(ADC_RESET, 0)//RST引脚设置为低电平
#define ADC_RESET1 gpio_set_level(ADC_RESET, 1)//RST引脚设置为高电平#define ADC_DI0 gpio_set_level(ADC_DI, 0)//DIN引脚设置为低电平
#define ADC_DI1 gpio_set_level(ADC_DI, 1)//DIN引脚设置为高电平#define ADC1_CS0 gpio_set_level(ADC1_CS, 0)//CS引脚设置为低电平
#define ADC1_CS1 gpio_set_level(ADC1_CS, 1)//CS引脚设置为高电平#define ADC_DO gpio_get_level(ADC_DO1)//获取DOUT引脚电平
#define ADC1_DRDY gpio_get_level(ADC1_DRDY1)//获取DRDY引脚电平
//Operation modes
#define ADC_NORMAL          0x00
#define ADC_SELF            0x40
#define ADC_ZERO_SCALE      0x80
#define ADC_FULL_SCALE      0xc0//Gain settings
#define ADC_GAIN_1          0x00
#define ADC_GAIN_2          0x08
#define ADC_GAIN_4          0x10
#define ADC_GAIN_8          0x18
#define ADC_GAIN_16         0x20
#define ADC_GAIN_32         0x28
#define ADC_GAIN_64         0x30
#define ADC_GAIN_128        0x38//Polar operations
#define ADC_BIPOLAR         0x00
#define ADC_UNIPOLAR        0x04//update rates
#define ADC_50              0x04
#define ADC_60              0x05
#define ADC_250             0x06
#define ADC_500             0x07
extern void TM7705_CaliSelf(unsigned char ch);
extern void adc_rest();
extern void adc1_init(unsigned char calmode, unsigned char gainsetting, unsigned char operation, unsigned char rate);
extern unsigned int adc1_read_value(unsigned char ch);
#endif

AD7705.C文件


#include "AD7705.h"
#include "driver/gpio.h"
enum
{REG_COMM   = 0x00,    //通信寄存器REG_SETUP    = 0x10,//设置寄存器REG_CLOCK    = 0x20,    //时钟寄存器REG_DATA = 0x30,    //数据寄存器REG_ZERO_CH1 = 0x60,    //CH1偏移寄存器REG_FULL_CH1  = 0x70,//CH1满量程寄存器REG_ZERO_CH2 = 0x61,    //CH2偏移寄存器REG_FULL_CH2  = 0x71,    //CH2满量程寄存器WRITE         = 0x00,    //写操作READ       = 0x08,    //读操作CH_1       = 0,CH_2       = 1,CH_3       = 2,   CH_4        = 3
};
enum
{CLKDIS_0   = 0x00,        //时钟输出使能CLKDIS_1    = 0x10,    //时钟禁止CLK_4_9152M = 0x08,//4.9152MHZ晶振CLK_2_4576M = 0x00,//2.456MHZ晶振CLK_1M       = 0x04,CLK_2M      = 0x0C,FS_50HZ     = 0x00,FS_60HZ     = 0x01,FS_250HZ    = 0x02,FS_500HZ    = 0x04,ZERO_0      = 0x00,ZERO_1      = 0x80
};
enum
{MD_NORMAL      = (0 << 6),  //正常模式MD_CAL_SELF       = (1 << 6),  //自校准模式MD_CAL_ZERO      = (2 << 6),  //标准零刻度模式MD_CAL_FULL        = (3 << 6),//标准满刻度模式GAIN_1           = (0 << 3),//增益GAIN_2            = (1 << 3),  //增益GAIN_4          = (2 << 3),//增益GAIN_8            = (3 << 3),//增益GAIN_16           = (4 << 3),  //增益GAIN_32         = (5 << 3),  //增益GAIN_64         = (6 << 3),//增益GAIN_128      = (7 << 3),//增益BIPOLAR           = (0 << 2),  //双极性输入UNIPOLAR     = (1 << 2),  //单极性输入BUF_NO           = (0 << 1),  BUF_EN          = (1 << 1),FSYNC_0           = 0,FSYNC_1            = 1
};
/*通道1和通道2 的增益,输入缓冲,极性设置*/
#define _CH1_GAIN_BIPOLAR_BUF (GAIN_1|UNIPOLAR|BUF_EN)
#define _CH2_GAIN_BIPOLAR_BUF (GAIN_1|UNIPOLAR|BUF_EN)void adc_delay(unsigned char NUM) //延时函数      {for(;NUM>0;NUM--);       }void write_adc_byte(unsigned char chr)//写字节函数
{unsigned char i;for(i=0;i<8;i++)//循环写八次{if (chr & 0x80)//位与操作,写出数据{ADC_DI1;//SPI 数据MOSI 接口 按位输出}else{ADC_DI0;//SPI 数据MOSI 接口}ADC_CLK0;//时钟信号chr=chr<<1;//右移一位数据,循环按位写出数据ADC_CLK1;}//ADC_CLK1;
}unsigned int read_adc_word()//读数据函数
{unsigned char i;unsigned int coder = 0;for(i=0;i<16;i++)//16位数据,循环读入两个字节{ADC_CLK0;//时钟信号adc_delay(1);coder = coder<<1;if(ADC_DO)coder+=1;   //检测引脚电平,读入数据    ADC_CLK1;}ADC_CLK1;return(coder);
}void adc_rest()//AD 7705复位函数
{unsigned char i,j;ADC_DI1;ADC_CLK1; ADC1_CS1;ADC_RESET1;for(i=200;i>0;i--)for(j=200;j>0;j--);  ADC_RESET0;for(i=400;i>0;i--)for(j=200;j>0;j--);    ADC_RESET1;for(i=200;i>0;i--)for(j=200;j>0;j--);    }
void TM7705_CaliSelf(unsigned char ch)//自校准函数
{if(ch==1){ADC1_CS0;write_adc_byte(REG_SETUP|WRITE|CH_1);ADC1_CS1;adc_delay(10);ADC1_CS0;write_adc_byte(MD_CAL_SELF|_CH1_GAIN_BIPOLAR_BUF|FSYNC_0);ADC1_CS1;adc_delay(10);ADC1_CS0;while (ADC1_DRDY);ADC1_CS1;}else if(ch==2){ADC1_CS0;write_adc_byte(REG_SETUP|WRITE|CH_2);ADC1_CS1;adc_delay(10);ADC1_CS0;write_adc_byte(MD_CAL_SELF|_CH2_GAIN_BIPOLAR_BUF|FSYNC_0);ADC1_CS1;adc_delay(10);ADC1_CS0;while (ADC1_DRDY);ADC1_CS1;}}
void adc1_init(unsigned char calmode, unsigned char gainsetting, unsigned char operation, unsigned char rate)
{ADC1_CS0;write_adc_byte(0xFF);write_adc_byte(0xFF);write_adc_byte(0xFF);write_adc_byte(0xFF);ADC1_CS1;adc_delay(100);ADC1_CS0;//write_adc_byte( 0x20 );//write_adc_byte( REG_CLOCK|WRITE|CH_1 );//ADC1_CS1;adc_delay(100); ADC1_CS0;write_adc_byte( CLKDIS_0|CLK_4_9152M|FS_50HZ );//ADC1_CS1;TM7705_CaliSelf(1);TM7705_CaliSelf(2);adc_delay(100);
}unsigned int adc1_read_value(unsigned char ch)
{unsigned int  value;if(!ADC1_DRDY){ADC1_CS0;if(ch == 1)write_adc_byte(0x38);//else if(ch == 2)write_adc_byte(0x39);//else    {ADC1_CS1;return 0;}ADC1_CS1;adc_delay(1);ADC1_CS0;value = read_adc_word();ADC1_CS1;return value;}else{return 0;}
}

main.c文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "driver/gpio.h"
#include "AD7705.h"
void delay(unsigned int NUM)            {unsigned int i;unsigned char j;for(i=NUM;i>0;i--)for(j=200;j>0;j--);        }
void app_main(void)
{  int volt1,volt2;unsigned char i,stat=0x03;
unsigned int temp1,temp2,ADcode1,ADcode2;//Initialize non-SPI GPIOsgpio_set_direction(ADC_CLK, GPIO_MODE_OUTPUT);gpio_set_direction(ADC_RESET, GPIO_MODE_OUTPUT);gpio_set_direction(ADC1_CS, GPIO_MODE_OUTPUT);gpio_set_direction(ADC_DI, GPIO_MODE_OUTPUT);gpio_set_pull_mode(ADC_DO1,GPIO_PULLUP_ENABLE);gpio_set_direction(ADC_DO1, GPIO_MODE_INPUT);gpio_set_direction(ADC1_DRDY1, GPIO_MODE_INPUT);adc_rest();adc1_init(ADC_SELF,ADC_GAIN_128,ADC_BIPOLAR,ADC_50);TM7705_CaliSelf(1);temp1 = adc1_read_value(1);TM7705_CaliSelf(2);temp2 = adc1_read_value(2);while(1){printf("初始化代码\n");vTaskDelay(500/ portTICK_PERIOD_MS);temp1 = adc1_read_value(1);volt1=((int)temp1*5000)/65536;printf("channel1:   %d    V:%d\n",temp1,volt1);vTaskDelay(500/ portTICK_PERIOD_MS);temp2 = adc1_read_value(2);volt2=((int)temp2*5000)/65536;printf("channel2:   %d    V:%d\n",temp2,volt2);}
}

ESP32驱动AD7705相关推荐

  1. WT32-SC01是ESP32驱动3.5彩屏开发板方案适合用arduino方式开发吗?因为需要彩屏和电容触摸的驱动的

    ESP32驱动3.5寸彩屏开发板方案因为带有彩屏和电容触摸的驱动,能否用arduino方式开发,这是很多熟悉arduino开发的技术人员关心的问题. 目前启明云端推出的http://esp32.8ms ...

  2. 使用ESP32驱动ST7789,效果很好的IPS显示屏

    前言 在平台上面购买了这一种模块,然后这种模块是IPS液晶屏,显示效果会比早期那种好一些.显示屏的控制芯片是ST7789 我准备使用ESP32进行驱动,测试上使用简单的Arduino IDE,那么具体 ...

  3. 解决ESP32 驱动 28BYJ-48 步进电机反向不转之震动的问题

    解决ESP32 驱动 28BYJ-48 步进电机反向不转之震动的问题 date: 2021-09-19 lastmod: 2021-09-19 问题描述 Esp 32 在 mqtt 消息下通过 Ste ...

  4. 使用ESP32驱动QMA7981读取三轴加速度(带例程)

    使用ESP32驱动QMA7981读取三轴加速度(带例程) 1.简介 ESP32是国产乐鑫公司生产的32位单片机,双核240MHz,带有蓝牙和wifi功能,本例中使用的是ESP32-S模组.QMA798 ...

  5. ESP32驱动震动传感器、MAX4466(感知层)

    ESP32驱动震动传感器.MAX4466(感知层) 文章目录 ESP32驱动震动传感器.MAX4466(感知层) 前言 一.物联网概述 1.物联网: 2.物联网的三层结构 二.开发环境的搭建 三.硬件 ...

  6. Micropython ESP32驱动CH455控制4位数码管

    Micropython ESP32驱动CH455控制4位数码管 1.硬件 CH455驱动4位共阴数码管的原理图如下所示. ESP32-S模块,用GPIO4作为SCL和GPIO16作为SDA. 2.软件 ...

  7. esp32驱动ws2815出现的频闪问题

    问题现象 最近在使用esp32驱动多个ws2815灯珠时,使用官方的rmt库,偶尔的情况下出现频闪,灯珠颜色不对的问题. 使用的idf版本为4.2.1 查找原因 1.首先初步认为是时序问题,先单独使用 ...

  8. ESP32驱动喇叭(syn6288),UTF-8转Unicode,包含中文驱动

    本文讲讲ESP32驱动喇叭,说实话,我当初为了驱动好这个喇叭,整了三天都没整出来,而且还是我在公司实习的时候,组长一直问,这么简单还没整出来,到底是不是你人的问题,挺离谱的,但是真的挺坑的,本来SYN ...

  9. ESP32驱动WS2812

    ESP32驱动WS2812 开发环境:VSCODE+platformio,框架:Arduino 直接贴代码,注释都在代码里 #include <Arduino.h> #include &l ...

  10. DS18B20温度传感器的特性、原理、驱动(华大半导体HC32L136、ESP32驱动)

    目录 1.模组简介 2.驱动原理 3.HC32L136驱动 4.ESP32驱动 新冠疫情.元器件涨价,同一家店铺之前买的DS18B20模组体积有大拇指这么大,最近买体积只有大拇指指甲盖这么大,以前无论 ...

最新文章

  1. 常考数据结构与算法:每k个节点反转链表
  2. python如何导入多个文件_在python中导入多个文件
  3. 基于策略模式的商场价格优惠设计
  4. mysql 查看表属性约束_mysql表属性、索引、约束
  5. 【u023】最长上升子序列(sequence)
  6. python调整PPT文档样式
  7. c语言小游戏跳一跳代码及注释,c语言小游戏程序之弹跳小球的实现代码
  8. 一台液晶显示器台式计算机总耗电量,一天一台电脑用多少电
  9. Ubuntu 修改分辨率
  10. 我热爱计算机作文450字,我的国学机作文450字
  11. LeetCode 2135. 统计追加字母可以获得的单词数
  12. 小程序CMS(开通预览)
  13. 基于Android的招聘求职网站的设计与实现
  14. 大数据环境下互联网行业数据仓库/数据平台的架构之漫谈
  15. UI自动化测试环境搭建 Python+Selenium+RobotFramework
  16. 计算机机房的监控,机房动环监控解决方案
  17. Buildroot中文用户手册
  18. 云计算在商业智能运用中,主要存在哪些难点?
  19. leetcode977
  20. 电子元器件搜索引擎 白嫖AD原理图符号、PCB封装和3D模型(超详细)

热门文章

  1. Java 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
  2. 计算机编程是什么_什么是计算机编程?
  3. Microstation v8+Terrasolid安装教程
  4. 86版五笔字根表(JPG版)
  5. 31省农村居民人均可支配收入 (2002-2018年)
  6. 软件项目经理应具备的素质和条件_IT项目经理必须具备的能力
  7. java制作手机投射电脑_Android手机屏幕投射到电脑神器Vysor
  8. 2021宇哥八套卷总结—第一套试卷分析
  9. java判断101到200之间的素数
  10. 彻底删除VMware !!!