数码之家

 找回密码
 立即注册
搜索
查看: 3312|回复: 11

[AVR] ATMEGA48+1602+DS3231时钟

[复制链接]
发表于 2021-4-26 09:45:11 | 显示全部楼层 |阅读模式
很久没有玩单片机了,手头有个1602液晶模块,想着点亮它玩玩。时钟是个不错的选择,连搜带抄的把I2C通讯,并行通讯,时序,中断等都学习了一下。
先在Protues上仿真了一遍,基本和实际上差不多,但是还是会有些许出入。比如液晶写入显示模式的时候,仿真写入一遍就行了,实际上要写入两遍,要不然只能显示一行。而且仿真的时候不用考虑按键消抖问题。还会有一些奇奇怪怪的小问题,有的时候重新上电会导致DS3231的数据清零。有的时候长按设置键进入时间调整模式后,会直接跳到设置第二位(月份设置)。
本来还留了一个插槽准备接AHT20温湿度传感器,但是一来屏幕没地方显示了,二是我程序编的比较拙劣,占用空间比较大,加入读取显示温湿度代码MEGA48容量不够,装不下了。


电量图标指示的是电池电量,温度是从DS3231内部读取的。放冰箱里试过,零下温度显示正常,放冷冻室里冻到-20度。


短按设置键可以切换显示电池电压、USB输入电压


买的DS3231模块上好像还带个EEPROM,没用上


现在1300mAh的电池也就能支持两天,准备把电源指示的LED给去掉,应该能省不少电。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +60 收起 理由
家睦 + 60

查看全部打赏

发表于 2021-4-26 11:58:38 来自手机浏览器 | 显示全部楼层
我用stm8的时候也遇到过这种上电时间归零的问题搞不明白怎么回事儿…按键那个你给单片机电源加加个电容应该就会好很多了…
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-26 13:16:59 | 显示全部楼层
触景情伤 发表于 2021-4-26 11:58
我用stm8的时候也遇到过这种上电时间归零的问题搞不明白怎么回事儿…按键那个你给单片机电源加加个电容应该 ...

电源我加了个106的电容,但是没什么变化。现按键问题很奇怪,我尝试进入按键中断程序后,先关闭中断,然后延时一段时间再做处理,一切都做完了再打开中断。可是依然有的时候进入设置后会直接调到第二位,我把延时加长到1秒来观察,发现是我都松手了,等待延时结束然后直接跳到设置第二位。可以肯定只触发了一次中断服务程序,否则会明显延时2秒的。而且我发现用手指肚按开关就没事,用指甲盖按就这样。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-26 14:02:12 | 显示全部楼层
按键问题终于解决了,我的程序是进入设置按键中断(INT0)程序后,关闭了时间刷新中断(PCINT1),结束的位置重新开启。结果不知什么原因有的时候开启后会触发设置按键中断(INT0)。我在重新开启(PCINT1)中断后加了一句EIFR=(1<<INTF0);把INT0中断标志清零就没事了。
回复 支持 反对

使用道具 举报

发表于 2021-4-26 15:29:12 来自手机浏览器 | 显示全部楼层
蜂鸟 发表于 2021-4-26 14:02
按键问题终于解决了,我的程序是进入设置按键中断(INT0)程序后,关闭了时间刷新中断(PCINT1),结束的位 ...

3231的上电时间归零到底是啥问题?不是每次都这样,只是有一定的几率…
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-26 15:37:16 | 显示全部楼层
我发现抠电池断电通电时3231基本正常,如果在升压板之后在5V输出那上电,就有很大几率会导致3231清零。我在5V电源那并联了一个106的电容会好一些。感觉就是上电的冲击会导致清零。
回复 支持 反对

使用道具 举报

发表于 2021-4-26 19:38:22 来自手机浏览器 | 显示全部楼层
蜂鸟 发表于 2021-4-26 15:37
我发现抠电池断电通电时3231基本正常,如果在升压板之后在5V输出那上电,就有很大几率会导致3231清零。我在 ...

我的是锂电池供电的,一旦锂电池长时间没电再充电的时候时间就清零了…
回复 支持 反对

使用道具 举报

发表于 2021-4-26 21:03:35 | 显示全部楼层
可以用ATMEGA8L代替ATMEGA48吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-27 09:20:34 | 显示全部楼层
fsj5098 发表于 2021-4-26 21:03
可以用ATMEGA8L代替ATMEGA48吗

大体上是一致的,记得好像寄存器名称有的不一样,其他的不太清楚了。看明白程序的功能后对照手册改一改还是比较简单的。我这个也是在网上到处抄,比如I2C的通讯,看明白人家的程序每一步都是在做什么,启动、等待、写地址、发送、等待……,然后对照自己芯片的手册,看自己芯片要完成这些操作怎么写,然后改一改就好了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-27 09:23:14 | 显示全部楼层
触景情伤 发表于 2021-4-26 19:38
我的是锂电池供电的,一旦锂电池长时间没电再充电的时候时间就清零了… ...

我这个电池放空后充电,或者抠电池还没有发现过清零。只有热插拔3231模块,或者升压板,比较容易发生清零。
回复 支持 反对

使用道具 举报

发表于 2021-4-27 22:02:40 | 显示全部楼层
蜂鸟 发表于 2021-4-27 09:20
大体上是一致的,记得好像寄存器名称有的不一样,其他的不太清楚了。看明白程序的功能后对照手册改一改还 ...

哦,学习了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-30 15:04:17 | 显示全部楼层
这几天看着本来要插AHT20的接口空着,越看越难受,想着要么换个ATmega88容量大点。不!我怎么能这么自甘堕落呢。开始不断地优化调整程序。终于在不懈的努力下把AHT20也加上了。经过对程序的优化发现给寄存器赋值时能直接用=的地方,别用|=,占空间大。容量充足时一般我都是用|=,就操作我需要的位,别的位我不管。这回真是一点一点的抠。

终于把AHT20也插上了,这小东西反应速度真快。尤其是湿度,离老远吹口气它都变。

时间模式下没地方显示了,所以温湿度只能每5秒交替显示。

电压模式可以同时显示温湿度。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-26 07:54 , Processed in 0.124800 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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