DS18B20用的是1-Wire通信协议,外表上看就像三极管一样,但是别小看这家伙了,一个要7元,三极管才几毛,技术含量不一样。18B20的三个管脚,一个接正,一个接负,另一个当然就是用于通信了,故谓之1-Wire,写程序的时候都是MCU利用单线先发信号,然后18B20响应,再然后开始传数据,大体就是这样,一个字节8bit的数据要送8次,因为一条线一次只能送一次嘛,这算是很典型的串行通信了,一条线全搞定,确实很省资源,但是话说回来,硬件成本的降低必将导致程序复杂度的上升。这一位一位传输,是收还是发,什么时候收什么时候发,理清思路了还是蛮容易的。
再说这IIC,前阵子跟着教程学了AT24C02的操作,很典型的IIC通信,就是实现读写的基本操作,那时候只是听完,自己动手写了一遍,似懂非懂,反正照葫芦画瓢。今天收到MAXIM寄来的DS1337(实时时钟,上次操作的是DS12887,并口传输的),兴致一起就想写程序,也是一个IIC总线的,硬件挺简单,一正一负,再接三条到I/O口(SCL/SDA/INTA),还有两个脚要接晶振。苦就苦在申请样片的时候没注意哪种型号集成晶振,结果申请了个不带的,手头又没有32.768KHZ的无奈掉。但是想闲着也是闲着,先写了程序再说,这算是我第一次把15页的英文资料从头到尾看了一遍,算是看懂了,因为之前对IIC有所了解,半猜着也能把意思都弄明白,这一遍算是理论上把IIC吃透了吧。挺不容易的,程序也是从头到尾自己写下来的,感觉应该大体就是那样,但还有待于硬件焊上验证一下。
IIC——一个时钟SCL脚,一个数据SDA,至于INTA是用于芯片内的闹钟时间到了发中断信号用的。也就是说,IIC是用两条线来传输数据,比起1-Wire省点事。写/读的时候也是要一个bit一个bit的那么来。MCU控制SDA先来一个下降沿,说明准备工作了,然后SCL要拉低,每当SCL 低时SDA换下一位数据,SCL 高时,锁存数据,8位完了接收方发个低电平表示应答,然后再传,直至要结束传输,SCA在SCL高时来个上升沿完事。所谓IIC,传输时MCU先送的8bit一个字节前7位是地址,最后一位0/1表示MCU是读还是写数据,第二个字节传输需要读写的数据地址,第三个字节才是数据。基本的流程就是这个样子,理顺了还是不难的。
文章评论(0条评论)
登录后参与讨论