矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
楼主: 438048671

求助,利用单片机能累计延时吗?

[复制链接]
     
发表于 2018-2-11 09:25:04 | 显示全部楼层
如果仅仅是一个供电的装置,那么把它短路就解除了。
回复 支持 反对

使用道具 举报

     
发表于 2018-2-11 10:38:00 | 显示全部楼层
以前的回复被屏蔽了,这里重新说明。
你要实现的而功能,有3部分组成:延时,控制,与工作时间的记录。延时功能与控制功能几乎所有廉价的单片机都可以实现,稍微特殊一些的功能是工作时间的掉电记忆,这就要求电路带有EEPROM或者FLASH。
STC单片机可有提供以上的功能,因为STC内部的FLASH可以供用户是用,写在这里面的数据掉电后不会丢失。另外从生产方面,你这个东西既然是一次性的,就要考虑降低成本。目前我知道原件成本最低的的方案是用一个合泰的单片机(不到1元)加上一个EEPROM存储器(几毛钱)。
回复 支持 反对

使用道具 举报

     
发表于 2018-2-11 10:57:09 | 显示全部楼层
EEPROM的写入好象需要单独的电压供电,用FLASH方案可能会更方便些。
回复 支持 反对

使用道具 举报

     
发表于 2018-2-11 11:11:40 | 显示全部楼层
建议AT TINY或者PIC12之类的SOT-6/SO-8封装的小芯片,如果计时精度要求不高,就可以用内部晶振,如果要求高,还是要挂外部晶振的。

这里不需要E2PROM,只要有适当的FLASH,按分散写入的方式填满空间就可以了,注意要点就是不能把FLASH当E2PROM使用,操作上必须分散,集中写很快会寿终正寝的。
回复 支持 反对

使用道具 举报

     
发表于 2018-2-11 11:17:24 | 显示全部楼层
hujj 发表于 2018-2-11 10:57
EEPROM的写入好象需要单独的电压供电,用FLASH方案可能会更方便些。

现在的EEPROM大多已经不需要外部提供单独的编程电压了。不过现在的趋势是用FLASH,STC内部的EEPROM,实际就是开辟了一块给用户使用的FLASH,而不是真正的EEPROM。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-2-12 15:39:35 | 显示全部楼层
夏国特 发表于 2018-2-11 11:11
建议AT TINY或者PIC12之类的SOT-6/SO-8封装的小芯片,如果计时精度要求不高,就可以用内部晶振,如果要求高 ...

计时精度要求不高,本人对单片机不是很懂,最好你能给个电路图和程序。谢谢
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-2-12 15:43:59 | 显示全部楼层
hujj 发表于 2018-2-11 10:57
EEPROM的写入好象需要单独的电压供电,用FLASH方案可能会更方便些。

如果供电的话电路体积又大了,要简单。
回复 支持 反对

使用道具 举报

     
发表于 2018-2-13 20:51:00 | 显示全部楼层
很简单啊,PIC12F629好像就可以,
程序就写一个延时1S,
满了60,就M加1,
M满60就H加一,
这样得到1小时单位,
H满24,又加1,
得到一天单位,,还可以加,加,

分钟满10的时候,把EEROM里保存的时间读出来,加上使用的十分钟数据单位,再保存进去,
,再读一下现在保存的使用时间是多少了,如果达到或超过设定的剧终时间,就启动自毁装置,

回复 支持 反对

使用道具 举报

     
发表于 2018-2-14 00:07:36 | 显示全部楼层
我这只有stm32f030f4p6,这个比较大还贵不适合。


SYSTICK定时器1秒中断一次,每次中断加1,结果写到FLASH,FLASH从0X8000C00到0X8004000循环写,重新开机在这个数组里找最大的,找到把地址和数据读出来,100小时时间到PA0-PA7输出高。
虽然程序很简单但是我第一次写这样的程序,不敢保证哦,反正你也不会用,这样程序调试容易擦坏片子,调出来也没什么用。


  1.         @ stm32f030f4p6 asm
  2.         @计数器
  3.         @100小时,没测试
  4.         @到时间GPIOA0-GPIOA7=高, 没测试。
  5.         @ 没测试
  6.          .thumb
  7.         .syntax unified
  8.         .section .data
  9.         .equ STACKINIT,         0x20001000
  10.         .equ jishu,                0x20000000
  11.         .equ yaoxiedeflash,        0x20000004
  12. .section .text
  13. xiangliangbiao:        
  14.         .word STACKINIT         
  15.         .word _start + 1        
  16.         .word _nmi_handler + 1  
  17.         .word _hard_fault  + 1  
  18.         .word 0
  19.         .word 0   
  20.         .word 0
  21.         .word 0
  22.         .word 0
  23.         .word 0
  24.         .word 0
  25.         .word _svc_handler +1
  26.         .word 0
  27.         .word 0
  28.         .word _pendsv_handler +1
  29.         .word _systickzhongduan + 1
  30. _start:
  31.         ldr r0, = 0x40022000
  32.         ldr r1, = 0x45670123
  33.         str r1, [r0, # 0x04]
  34.         ldr r1, = 0xcdef89ab
  35.         str r1, [r0, # 0x04]
  36.        
  37.         ldr r0, = 0x8000800
  38.         ldr r2, = 0xa55a
  39.         ldrh r1, [r0]
  40.         cmp r1, r2
  41.         beq _zhaozuidadeshu
  42.        
  43.         ldr r2, = yaoxiedeflash
  44.         ldr r0, = jishu
  45.         ldr r1, = 0x8000c00
  46.         movs r3, # 0
  47.        
  48.         str r3, [r0]
  49.         str r1, [r2]
  50.        
  51.         ldr r0, = 0x40022000
  52.         ldr r4, = 0xa55a
  53.         ldr r7, = 0x8000800
  54. _xieflashmang:
  55.         ldr r2, [r0, # 0x0c]
  56.         lsls r2, r2, # 31
  57.         bmi _xieflashmang
  58.         movs r1, # 1
  59.         str r1, [r0, # 0x10]
  60.         strh r4, [r7]
  61.        
  62. _xieflashmang1:
  63.         ldr r2, [r0, # 0x0c]
  64.         lsls r2, r2, # 31
  65.         bmi _xieflashmang1
  66.        
  67. _zhaozuidadeshu:       
  68.         ldr r0, = 0x8000c00
  69.         ldr r1, = 0x3400
  70.         ldr r6, = 0xffffffff
  71.         movs r2, # 0
  72.         mov r3, r2
  73. _zhaozuidade:
  74.         ldr r4, [r0, r2]
  75.         cmp r4, r3
  76.         bls _zhaozuidade1
  77.         mov r5, r2
  78.         mov r3, r4
  79. _zhaozuidade1:
  80.         adds r2, r2, # 4
  81.         cmp r2, r1
  82.         bne _zhaozuidade
  83.         cmp r3, r6
  84.         bne _bushiffff
  85.         subs r5, r5, # 4
  86.         mov r7, r5
  87.         lsls r7, r7,  # 31
  88.         bpl _bushiffff
  89.         movs r5, # 0
  90. _bushiffff:       
  91.         ldr r2, = yaoxiedeflash
  92.         ldr r1, = jishu
  93.         add r0, r0, r5
  94.         str r0, [r2]
  95.         ldr r3, [r0]
  96.         str r3, [r1]
  97. _systick:                        @ systick定时器初始化
  98.        
  99.         ldr r0, = 0xe000e010
  100.         ldr r1, = 10000000
  101.         str r1, [r0, # 4]
  102.         str r1, [r0, # 8]
  103.         movs r1, # 0x07
  104.         str r1, [r0]

  105. _waisheshizhong:                                 @ 外设时钟
  106.         ldr r0, = 0x40021000
  107.         ldr r1, = 0x460005
  108.         str r1, [r0, # 0x14]
  109.         ldr r0, = 0x48000000
  110.         ldr r1, = 0x28005555
  111.         str r1, [r0]
  112. tingting:
  113.         ldr r6, = 0xffffffff
  114.         ldr r0, = jishu
  115.         ldr r1, = 360000
  116.         ldr r2, [r0]
  117.         cmp r2, r6
  118.         beq tingting
  119.         cmp r2, r1
  120.         bls tingting
  121.         ldr r2, = 0x48000018
  122.         ldr r3, = 0xe000e010
  123.         movs r4, # 0
  124.         movs r1, # 0xff
  125.         str r1, [r2]
  126.         str r4, [r3]
  127.         b tingting
  128. _nmi_handler:
  129.         bx lr
  130. _hard_fault:
  131.         bx lr
  132. _svc_handler:
  133.         bx lr
  134. _pendsv_handler:
  135.         bx lr
  136. _systickzhongduan:
  137.         ldr r0, = 0xe0000d04
  138.         ldr r1, = 0x02000000
  139.         str r1, [r0]                 @ 清除SYSTICK中断
  140.         cpsid i
  141.          ldr r0, = 0x40022000
  142.         ldr r1, = jishu
  143.         ldr r2, [r1]
  144.         adds r2, r2, # 1
  145.         str r2, [r1]
  146.         ldr r7, = yaoxiedeflash
  147.         ldr r6, = 0x8004000
  148.         ldr r3, [r7]
  149.         adds r3, r3, # 4
  150.         cmp r3, r6
  151.         bne _meichaochu
  152.         ldr r4, = 0x8000c00
  153.         mov r3, r4
  154.        
  155.         movs r5, # 14
  156.         ldr r6, = 0x400
  157. _caflashmang:
  158.         ldr r2, [r0, # 0x0c]
  159.         lsls r2, r2, # 31
  160.         bmi _caflashmang
  161.         movs r1, # 2
  162.         str r1, [r0, # 0x10]
  163.         str r4, [r0, # 0x14]
  164.         movs r1, # 0x42
  165.         str r1, [r0, # 0x10]
  166.         add r4, r4, r6
  167.         subs r5, # 1
  168.         bne _caflashmang
  169.        
  170. _meichaochu:       
  171.         str r3, [r7]
  172.         mov r7, r3
  173.         mov r3, r2
  174.        

  175. _flashmang1:
  176.         ldr r2, [r0, # 0x0c]
  177.         lsls r2, r2, # 31
  178.         bmi _flashmang1
  179.        
  180.         movs r1, # 1
  181.         str r1, [r0, # 0x10]
  182.         strh r3, [r7]
  183.         lsrs r3, r3, # 16
  184.        
  185. _flashmang2:
  186.         ldr r2, [r0, # 0x0c]
  187.         lsls r2, r2, # 31
  188.         bmi _flashmang2
  189.        
  190.         strh r3, [r7, # 0x02]
  191. _flashmang3:
  192.         ldr r2, [r0, # 0x0c]
  193.         lsls r2, r2, # 31
  194.         bmi _flashmang3
  195.         cpsie i
  196.         bx lr
复制代码


jishuqi.zip (7.27 KB, 下载次数: 28)





回复 支持 反对

使用道具 举报

     
发表于 2018-2-14 00:18:07 | 显示全部楼层
截图_2018-02-14_00-12-11.png

1脚通过10K电阻接GND
4脚通过104电容接GND
5、16  接3.3V
15接GND
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-2-22 17:13:51 | 显示全部楼层
yjmwxwx 发表于 2018-2-14 00:18
1脚通过10K电阻接GND
4脚通过104电容接GND
5、16  接3.3V

新年好,首先谢谢楼主认真的回复  。我知道最小的贴片单片机是tiny13a-ssu,能不能用这样的单片机做呢?
回复 支持 反对

使用道具 举报

     
发表于 2018-2-24 09:39:40 | 显示全部楼层
这个不难的,甚至可以在到达倒计时后把单片机自己烧毁的都有。
回复 支持 反对

使用道具 举报

     
发表于 2018-2-24 10:05:16 | 显示全部楼层
我有这样一个思路,不知道你的时间计数单位是什么,每隔一段时间保存一次计数值,下次开始使用的时候继续保存的数值开始倒计时。
这就牵扯到了EEPROM存储或者FLASH的存储。每隔一段时间的方法当然没有断电时进行保存方法好,毕竟Flash或者EEPROM都是有擦写次数的。
比如用FLASH方法:每个扇区512字节,每秒存一次4字节数据,那么一个扇区可以存128次,即128秒需要擦除一次Flash。如果俩扇区就是256秒擦一次。如果按flash最大擦写次数10万次。则一个扇区我们能使用最大倒计时100000*128=12800000秒。换算成小时12800000/3600=3555.555小时。换算成天3555/24=148.148天,换算成年148/365=0.405年,不到半年,当然这是累计时间!如果使用两个两个扇区,最大时间翻倍。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2018-2-24 12:34:28 | 显示全部楼层
IdeaMing 发表于 2018-2-24 10:05
我有这样一个思路,不知道你的时间计数单位是什么,每隔一段时间保存一次计数值,下次开始使用的时候继续保 ...

你能提供具体电路和程序吗、?
回复 支持 反对

使用道具 举报

     
发表于 2018-2-24 15:00:12 | 显示全部楼层
IdeaMing 发表于 2018-2-24 10:05
我有这样一个思路,不知道你的时间计数单位是什么,每隔一段时间保存一次计数值,下次开始使用的时候继续保 ...

这个厉害了我的哥,直接干废片子!

这个猛!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 05:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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