lionelg
发表于 2012-5-22 21:41:24
Randy 发表于 2012-5-22 18:39 static/image/common/back.gif
已经解决,您可以重新下载库,进行编译看结果哦!
没问题了,多谢~~:)
Mone
发表于 2012-7-26 11:06:01
好给力啊,继续出品这样的教程!
陈圆
发表于 2012-8-24 10:22:15
我用的1.0.1版本的IDE,里面没有 <LiquidCrystal_I2C.h>,编译的时候通不过,我发现每次因为版本不同造成的问题,很多人都建议换一个版本的IDE,难道没有别的方法吗?
Randy
发表于 2012-8-24 12:25:04
陈圆 发表于 2012-8-24 10:22 static/image/common/back.gif
我用的1.0.1版本的IDE,里面没有 ,编译的时候通不过,我发现每次因为版本不同造成的问题,很多人都建议换一 ...
主要是低版本和高版本的文件格式是不一样的!
jack3150
发表于 2012-9-9 12:53:10
1.0.1的IDE,编译通过,但是工作不正常:
Randy
发表于 2012-9-10 09:13:45
jack3150 发表于 2012-9-9 12:53 static/image/common/back.gif
1.0.1的IDE,编译通过,但是工作不正常:
您按照我给出的几个经验检查了没,我自己用这样方法检查,一下测了30个都没问题的!
萧芸凤
发表于 2012-9-15 21:36:34
代码是驱动lcd的。
我今天试了一下,结果输出全是1,寄存器全是0xff
萧芸凤
发表于 2012-9-15 21:37:00
代码是驱动lcd的。
我今天试了一下,结果输出全是1,寄存器全是0xff
Randy
发表于 2012-9-15 22:14:47
萧芸凤 发表于 2012-9-15 21:37 static/image/common/back.gif
代码是驱动lcd的。
我今天试了一下,结果输出全是1,寄存器全是0xff
寄存器难道设置不正确?
萧芸凤
发表于 2012-9-15 22:23:20
Randy 发表于 2012-9-15 22:14 static/image/common/back.gif
寄存器难道设置不正确?
#include "Wire.h"
int rtc;
int year,month,date,hour,minitue,second,week;
void setup()
{
Wire.begin();
Serial.begin(9600);
registerSet(0x68,0x00,0x00);
registerSet(0x68,0x02,0x00);
registerSet(0x68,0x07,0x93);
}
void loop()
{
bcdRtc()
Serial.print(year);
Serial.print(".");
Serial.print(month);
Serial.print(".");
Serial.print(date);
Serial.print(".");
Serial.print(week);
Serial.print(".");
Serial.print(hour);
Serial.print(":");
Serial.print(minitue);
Serial.print(":");
Serial.print(second);
Serial.println();
}
void registerSet(int deviceAddress, int registerAddress, int registerValue)// 写寄存器
{
Wire.beginTransmission(deviceAddress);
Wire.write(registerAddress);
Wire.write(registerValue);
Wire.endTransmission();
}
void registerRead(int deviceAddress, int registerAddress) // 读寄存器
{
int i;
Wire.beginTransmission(deviceAddress);
Wire.write(registerAddress);
Wire.endTransmission();
Wire.requestFrom(deviceAddress,7);
if(Wire.available() <= 7);;
{
for( i = 0 ; i < 7 ; i++)
rtc = Wire.read();
}
Wire.endTransmission();
}
viod bcdRtc()
{
registerRead(0x68,0x00);
year = ( 10 * ( rtc && 0xF0 ) >> 4 ) + ( rtc && 0x0F );
month = ( 10 * ( rtc && 0x10 ) >> 4 ) + ( rtc && 0x0F );
date = ( 10 * ( rtc && 0x30 ) >> 4 ) + ( rtc && 0x0F );
hour = ( 10 * ( rtc && 0x10 ) >> 4 ) + ( rtc && 0x0F );
minitue = ( 10 *( rtc && 0x70 ) >> 4 ) + ( rtc && 0x0F );
second = ( 10 * ( rtc && 0x70 ) >> 4 ) + ( rtc && 0x0F );
week = rtc && 0x0F ;
}
也不知道设置的对不对,我是参考了1307的datasheet,还有就是你的那个库文件
另外,怎样才能把代码贴成你的那个样子啊有行号的那种
Randy
发表于 2012-9-15 22:31:34
萧芸凤 发表于 2012-9-15 22:23 static/image/common/back.gif
也不知道设置的对不对,我是参考了1307的datasheet,还有就是你的那个库文件
另外,怎样才能把代码贴 ...
其实对于Arduino的寄存器来说是不需要设置的,很多时候是已经被一些高手去整合起来了,你现在这个程序的寄存器准不准你需要去仔细看DS1307的datasheet才可以的哦。我没注意看这些,下面回答一下你贴代码的方法。1、点击高级编辑,出来编辑框以后,看图,
点击出来以后,把代码放进去点确认就好了!
萧芸凤
发表于 2012-9-16 18:15:44
本帖最后由 萧芸凤 于 2012-9-16 18:19 编辑
Randy 发表于 2012-9-15 22:31 static/image/common/back.gif
其实对于Arduino的寄存器来说是不需要设置的,很多时候是已经被一些高手去整合起来了,你现在这个程序的寄 ...
下午研究了一下1307,看了半天的datasheet,才发现寄存器中本来就是BCD格式,不需要自己再进行转换了,所以说库文件那个转换过程有些问题,也许是模块不同吧,现在把代码贴一下
#include "Wire.h"
byte rtc;
int year,month,date,hour,minitue,second,week;
void setup()
{
Wire.begin(); //I2C初始化
Serial.begin(9600); //串口通讯初始化
registerSet(0x68,0x00,0x00); //时钟计数器开始
registerSet(0x68,0x07,0x93); //初始化为24时制
registerSet(0x68,0x00,0x00); //设置开始为0秒
registerSet(0x68,0x01,0x40); //设置开始为40分钟
registerSet(0x68,0x02,0x17); //设置开始为17点
registerSet(0x68,0x03,0x06); //设置开始为星期六
registerSet(0x68,0x04,0x16); //设置开始为16号
registerSet(0x68,0x05,0x09); //设置开始为9月
registerSet(0x68,0x06,0x12); //设置开始为12年
}
void loop()
{
bcdRtc();
Serial.print( year,HEX); //串口输出,不要问为什么是十六进制,其实设置为HEX,BIN,OCT都可以,只要不是空着就行,
//如果空着,秒分时的计数就不是59跳变了,而是89.
//原因是什么我也不知道,只知道这样可以正常显示
Serial.print(".");
Serial.print(month,HEX);
Serial.print(".");
Serial.print(date,HEX);
Serial.print(".");
Serial.print(week,HEX);
Serial.print(".");
Serial.print(hour,HEX);
Serial.print(":");
Serial.print(minitue,HEX);
Serial.print(":");
Serial.print(second,HEX);
Serial.println();
}
void registerSet(int deviceAddress, int registerAddress, int registerValue)// 写寄存器
{
Wire.beginTransmission(deviceAddress);
Wire.write(registerAddress);
Wire.write(registerValue);
Wire.endTransmission();
}
void registerRead(int deviceAddress, int registerAddress) // 读寄存器
{
int i;
Wire.beginTransmission(deviceAddress);
Wire.write(registerAddress);
Wire.endTransmission();
Wire.requestFrom(deviceAddress,7);
if(Wire.available() <= 7);;
{
for( i = 0 ; i < 7 ; i++)
rtc = Wire.read();
}
Wire.endTransmission();
}
void bcdRtc()
{
registerRead(0x68,0x00);
year =rtc; //并不需要进行什么换算了,寄存器中的数据就是BCD格式,十秒位,秒位会自动更新
month = rtc;
date = rtc;
hour = rtc;
minitue = rtc;
second = rtc;
week = rtc ;
}
运行后的结果,以年月日星期时分秒的顺序显示
昨天研究了诺基亚的屏幕,今天又研究了1307,看来模块的差异很大,论坛上的教程有时候会起到误导作用,比如说今天的1307,如果使用到库,那么结果肯定是错误的,当然了,我也希望时我的模块问题。
贴一张模块和控制器的图片
Randy
发表于 2012-9-16 19:06:04
萧芸凤 发表于 2012-9-16 18:15 static/image/common/back.gif
下午研究了一下1307,看了半天的datasheet,才发现寄存器中本来就是BCD格式,不需要自己再进行转换了,所 ...
:lol:lol,模块有区别我们是必须有怀疑的,但是我们的笔记的库肯定是自己能工作了才贴出来了,不然肯定不会贴出来了的。呵呵。
萧芸凤
发表于 2012-9-16 19:21:10
Randy 发表于 2012-9-16 19:06 static/image/common/back.gif
,模块有区别我们是必须有怀疑的,但是我们的笔记的库肯定是自己能工作了才贴出来了,不然肯定不 ...
我也想吧我的代码做成库,可惜不会。以前是学过C,但没有学过C++,面向对象只学了VB。08年iphone火爆时学了objective-C,不是很厉害,就制作了一个复数计算器和一个矩阵计算器用来解微分方程,还是只能解奇次方称。
学校里学的是汇编,用的是89C52,毕业 后再也没用过了。
Randy
发表于 2012-9-16 19:58:16
萧芸凤 发表于 2012-9-16 19:21 static/image/common/back.gif
我也想吧我的代码做成库,可惜不会。以前是学过C,但没有学过C++,面向对象只学了VB。08年iphone火爆时 ...
写库,用的最多就是C++了,我也不会C++,遗憾啊。我毕业的时候和你差不多,89S52毕业的。现在好很多了。呵呵。一起学习!