DS 1302 读写异常
板子用的是STC 12C5A系列芯片, 用1302模块, 第一个手板,可以通过串口,通过上位机读写1302.问题:1第一个手板1302 没有用上拉,可以正常读写,引脚用的是推挽模式,(测试了一个多月了) 第二个板子读不出来,写不进去,加了上拉10K电阻也没有用,后将IO口改为开漏模式,可以读出,但还是写不了!
1302 用什么IO模式是OK的?与什么因素有关?两个手板的1302部分是用引线焊接的,会是这里的问题吗?
1302 主程序:
//DS1302初始化函数
void ds1302_init(void)
{
RST=0; //RST脚置低
SCK=0; //SCK脚置低
}
//向DS1302写入一字节数据
void ds1302_write_byte(uchar addr, uchar d)
{
uchar i;
RST=1; //启动DS1302总线
//写入目标地址:addr
addr = addr & 0xFE; //最低位置零,寄存器0位为0时写,为1时读
for (i = 0; i < 8; i ++) {
if (addr & 0x01) {
IO=1;
}
else {
IO=0;
}
SCK=1; //产生时钟
SCK=0;
addr = addr >> 1;
}
//写入数据:d
for (i = 0; i < 8; i ++) {
if (d & 0x01) {
IO=1;
}
else {
IO=0;
}
SCK=1; //产生时钟
SCK=0;
d = d >> 1;
}
RST=0; //停止DS1302总线
}
//从DS1302读出一字节数据
uchar ds1302_read_byte(uchar addr) {
uchar i,temp;
RST=1; //启动DS1302总线
//写入目标地址:addr
addr = addr | 0x01; //最低位置高,寄存器0位为0时写,为1时读
for (i = 0; i < 8; i ++) {
if (addr & 0x01) {
IO=1;
}
else {
IO=0;
}
SCK=1;
SCK=0;
addr = addr >> 1;
}
//输出数据:temp
for (i = 0; i < 8; i ++) {
temp = temp >> 1;
if (IO) {
temp |= 0x80;
}
else {
temp &= 0x7F;
}
SCK=1;
SCK=0;
}
RST=0; //停止DS1302总线
return temp;
}
//向DS302写入时钟数据
void ds1302_write_time(void)
{
ds1302_write_byte(ds1302_control_add,0x00); //关闭写保护
ds1302_write_byte(ds1302_sec_add,0x80); //暂停时钟
//ds1302_write_byte(ds1302_charger_add,0xa9); //涓流充电
ds1302_write_byte(ds1302_year_add,time_buf); //年
ds1302_write_byte(ds1302_month_add,time_buf); //月
ds1302_write_byte(ds1302_date_add,time_buf); //日
ds1302_write_byte(ds1302_hr_add,time_buf); //时
ds1302_write_byte(ds1302_min_add,time_buf); //分
ds1302_write_byte(ds1302_sec_add,time_buf); //秒
ds1302_write_byte(ds1302_day_add,time_buf); //周
ds1302_write_byte(ds1302_control_add,0x80); //打开写保护
}
//从DS302读出时钟数据
void ds1302_read_time(void)
{
time_buf=ds1302_read_byte(ds1302_year_add); //年
time_buf=ds1302_read_byte(ds1302_month_add); //月
time_buf=ds1302_read_byte(ds1302_date_add); //日
time_buf=ds1302_read_byte(ds1302_hr_add); //时
time_buf=ds1302_read_byte(ds1302_min_add); //分
time_buf=(ds1302_read_byte(ds1302_sec_add))&0x7f;//秒,屏蔽秒的第7位,避免超出59
time_buf=ds1302_read_byte(ds1302_day_add); //周
} stc的芯片毛病就是多啊 为毛还在玩DS1302 玩 DS3231 嘛 {:biggrin:}
1302 程序都烂大街了 程序虽然烂大街,但没几个是按时序严格写的,尤其国产兼容的IC,操作时间比较长,调试起来更会生不如死,建议楼主对着ds码代码。 lxa0 发表于 2017-1-15 18:51
stc的芯片毛病就是多啊
关于芯片,有一个感触很深的:15F54 系列芯片,脱机烧录,都不知道有没有烧进去的,批量生产搞死人。另外两个系列的状态就很明确。15F54系列,居然有一个开关状态被冲过去的。整个程序就一个地方改变状态的注释掉后,居然跑两三分钟后,会冲过去了!感觉会不会是芯片问题! kinoko 发表于 2017-1-15 19:25
程序虽然烂大街,但没几个是按时序严格写的,尤其国产兼容的IC,操作时间比较长,调试起来更会生不如死,建 ...
用STC官方的驱动,也不行!! 1-wire总线对时序要求很严格,你有没有用多线程? 要是用了 注意延时有没有问题 你的初始化部分呢? gallle 发表于 2017-1-16 08:07
你的初始化部分呢?
顶头,第一行!IO口是用什么模式呢?感觉什么都不对! STC就谁用谁知道,转其它品牌了 four_zhg 发表于 2017-1-16 19:44
STC就谁用谁知道,转其它品牌了
现像:把 RST与 IO引脚设置为 开漏 加10K上拉,可以读出时间,但写不进去! 你最好是用示波器或逻辑分析仪看一下引脚在写的时候的状态和时序是不是正确 four_zhg 发表于 2017-1-16 20:29
你最好是用示波器或逻辑分析仪看一下引脚在写的时候的状态和时序是不是正确 ...
不好意思, 几片1302 IC 当中有一个是不同批次的,原来10年旧的板子上的,这片可以用。新的几个都是淘宝买的,一个都用不了!! 想不起是有不同批的,又用的是不同款的STC芯片,一直都没有想到DS1302会这出这么多问题! 所以出现各种 奇奇怪怪的现象!!!!!
只能重新购买,再测试了!!! liyo2012 发表于 2017-1-15 22:28
关于芯片,有一个感触很深的:15F54 系列芯片,脱机烧录,都不知道有没有烧进去的,批量生产搞死人。另外 ...
反正我是不用stc的
搞着玩还凑合
正经用还是得at的 这个可以确定是1302芯片的问题。 另外,你既然用来读写,肯定要配置成弱上拉的引脚状态,就是51单片机复位后的默认状态,配置成推挽低电平等于短路了,这都不懂吗? 你现在找到问题了吗? 改
SCK=1; //产生时钟
SCK=0;
为:
nop();
nop();
nop();
SCK=1; //产生时钟
nop();
nop();
nop();
SCK=0;
nop();
nop();
试试看 本帖最后由 chen849928055 于 2017-2-4 11:28 编辑
延时的时间满足了,IO的模式设置对了,一般没有你说的那些问题
另外加上拉10K电阻 ,IO口要设置为开漏模式 Percychiu 发表于 2017-2-4 00:28
你现在找到问题了吗?
换DS芯片试了两台可以! chen849928055 发表于 2017-2-4 11:22
延时的时间满足了,IO的模式设置对了,一般没有你说的那些问题
另外加上拉10K电阻 ,IO口要设置为开漏模式 ...
初步换了芯片可以! 感觉就是芯片问题! 要标准模式,加三个10K上拉,供应商要可靠 xiaobendan 发表于 2017-2-8 19:33
要标准模式,加三个10K上拉,供应商要可靠
现在有三种情况:
A: 淘宝上1.8带电池,带模块的,用不了!
B:实体供应商的,说是国产的,有几个日期修改不了,比如,13-15. (这个很鬼)
C:淘宝上,标称进口芯片的,5块一个的,没有什么问题,可以正常操作! liyo2012 发表于 2017-2-14 14:49
现在有三种情况:
A: 淘宝上1.8带电池,带模块的,用不了!
我只用时间的,淘宝,一次一盘,好像2500片吧,价格好像六毛多吧 xiaobendan 发表于 2017-2-14 14:55
我只用时间的,淘宝,一次一盘,好像2500片吧,价格好像六毛多吧
能用吗? liyo2012 发表于 2017-2-14 15:38
能用吗?
用了两盘了,不良是有的,很少,千分之三左右吧,但是32768晶振的问题比较多,百分之五是有的,现象是起振频率很高,换一个就好了 ds1302所有的io口都要加上拉电阻,不加数据永远不对 淘宝上的坑货挺多,我之前用的比较少,每次50片左右的买,正常价格采购的,
有时候通信不上(这种情况比较少,但也算是常有的事)
有时候数据不对(比如13月2日,或者2月30日等,这个不太容易发现,要设置到前几天让它自己走才会发现问题)
有时候误差太大。 d__xin 发表于 2017-2-15 17:23
淘宝上的坑货挺多,我之前用的比较少,每次50片左右的买,正常价格采购的,
有时候通信不上(这种情况比较 ...
请问测试OK后,会不会再出现不行的? liyo2012 发表于 2017-2-16 21:41
请问测试OK后,会不会再出现不行的?
会啊,只要在TB上零买就这样的,后来是从代理整盘采购才没出现问题了。国产大厂的也没问题。 liyo2012 发表于 2017-2-16 21:41
请问测试OK后,会不会再出现不行的?
但国产的偶尔会有误差大的情况,一部分是晶振的问题,另一少部分是芯片问题。
页:
[1]