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)效果

  1. 确认端口号
  2. A0、A1接入GND,A2、A3接入3v3
  3. 查看日志

  4. A0、A1、A2、A3都不接电源的情况下,输出默认值

3.总结

本节介绍了如何使用ADS1115模块来获取电压值。需要注意的有2点:

当前gain是2/3,可以测6.144V以内的电压值,可以根据需要更改gain的值
ads1115模块的所测量的电压值不能超过所接入到ads1115的VDD引脚的电压值

3.4 haas506 2.0开发教程-example-ads1115相关推荐

  1. 3.9 haas506 2.0开发教程-example-oled

    haas506 2.0开发教程-example-oled 1.OLED模块 2.测试 3.效果 4.总结 1.OLED模块 有机发光二极管(OrganicLight-Emitting Diode,OL ...

  2. haas506 2.0开发教程-hota(仅支持2.2以上版本)

    haas506 2.0开发教程-hota 1.hota.py升级 案例说明 (1)获取URL (2)功能代码 (3)输出log 2.hota.pac升级 案例说明 (1)获取URL (2)功能代码 ( ...

  3. 2.23 haas506 2.0开发教程 - KeyPad - 矩阵键盘(仅支持M320开发板)

    haas506 2.0开发教程 - KeyPad - 矩阵键盘 矩阵键盘 320矩阵键盘连线 案例说明 测试代码 功能测试 class - KeyPad keypad.init() - 初始化keyp ...

  4. 2.18 haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由(仅支持2.2以上版本)

    haas506 2.0开发教程 - 阿里云M2M设备间通信 - 规则引擎/Topic消息路由 阿里云M2M设备间通信 通信流程 功能实现 1.创建产品 2.设备端开发 联云测试 3.建立topic之间 ...

  5. 3.2 haas506 2.0开发教程-example-wifi定位

    haas506 2.0开发教程-example-wifi定位 wifi定位 1.案例说明 2.程序代码 3.日志输出 总结 wifi定位 1.案例说明 扫描周围所得到的wifi热点,使用mac地址进行 ...

  6. 3.1 haas506 2.0开发教程-example-lbs (支持2.03以上版本)

    haas506 2.0开发教程-example-lbs 1.LBS (围绕地理位置数据而展开的服务) 2.实现步骤 (1)注册账号 (2)创建新应用 (3)添加key (4)程序烧写 (5)日志输出 ...

  7. 1.1 haas506 2.0开发教程-导学篇

    haas506 2.0开发教程-导学篇 一. 下载并安装驱动 1.1 CH340 driver 1.2 8910 driver 二. 搭建开发环境 2.0 集合开发工具HaaS506PYcom 2.1 ...

  8. haas506 2.0开发教程 - 阿里云ota - pac 固件升级(仅支持2.2以上版本)

    haas506 2.0开发教程-ota - pac 固件升级 ota - pac固件升级 案例说明 1.确定开发板内存 2.物联网平台开发 3.设备端开发 调试,确定开发板驻网成功 4.ota - 硬 ...

  9. 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)案例 ...

  10. 2.19 haas506 2.0开发教程 - bluetooth - 蓝牙通信(仅支持2.2以上版本)

    haas506 2.0开发教程 - bluetooth - 蓝牙通信 蓝牙 案例说明 从机测试(支持601与320) 1. 蓝牙调试工具 2. 设备端开发 3. 功能测试 主机测试(仅支持320) 1 ...

最新文章

  1. jQuery.fn是什么意思?
  2. Spring IoC — 基于XML的配置
  3. [小技巧][JAVA][转换]字符数组char[]与字符串String之间互相转换
  4. 你知道别人怎么看你恢复它?
  5. Stanford CS230深度学习(七)RNN和LSTM
  6. 为什么佛系青蛙住进了阿里淘宝——访《旅行青蛙》制作人
  7. java-工具-轮子
  8. 云计算学习笔记:什么是云?云计算是什么?
  9. SQL Server 数据库做读写分离
  10. R 语言 iris 数据集的可视化
  11. 数学建模人口模型及matlab算法解
  12. springboot+责任链模式初体验
  13. Word中快速输入公式
  14. 微信小程序商品详情页面开发案例
  15. java 字符表 chr3,ASCII码对应表chr(9)、chr(10)、chr(13)、chr(32)、chr(3...
  16. CentOS等保三级安全加固方案
  17. Android开发笔记(一百七十三)给安装包APK文件瘦身
  18. NLP定义和机器翻译
  19. Flash activex控件版本信息
  20. EVT/DVT/PVT/MP代表什么阶段

热门文章

  1. SAP中寄售结算规则及要点分析
  2. React Native 填坑记录01
  3. 利用excel生成word,批量插入图片、题注、标题等格式
  4. html背景图片加载慢,javascript – 如何加快我网站的背景图片加载速度?
  5. 中国PET瓶坯注塑系统行业应用态势与投资前景预测报告(2022-2028年)
  6. 【回眸】安装Hightec后如何导入源码及相关环境配置
  7. vijos-伊甸园日历游戏
  8. 22种免费网络推广方式有哪些?
  9. 树莓派 网络附加存储NAS系统和USB外接硬盘文件服务器
  10. SpringBoot多模块项目如何扫描全局mapper接口和mapper.xml文件