一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2923|回复: 8
收起左侧

[pic] 文盲型单片机2 flowcode连接外置ADC MCP3421有源码,有仿真文件。

[复制链接]
发表于 2016-10-13 00:50 | 显示全部楼层 |阅读模式
一直在研究用flowcode来做一些复杂的事情。比如连接外设。但其实没那么简单。
之前连MCP3208成功。
对源码不熟。特别是某些开发语言内置函数没什么说明的情况下,更不知道所以然。
看ADC的pdf文档所能利用的信息也有限。但研究的话路子肯定有。比如逆向工程。看一下c的结构。然后用flowcode弄出来。mcp3208的 SPI连接就是这么弄出来的。这次到mcp3421 i2c。

先找资料。proteus的仿真。这个有现成最好。还真的有。这里附上,原本是测温的,小改一下测电压。
proteus源文件 PIC16F877A mcp3421 flowcode mo1.zip (21.19 KB, 下载次数: 25)

1 1.JPG


再找c源码有CCS C的。这个比较容易懂,但也比较邪门。
网上的参考代码,mo论坛里面。16bit的。但这个adc支持到18bit。自己摸索改了一下成功。
http://www.amobbs.com/forum.php? ... amp;_dsign=4357642d
附上hex文件 CCS_C_I2C_MCP3421_pic16f877.zip (2.19 KB, 下载次数: 143) 。c源码自己加东西比较多。自己研究吧,这个不提供。改了原本lcd驱动,支持lcd240。这个开发工具里面有mcp3421 的驱动源码。但用了一下发现问题多。程序也写得牛逼。不好逆向和改动。

2 2.JPG

成功后读取的数据是 0到 262144/2. 有一半分辨率没利用到。有能用简单方式利用全部分辨率的坛友技术支持一下。

然后c逆向出flowcode。

由于之前看的源码比较多。有些细节是从其他地方得到的,你问我为什么这样,其实我也不知道。总的来说流程是:

I2C写 0xd0 -----> I2C写 0x8C  -----> I2C写 0xd1 -----> I2C读第1次得8bit数据1 ----->  I2C读第2次得8bit数据2 ----->  I2C读第3次得8bit数据3

瞎搞这么多也就是要得到数据 1  2  3. 16位的话得到2个数据就行。为什么?多看看计算器和pdf文档有一定线索。

数据 1  2  3合成出0到 262144/2. 的数值。怎么合成,我也不太懂。我是用<<。c语言中左移的意思

比如   1 = 0000 0001 << 4 貌似变成 0001 0000 = 16(十进制的16)

3.JPG

flowcode源文件。 flowcode.zip (7.03 KB, 下载次数: 98)
4.JPG

记号的地方和上面红色字对应

有问题的地方,暂时不懂怎么解决。config会变。暂时不知道怎么引起。固定在12就正常。变后数据就不对了。
查看flowcode中的c源码
邪门的地方 PrintNumber(MX_SINT16 FCL_NUMBER); 貌似只能在lcd上输出最大65535。在flowcode中正常,仿真就是65535

换成PrintFormattedNumber(MX_UINT32 FCL_NUMBER, MX_BOOL FCL_FORMAT);貌似可以输出超过65535 ,但其中的参数不是很了解作用。

以上看得懂就看哈。看不懂多仿真修改运行几次就知道我说什么了。
 楼主| 发表于 2016-10-13 00:55 | 显示全部楼层
有个usb库仑计貌似用了这个adc。可以测试到1ma或者1mv

如果编程增益的话测0.001mv貌似都可以。

060023deehc090tocvkqpz.jpg
 楼主| 发表于 2016-10-13 00:58 | 显示全部楼层
193447fgi37tevbi9c97qv.jpg

不知道这个怎么用一个单片机连两颗adc的。 看pdf 要adc i2c地址不同要订购才行。难道图上的是订购的。
发表于 2016-10-13 10:19 | 显示全部楼层
MOWEIWEI 发表于 2016-10-13 00:58
不知道这个怎么用一个单片机连两颗adc的。 看pdf 要adc i2c地址不同要订购才行。难道图上的是订购的。

有没有可能通过单片机的两个IO连MCP3421的VDD来控制是谁工作?
需要研究下PCB的走线
 楼主| 发表于 2016-10-13 13:04 | 显示全部楼层
sln.1550 发表于 2016-10-13 10:19
有没有可能通过单片机的两个IO连MCP3421的VDD来控制是谁工作?
需要研究下PCB的走线

好像思路不错。如果可能的话就看adc的上电多久能出数据了。类似于读取电压这种。一秒钟起码要出2次到3次的数据吧。

算起来就是300毫秒之内切换一个adc

发表于 2016-10-13 13:48 | 显示全部楼层
MOWEIWEI 发表于 2016-10-13 13:04
好像思路不错。如果可能的话就看adc的上电多久能出数据了。类似于读取电压这种。一秒钟起码要出2次到3次 ...

理论上来说,毫无压力。。
发表于 2016-10-13 16:56 | 显示全部楼层
一些ADC支持软件修改I2C地址
发表于 2016-11-22 10:42 | 显示全部楼层
朋友还在玩MCP3421吗
我最近也在研究 遇到些问题
能否加个Q  讨论一下 我的Q 493918889
发表于 2016-11-22 10:43 | 显示全部楼层
MOWEIWEI 发表于 2016-10-13 13:04
好像思路不错。如果可能的话就看adc的上电多久能出数据了。类似于读取电压这种。一秒钟起码要出2次到3次 ...

他们用的都是模拟I2C 只要引脚够用 可以模拟出N个  I2C出来  
挂在 多个MCP3421 就不成问题了

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-19 14:02 , Processed in 0.073709 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表