3.4 haas506 2.0开发教程-example-ads1115
haas506 2.0开发教程-example-ads1115
- 1.ads1115
- 2.实现步骤
- (1)连线
- (2)烧录代码
- (3)效果
- 3.总结
1.ads1115
案例说明
- 使用ads1115模块获取电压值
- ADS1115是具有16位分辨率的高速AD转换芯片,可以将模拟信号转化为软件能够处理的数字信号。最小测量电压为0.0078125mV(约7.8uV)。
- 通过I2C接口连接。
2.实现步骤
(1)连线
(1)将asd1115模块的VDD、GND、SDA、SCL接入到haas506的I2C接口上
(2)烧录代码
复制代码到文件中
ADS1x15.py
# coding=utf-8
import utime as time
'''
# Choose a gain of 1 for reading voltages from 0 to 4.09V.
# Or pick a different gain to change the range of voltages that are read:
# - 2/3 = +/-6.144V
# - 1 = +/-4.096V
# - 2 = +/-2.048V
# - 4 = +/-1.024V
# - 8 = +/-0.512V
# - 16 = +/-0.256V
'''# Register and other configuration values:
ADS1x15_DEFAULT_ADDRESS = 0x48
ADS1x15_POINTER_CONVERSION = 0x00
ADS1x15_POINTER_CONFIG = 0x01
ADS1x15_POINTER_LOW_THRESHOLD = 0x02
ADS1x15_POINTER_HIGH_THRESHOLD = 0x03
ADS1x15_CONFIG_OS_SINGLE = 0x8000
ADS1x15_CONFIG_MUX_OFFSET = 12
# Maping of gain values to config register values.
ADS1x15_CONFIG_GAIN = {2/3: 0x0000,1: 0x0200,2: 0x0400,4: 0x0600,8: 0x0800,16: 0x0A00
}
ADS1x15_CONFIG_MODE_CONTINUOUS = 0x0000
ADS1x15_CONFIG_MODE_SINGLE = 0x0100
# Mapping of data/sample rate to config register values for ADS1015 (faster).
ADS1015_CONFIG_DR = {128: 0x0000,250: 0x0020,490: 0x0040,920: 0x0060,1600: 0x0080,2400: 0x00A0,3300: 0x00C0
}
# Mapping of data/sample rate to config register values for ADS1115 (slower).
ADS1115_CONFIG_DR = {8: 0x0000,16: 0x0020,32: 0x0040,64: 0x0060,128: 0x0080,250: 0x00A0,475: 0x00C0,860: 0x00E0
}
ADS1x15_CONFIG_COMP_WINDOW = 0x0010
ADS1x15_CONFIG_COMP_ACTIVE_HIGH = 0x0008
ADS1x15_CONFIG_COMP_LATCHING = 0x0004
ADS1x15_CONFIG_COMP_QUE = {1: 0x0000,2: 0x0001,4: 0x0002
}
ADS1x15_CONFIG_COMP_QUE_DISABLE = 0x0003class ADS1x15(object):def __init__(self,**Kwargs):#导入I2cfrom driver import I2C#实例化self._i2c=I2C()#打开I2cself._i2c.open("ADS1115")def _data_rate_default(self):#子类需要实现 父类的方法,否则报错raise NotImplementedError("subclass must implemet _data_rate_default!")def _data_rate_config(self,data_rate):#子类需要实现 父类的方法,否则报错raise NotImplementedError("subclass must implemet _data_rate_default!")def _conversion_value(self, low, high):#子类需要实现 父类的方法,否则报错raise NotImplementedError('Subclass must implement _conversion_value function!')#mux, gain, data_rate, and mode 要在规定的范围内def _read(self, mux, gain, data_rate, mode):# Go out of power-down mode for conversion.config = ADS1x15_CONFIG_OS_SINGLE# Specify mux value.config |= (mux & 0x07) << ADS1x15_CONFIG_MUX_OFFSET#设置增益if gain not in ADS1x15_CONFIG_GAIN:raise ValueError('Gain must be one of: 2/3, 1, 2, 4, 8, 16')config |= ADS1x15_CONFIG_GAIN[gain]#设置模式(continuous or single shot)config |= mode#得到速率,默认128bpsif data_rate is None:data_rate = self._data_rate_default()#设置速率config |= self._data_rate_config(data_rate)#disable 比较器模式config |= ADS1x15_CONFIG_COMP_QUE_DISABLE#I2C的写函数writeData=bytearray(3)writeData[0]=ADS1x15_POINTER_CONFIGwriteData[1]=(config >> 8) & 0xFFwriteData[2]=config & 0xFFself._i2c.write(writeData,3)#等待ADC采样(根据采样率加上一个很小的偏置,如0.1ms)time.sleep(1.0/data_rate+0.0001)#I2C的读函数readData=bytearray([ADS1x15_POINTER_CONVERSION,0x00])self._i2c.read(readData,2)#return 读取到的数据,包含高八位和低八位return self._conversion_value(readData[1],readData[0])def read_adc(self, channel, gain=1, data_rate=None):#读单个ADC通道,通道值取值范围为[0,3]assert 0 <= channel <= 3, 'Channel must be a value within 0-3!'# Perform a single shot read and set the mux value to the channel plus# the highest bit (bit 3) set.return self._read(channel + 0x04, gain, data_rate, ADS1x15_CONFIG_MODE_SINGLE)#继承父类
class ADS1115(ADS1x15):"""ADS1115 16-bit analog to digital converter instance."""def __init__(self, *args, **kwargs):super(ADS1115, self).__init__(*args, **kwargs)def _data_rate_default(self):#默认速率为128bpsreturn 128def _data_rate_config(self, data_rate):if data_rate not in ADS1115_CONFIG_DR:raise ValueError('Data rate must be one of: 8, 16, 32, 64, 128, 250, 475, 860')return ADS1115_CONFIG_DR[data_rate]def _conversion_value(self, low, high):#转换16位数据value = ((high & 0xFF) << 8) | (low & 0xFF)if value & 0x8000 != 0:value -= 1 << 16return value
main.py
# coding=utf-8
import utime as time
import usys
usys.path.append('/data/pyamp')
import ADS1x15
adc = ADS1x15.ADS1115()
GAIN = 2/3
print('Reading ADS1x15 values, press Ctrl-C to quit...')
while True:values = [0]*4for i in range(4):values[i] = adc.read_adc(i, gain=GAIN)values[i]=values[i]*0.1875/1000print('-'*45)print('| {0:>7} | {1:>7} | {2:>7} | {3:>7} |'.format('IN0','IN1','IN2','IN3'))print('| {0:>6} | {1:>6} | {2:>6} | {3:>6} |'.format(*values))print('-'*45)time.sleep(2)
board.json
{"name": "haas506",
"version": "1.0.0",
"io": {"ADS1115": {"type": "I2C","port": 1,"addrWidth": 7,"freq": 400000,"mode": "master","devAddr": 72},"serial1":{"type":"UART","port":0,"dataWidth":8,"baudRate":115200,"stopBits":1,"flowControl":"disable","parity":"none"},"serial2":{"type":"UART","port":1,"dataWidth":8,"baudRate":115200,"stopBits":1,"flowControl":"disable","parity":"none"},"serial3":{"type":"UART","port":2,"dataWidth":8,"baudRate":115200,"stopBits":1,"flowControl":"disable","parity":"none"}
},
"debugLevel": "ERROR",
"repl":"disable"
}
(3)效果
- 确认端口号
- A0、A1接入GND,A2、A3接入3v3
- 查看日志
- A0、A1、A2、A3都不接电源的情况下,输出默认值
3.总结
本节介绍了如何使用ADS1115模块来获取电压值。需要注意的有2点:
当前gain是2/3,可以测6.144V以内的电压值,可以根据需要更改gain的值
ads1115模块的所测量的电压值不能超过所接入到ads1115的VDD引脚的电压值
3.4 haas506 2.0开发教程-example-ads1115相关推荐
- 3.9 haas506 2.0开发教程-example-oled
haas506 2.0开发教程-example-oled 1.OLED模块 2.测试 3.效果 4.总结 1.OLED模块 有机发光二极管(OrganicLight-Emitting Diode,OL ...
- haas506 2.0开发教程-hota(仅支持2.2以上版本)
haas506 2.0开发教程-hota 1.hota.py升级 案例说明 (1)获取URL (2)功能代码 (3)输出log 2.hota.pac升级 案例说明 (1)获取URL (2)功能代码 ( ...
- 2.23 haas506 2.0开发教程 - KeyPad - 矩阵键盘(仅支持M320开发板)
haas506 2.0开发教程 - KeyPad - 矩阵键盘 矩阵键盘 320矩阵键盘连线 案例说明 测试代码 功能测试 class - KeyPad keypad.init() - 初始化keyp ...
- 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)
haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由 阿里云M2M设备间通信 通信流程 功能实现 1.创建产品 2.设备端开发 联云测试 3.建立topic之间 ...
- 3.2 haas506 2.0开发教程-example-wifi定位
haas506 2.0开发教程-example-wifi定位 wifi定位 1.案例说明 2.程序代码 3.日志输出 总结 wifi定位 1.案例说明 扫描周围所得到的wifi热点,使用mac地址进行 ...
- 3.1 haas506 2.0开发教程-example-lbs (支持2.03以上版本)
haas506 2.0开发教程-example-lbs 1.LBS (围绕地理位置数据而展开的服务) 2.实现步骤 (1)注册账号 (2)创建新应用 (3)添加key (4)程序烧写 (5)日志输出 ...
- 1.1 haas506 2.0开发教程-导学篇
haas506 2.0开发教程-导学篇 一. 下载并安装驱动 1.1 CH340 driver 1.2 8910 driver 二. 搭建开发环境 2.0 集合开发工具HaaS506PYcom 2.1 ...
- haas506 2.0开发教程 - 阿里云ota - pac 固件升级(仅支持2.2以上版本)
haas506 2.0开发教程-ota - pac 固件升级 ota - pac固件升级 案例说明 1.确定开发板内存 2.物联网平台开发 3.设备端开发 调试,确定开发板驻网成功 4.ota - 硬 ...
- 1.5 haas506 2.0开发教程-driver-ADC
haas506 2.0开发教程-driver-ADC 1.硬件图 2.板载ADC 4.Class-ADC函数库 5.总结 B站haas开发教程 B站教学视频链接 1.硬件图 2.板载ADC (1)案例 ...
- 2.19 haas506 2.0开发教程 - bluetooth - 蓝牙通信(仅支持2.2以上版本)
haas506 2.0开发教程 - bluetooth - 蓝牙通信 蓝牙 案例说明 从机测试(支持601与320) 1. 蓝牙调试工具 2. 设备端开发 3. 功能测试 主机测试(仅支持320) 1 ...
最新文章
- jQuery.fn是什么意思?
- Spring IoC — 基于XML的配置
- [小技巧][JAVA][转换]字符数组char[]与字符串String之间互相转换
- 你知道别人怎么看你恢复它?
- Stanford CS230深度学习(七)RNN和LSTM
- 为什么佛系青蛙住进了阿里淘宝——访《旅行青蛙》制作人
- java-工具-轮子
- 云计算学习笔记:什么是云?云计算是什么?
- SQL Server 数据库做读写分离
- R 语言 iris 数据集的可视化
- 数学建模人口模型及matlab算法解
- springboot+责任链模式初体验
- Word中快速输入公式
- 微信小程序商品详情页面开发案例
- java 字符表 chr3,ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(3...
- CentOS等保三级安全加固方案
- Android开发笔记(一百七十三)给安装包APK文件瘦身
- NLP定义和机器翻译
- Flash activex控件版本信息
- EVT/DVT/PVT/MP代表什么阶段