搜索
bottom↓
回复: 65

基于M88与SPIFLASH的语音报时闹钟

  [复制链接]

出0入0汤圆

发表于 2013-10-12 13:40:57 | 显示全部楼层 |阅读模式
本帖最后由 lcw_swust 于 2013-10-12 14:43 编辑

功能:
语音报时(16KHz,8位),一个闹钟,4位数码管显示,温度显示,手电筒。
(在暗处,工作电流在0.5mA左右,论功耗,还是贴片LED做成点阵比数码管更低些)
*原理:单片机外接32.768KHz晶振用于计时,4位共阴数码管显示,
5mm高亮LED做手电筒,MF58-100K热敏电阻测温,
外接SPIFLASH存储WAV文件, 用PWM驱动喇叭发出声音。
*所用单片机为ATmega88V (MEGA88PA-AU),SPIFLASH为SST25VF080B
*熔丝设置为出厂默认值DF62,使用片内8MHz的RC振荡器
*外接32.768KHz作为T2的异步时钟源
*由数码管内的LED(反向偏置)测量环境亮度,热敏电阻(MF58,100K)测量温度
*使用4位共阴极数码管
*MCU平时工作于"省电模式",由T2唤醒后,动态扫描LED,且处理计时,
*T0:16KHz中断,用于播放WAV
T1:产生PWM,代替DAC,等效于开关功放
*按键与LED的段复用
键1:SET,设置,相应参数闪烁,再按选择下一个参数,
        此键长按为手电筒开关
键2:INC,增加,让闪烁的参数增加,长按此键连续增加
        待机状态按下键2,显示闹钟时间,播报闹钟时间\闹钟开关以及整点报时开关
键3:RD,报时,播报时间与温度
*按键若在10秒内无操作,将回到待机状态
*平时显示时间4秒\显示温度2秒
显示时间时,若闹钟打开,则最右方的小数点亮起
显示温度时,若整点报时开启,则最右方的小数点亮起
*当检测到电池电压低于3.2V时只显示小数点
注意:由于数码管LED测光时放电较慢,在COM4与SEGD间接入了一个20M欧的电阻用于加快放电。









(将PART1与PART2解压到同一文件夹内,双击运行BAT文件可将文件合并)














本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2013-10-14 12:39:29 | 显示全部楼层
谢谢楼主,真全面。初中时买过一个会报时的钟,那时觉得真神奇。。顶一下,这个没人支持??好奇怪啊

出0入0汤圆

发表于 2013-10-14 13:39:49 | 显示全部楼层
手艺不错

出0入0汤圆

发表于 2013-10-14 13:52:32 | 显示全部楼层
是啊,手工不错,没有用AVR好多年了

出0入0汤圆

发表于 2013-10-15 19:24:00 | 显示全部楼层
好东西

出0入0汤圆

发表于 2013-10-15 21:23:06 | 显示全部楼层
支持一下,这个非常不错!

出0入0汤圆

发表于 2013-10-17 20:14:30 | 显示全部楼层
相当不错,合理的设计有详细资料和解释. 感谢.

出0入0汤圆

发表于 2013-10-17 21:44:05 来自手机 | 显示全部楼层
这个不错

出0入0汤圆

发表于 2013-10-17 21:44:45 来自手机 | 显示全部楼层
这个不错

出0入0汤圆

发表于 2013-10-17 21:45:05 来自手机 | 显示全部楼层
这个不错

出0入0汤圆

发表于 2013-11-13 20:27:29 | 显示全部楼层
很不错,请问一下楼主,你的这个是先要把程序写到下载器里,再由下载器写到CPU和SPI Flash里面去的吗?

出0入0汤圆

 楼主| 发表于 2013-11-13 22:05:27 | 显示全部楼层
YF_Wang 发表于 2013-11-13 20:27
很不错,请问一下楼主,你的这个是先要把程序写到下载器里,再由下载器写到CPU和SPI Flash里面去的吗? ...

下载器是由USB转串口芯片和一个STC单片机做的(类似STK500),
但是,烧写AVR单片机与烧写SPIFLASH的STC单片机运行的程序是不同的,(上位机也不同)
将LCW-ISP V1.6(STC)内的HEX烧入STC单片机,这个东东可称之为"AVR下载器"
此时上位机需要打开AVR单片机的HEX文件,通过串口发送到STC单片机,再写入AVR.
将LCW-FLASH V1.6(STC)内的HEX烧入STC单片机,这个东东可称之为"SPIFLASH下载器"
此时上位机需要打开需要写入到SPIFLASH的BIN文件,通过串口发送到STC单片机,再写入SPIFLASH.
由于本人比较懒,未将二者整合到一起,其实二者大多数代码是相同的.

出0入0汤圆

发表于 2013-11-26 10:46:08 | 显示全部楼层
lcw_swust 发表于 2013-11-13 22:05
下载器是由USB转串口芯片和一个STC单片机做的(类似STK500),
但是,烧写AVR单片机与烧写SPIFLASH的STC单片 ...

请教楼主:
      
         我用的Flash是25Q16,单片机用的是STC12C40052、11.0592M晶振,通过串口读写可以操作正常(IO模拟的SPI通信),看到楼主的制作非常不错,也想一些语音文件到Flash里,用了楼主的程序,但是不成功,通过上位机操作时:
点击”检测芯片“,一直显示
设置波特率
重发数据
重发数据
重发数据
串口通信不正常
单片机的程序里也把相应的修改了一下(楼主用的是20M晶振,我已经改成了#define FOSC 11059200,然后有一些地方的运算比例也按11.0592M来修改了)

请问楼主,是哪里不对吗,谢谢!

另外,我用串口监视工具看到信息为

1       [00000000]  IRP_MJ_CREATE                   Port Opened - LCW-FLASH V1.5.exe
2       [00000000]  IOCTL_SERIAL_SET_BAUD_RATE      Baud Rate: 312500
3       [00000001]  IOCTL_SERIAL_SET_LINE_CONTROL   StopBits: 1, Parity: No, DataBits: 8
4       [00000001]  IOCTL_SERIAL_SET_BAUD_RATE      Baud Rate: 2400
5       [00000002]  IOCTL_SERIAL_SET_LINE_CONTROL   StopBits: 1, Parity: No, DataBits: 8
6       [00000002]  IRP_MJ_WRITE                    Length: 0009, Data: AA 1E 00 04 01 04 C4 B4 49
7       [00000003]  IRP_MJ_READ                     Length: 0001, Data: AA
8       [00000004]  IRP_MJ_READ                     Length: 0004, Data: 1E 00 04 01
9       [00000005]  IRP_MJ_READ                     Length: 0003, Data: 04 C4 B4
10      [00000006]  IRP_MJ_READ                     Length: 0001, Data: 49
11      [00000006]  IOCTL_SERIAL_SET_BAUD_RATE      Baud Rate: 312500
12      [00000007]  IOCTL_SERIAL_SET_LINE_CONTROL   StopBits: 1, Parity: No, DataBits: 8
13      [00000007]  IRP_MJ_WRITE                    Length: 0008, Data: AA 1F 00 03 06 01 01 D4
14      [00000008]  IRP_MJ_READ                     Length: 0001, Data: 00
15      [00000051]  IRP_MJ_WRITE                    Length: 0008, Data: AA 1F 00 03 06 01 01 D4
16      [00000051]  IRP_MJ_READ                     Length: 0001, Data: 00
17      [00000100]  IRP_MJ_WRITE                    Length: 0008, Data: AA 1F 00 03 06 01 01 D4
18      [00000100]  IRP_MJ_READ                     Length: 0001, Data: 00
19      [00000149]  IRP_MJ_WRITE                    Length: 0008, Data: AA 1F 00 03 06 01 01 D4
20      [00000149]  IRP_MJ_READ                     Length: 0001, Data: 00
21      [00000205]  IRP_MJ_CLOSE                    Port Closed

好像没有执行到switch里面,我添加了下面红色的一行代码调试。

void uart1_mint(U8 ud)
{
        uartsendbyte(ud);        // 调试,看程序执行到这里没有

        switch(uartstate)//enum state{HEAD,LEN,TYPE,DATA,CHECK};
        {
                //~ uartsendbyte('P');        // 调试,看程序执行到这里没有
          
                case HEAD:
                        if(ud==START)
                        {

出0入0汤圆

 楼主| 发表于 2013-11-26 11:29:03 | 显示全部楼层
YF_Wang 发表于 2013-11-26 10:46
请教楼主:
      
         我用的Flash是25Q16,单片机用的是STC12C40052、11.0592M晶振,通过串口读写 ...


您好,请把你的程序一起发上来。
我这试了下,串口通信没问题。
所用单片机为STC12C4052AD,程序中仅改了一处:#define FOSC 11059200

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-11-26 12:10:40 | 显示全部楼层
lcw_swust 发表于 2013-11-26 11:29
您好,请把你的程序一起发上来。
我这试了下,串口通信没问题。
所用单片机为STC12C4052AD,程序中仅改了 ...

楼主您好:

        请帮忙看看,谢谢!

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2013-11-26 13:23:11 | 显示全部楼层
YF_Wang 发表于 2013-11-26 12:10
楼主您好:

        请帮忙看看,谢谢!

问题找到,应该是头文件的问题。

#include"STC12C4052AD.H"
改为
#include"STC12C2052AD.H"
就行了。
由于你给我的程序没有这个文件STC12C4052AD.H,你可以自己对比一下二者的区别,再结合单片机手册来看。
(我用的Keil2,生成文件为LCW-ISP.hex)

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-11-26 18:38:57 | 显示全部楼层
lcw_swust 发表于 2013-11-26 13:23
问题找到,应该是头文件的问题。

#include"STC12C4052AD.H"

楼主您好:

          首先非常感谢楼主的认真指导!谢谢!
         我把我这边编译的Hex文件和你发给我的对比了一下(我用KEIL2编译的也一样),有好多不一样,应该还是程序有一些地方不同,下载你的那个文件(LCW-ISP.hex)通信正常,但好像还是不能下载语音文件,每次都是“下位机数据区容量:74”。我截了两张图片,您帮忙看看!谢谢!

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2013-11-26 20:01:06 | 显示全部楼层
YF_Wang 发表于 2013-11-26 18:38
楼主您好:

          首先非常感谢楼主的认真指导!谢谢!

这样吧,把你用KEIL编的工程发过来,再把编译器也一起发过来.

出0入0汤圆

发表于 2013-11-27 08:12:53 | 显示全部楼层
lcw_swust 发表于 2013-11-26 20:01
这样吧,把你用KEIL编的工程发过来,再把编译器也一起发过来.

楼主您好:

          这个是我这边编译的KEIL工程,请帮忙看看,谢谢!

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2013-11-27 09:46:12 | 显示全部楼层
本帖最后由 lcw_swust 于 2013-11-27 09:48 编辑
YF_Wang 发表于 2013-11-27 08:12
楼主您好:

          这个是我这边编译的KEIL工程,请帮忙看看,谢谢!


你的工程与我的有两点不同:
1、你的Target是STC单片机,我的是AT89S53。(这一点不重要,我的编译器安装时没添加STC,只是在源代码文件夹内添加STC的头文件)
2、下图里红圈内打个勾。

(刚刚回复时竟然要邮箱验证,而且邮件收不到,点“重新接收”才收到)

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-11-27 21:13:38 | 显示全部楼层
lcw_swust 发表于 2013-11-27 09:46
你的工程与我的有两点不同:
1、你的Target是STC单片机,我的是AT89S53。(这一点不重要,我的编译器安装 ...

楼主您好:

       我按照你说的勾上了,编译后上位机通信设置波特率是可以了,但就只到了“下位机数据区容量:74”这里,这个是哪里出了问题呢?谢谢!

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2013-11-27 22:34:45 | 显示全部楼层
顶好贴,顶楼主。
好奇下楼主做了多久做出这个东西。

出0入0汤圆

发表于 2013-11-28 08:53:54 | 显示全部楼层
不错的东东,这个语音播放,声音大吗?

出0入0汤圆

 楼主| 发表于 2013-11-28 08:55:53 | 显示全部楼层
YF_Wang 发表于 2013-11-27 21:13
楼主您好:

       我按照你说的勾上了,编译后上位机通信设置波特率是可以了,但就只到了“下位机数据 ...

加我Q,449630071

出0入0汤圆

 楼主| 发表于 2013-11-28 08:58:59 | 显示全部楼层
leicai05 发表于 2013-11-28 08:53
不错的东东,这个语音播放,声音大吗?

至少我觉得做闹钟足够了,修改程序中的PWM周期调节音量,声音可以更大。

出0入0汤圆

发表于 2013-11-28 09:07:18 | 显示全部楼层
顶一下,楼主好人................

出0入12汤圆

发表于 2013-11-28 09:52:01 | 显示全部楼层
这东东最大亮点就是语音啦,嗯,下载来看看是怎么弄的

出0入0汤圆

发表于 2013-11-28 09:59:37 | 显示全部楼层
mark clock

出0入0汤圆

发表于 2013-11-28 10:36:34 | 显示全部楼层
嘿嘿 我也做了个不过是51的

出0入0汤圆

 楼主| 发表于 2013-11-28 11:54:24 | 显示全部楼层
richards 发表于 2013-11-28 10:36
嘿嘿 我也做了个不过是51的

哦,看看呗。有链接吗?

出0入0汤圆

发表于 2013-11-28 11:56:18 | 显示全部楼层
不错,比较有特色。

出0入0汤圆

 楼主| 发表于 2013-11-28 11:58:03 | 显示全部楼层
skynet 发表于 2013-11-28 09:52
这东东最大亮点就是语音啦,嗯,下载来看看是怎么弄的

是啊,盲人也可以用的。
小时候用过一个语音报时的手表,拆开看里面用的压电陶磁,还有一个电感一样的东东,不知它的声音怎么做得那么大。

出0入0汤圆

发表于 2013-11-28 13:00:52 | 显示全部楼层
lcw_swust 发表于 2013-11-28 11:54
哦,看看呗。有链接吗?

比较早做的这个东西了,等哪天我回去翻出来,也传上来。

出0入0汤圆

发表于 2013-11-28 21:29:54 | 显示全部楼层
写的真好,留个记号

出0入0汤圆

发表于 2013-12-31 16:59:27 | 显示全部楼层
非常好!支持下!

出0入76汤圆

发表于 2014-3-13 19:09:39 | 显示全部楼层
呵呵, 不错,支持一下

出0入0汤圆

发表于 2014-3-13 19:25:31 | 显示全部楼层
支持啊!太好了!

出0入0汤圆

发表于 2014-3-13 19:55:40 | 显示全部楼层
这么无私奉献肯定要支持下拉

出0入0汤圆

发表于 2015-2-2 00:09:21 | 显示全部楼层
楼主,时钟是4M的吧

出0入0汤圆

 楼主| 发表于 2015-2-2 09:07:17 | 显示全部楼层
本帖最后由 lcw_swust 于 2015-2-2 09:12 编辑
a_y_ang 发表于 2015-2-2 00:09
楼主,时钟是4M的吧


我看手册上说它的内部RC振荡器频率就是8MHZ啊,你觉得是4M?
通过CLKPR寄存器可修改时钟的分频,这倒是可以让单片机工作于4M的时钟。
但是我的程序里写的是CLKPR=0X00;即时钟分频因子为1,时钟就等于RC振荡器的频率。

哦,我明白了,你是把它当作ATmega8了。
ATmega88PA相对于ATmega8来说,是有一些改进的,寄存器略有不同,低功耗性能更好。

出0入0汤圆

发表于 2015-2-2 10:22:05 | 显示全部楼层
关注楼主很久了,楼主的作品很多都是精品,支持一下!

出0入0汤圆

 楼主| 发表于 2015-2-2 10:27:28 | 显示全部楼层
hygs 发表于 2015-2-2 10:22
关注楼主很久了,楼主的作品很多都是精品,支持一下!


最近正在做四轴哦,敬请关注。
前两天还把二轮平衡车改了下。

出0入0汤圆

发表于 2015-2-3 10:44:08 | 显示全部楼层
lcw_swust 发表于 2015-2-2 09:07
我看手册上说它的内部RC振荡器频率就是8MHZ啊,你觉得是4M?
通过CLKPR寄存器可修改时钟的分频,这倒是可 ...


我主要是看了这个定时器的初始化,要是在8兆的时钟下,能得到这些值么,另外问下,

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2015-2-3 11:08:38 | 显示全部楼层
a_y_ang 发表于 2015-2-3 10:44
我主要是看了这个定时器的初始化,要是在8兆的时钟下,能得到这些值么,另外问下,
...

以T0为例,启动T0是在这里:

这是8分频,T0中断里TCNT0 = 200;这样算下来定时中断频率为:
F=8M/8分频/(256-200)=约17.9KHz,加上进入中断占用的时间,大约就是16KHz了。

所以timer0_init里的值是误导大家了。
你“另外问下”要问什么?

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2015-2-3 12:04:31 | 显示全部楼层
太谢谢了,你下面说的就是我要问的,

出0入0汤圆

发表于 2015-2-3 12:37:48 | 显示全部楼层
全手工打造啊

出0入0汤圆

发表于 2015-2-5 09:41:58 | 显示全部楼层
原来也做过类似的,但没有语音,学学习

出0入0汤圆

发表于 2015-2-5 16:48:43 | 显示全部楼层
make,搞一个1寸的出来

出0入0汤圆

发表于 2015-2-5 17:15:50 | 显示全部楼层
学习,谢谢楼主分享

出0入0汤圆

发表于 2015-2-7 23:09:38 | 显示全部楼层
楼主,真棒,

出0入0汤圆

发表于 2015-2-8 00:23:18 | 显示全部楼层
不知为何,尝试了种种方法,楼主的视频文件打不开……

出0入0汤圆

 楼主| 发表于 2015-2-8 10:22:27 | 显示全部楼层
进口小开关 发表于 2015-2-8 00:23
不知为何,尝试了种种方法,楼主的视频文件打不开……

将两个附件放到一个文件夹里,解压后就得到 下面这些文件,再运行“Unite_语音报时钟操作视频.bat”即可得到一个3GP文件

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2015-2-8 10:54:59 | 显示全部楼层
手工不错,不用AVR好多年

出0入0汤圆

发表于 2015-2-27 22:36:38 | 显示全部楼层
全手工打造,还有详细资料,虽然没时间做,但确实学到了。

出0入0汤圆

发表于 2015-6-5 22:34:48 | 显示全部楼层
老牛逼了            

出0入0汤圆

发表于 2015-7-26 23:01:58 | 显示全部楼层
楼主牛人啊.做的东西都不错

出0入0汤圆

发表于 2015-12-11 09:29:59 | 显示全部楼层
好强大  能做个 STM8的不    STC 和 M88 都好贵了

出0入0汤圆

 楼主| 发表于 2015-12-11 10:22:46 | 显示全部楼层
ayumi8 发表于 2015-12-11 09:29
好强大  能做个 STM8的不    STC 和 M88 都好贵了

STM8,我没用过

出0入42汤圆

发表于 2016-1-6 12:55:40 | 显示全部楼层
楼主 动手能力很棒  那会儿也自己搞过这方面的 确实不错

出0入0汤圆

发表于 2016-3-27 23:54:54 | 显示全部楼层
时钟走时精度如何? 我看楼主 秒计数(秒钟处理)中断中有一些其他操作,会不会很影响走时精度?

出0入0汤圆

 楼主| 发表于 2016-3-29 16:29:43 | 显示全部楼层
sunplus 发表于 2016-3-27 23:54
时钟走时精度如何? 我看楼主 秒计数(秒钟处理)中断中有一些其他操作,会不会很影响走时精度? ...

精度还行吧,如果不准,可以调节晶振旁的电容,或者程序里加修正。
中断里的操作不会影响走时,因为定时器相当于是“自动重装”模式。

出0入4汤圆

发表于 2019-8-1 21:02:26 | 显示全部楼层
照着做了一个,成功了.不错,程序很多地方值得学习,多谢分享!

出0入0汤圆

 楼主| 发表于 2019-8-2 08:43:41 | 显示全部楼层
BS_good200xy 发表于 2019-8-1 21:02
照着做了一个,成功了.不错,程序很多地方值得学习,多谢分享!

恭喜            

出0入0汤圆

发表于 2023-8-2 11:46:15 | 显示全部楼层
点个赞,回忆杀来一波,很久就知道用PWM做语音播报,新项目应用还是可以考虑玩下的,用维创之类专用IC也是麻烦
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 05:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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