软定时器
所谓软定时器,是由一个线程运行维护的定时器列表。由线程调用定时器回调函数。
相对硬定时器,是由中断(SysTick)维护的定时器列表,并在中断中调用定时器回调函数。
另外,还有一种*硬件定时器*,这个和单片机里的定时器是一个概念,由外设定时器实现定时。和 rt-thread 提供的硬定时器是两个不同概念。
对硬定时器回调函数有严格的执行时间要求,而且不能调用任何在中断中不能调用的函数。总之不能有任何不能在中断中执行的操作。
那么,软定时器呢,要求需要这么严格吗?
比如有个处理执行时间 10ms,比如在定时器中断函数里发送个等待 10ms 的消息...
无论是硬定时器还是软定时器,它们各自有一个定时器列表。列表中的定时器根据定时时间长短排序,定时时间短的在前。扫描这个列表中所有定时器,直到结尾或者出现第一个定时时间未到的定时器节点。当判断出定时时间到的时候,调用定时器回调函数。
假如,某次扫描这个列表中多于一个定时器到达定时时间,也就是需要执行两个以上的定时器回调函数。并且前一个扫描到的定时器的回调函数执行时间比较长,出现上面设想的某一种使用情况。这时候会出现什么效果?
因为硬定时器的种种硬性要求,以下讨论只针对软定时器。
从对 `rt_soft_timer_check` 的几个疑问讲起
先摆出官方的 rt_soft_timer_check 函数,实现。这个函数是来扫描定时器列表中到达定时时间的定时器,并调用定时器回调函数的。
```
void rt_soft_timer_check(void)
{
rt_tick_t current_tick;
struct rt_timer *t;
register rt_base_t level;
rt_list_t list;
rt_list_init(&list);
RT_DEBUG_LOG(RT_DEBUG_TIMER, ("software timer check enter\n"));
/* disable interrupt */
level = rt_hw_interrupt_disable();
while (!rt_list_isempty(&rt_soft_timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1]))
{
t = rt_list_entry(rt_soft_timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1].next,
struct rt_timer, row[RT_TIMER_SKIP_LIST_LEVEL - 1]);
current_tick = rt_tick_get();
/*
* It supposes that the new tick shall less than the half duration of
* tick max.
*/
if ((current_tick - t->timeout_tick) < RT_TICK_MAX / 2)
{
RT_OBJECT_HOOK_CALL(rt_timer_enter_hook, (t));
/* remove timer from timer list firstly */
_rt_timer_remove(t);
if (!(t->parent.flag & RT_TIMER_FLAG_PERIODIC))
{
t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;
}
/* add timer to temporary list */
rt_list_insert_after(&list, &(t->row[RT_TIMER_SKIP_LIST_LEVEL - 1]));
soft_timer_status = RT_SOFT_TIMER_BUSY;
/* enable interrupt */
rt_hw_interrupt_enable(level);
/* call timeout function */
t->timeout_func(t->parameter);
RT_OBJECT_HOOK_CALL(rt_timer_exit_hook, (t));
RT_DEBUG_LOG(RT_DEBUG_TIMER, ("current tick: %d\n", current_tick));
/* disable interrupt */
level = rt_hw_interrupt_disable();
soft_timer_status = RT_SOFT_TIMER_IDLE;
/* Check whether the timer object is detached or started again */
if (rt_list_isempty(&list))
{
continue;
}
rt_list_remove(&(t->row[RT_TIMER_SKIP_LIST_LEVEL - 1]));
if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) &&
(t->parent.flag & RT_TIMER_FLAG_ACTIVATED))
{
/* start it */
t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED;
rt_timer_start(t);
}
}
else break; /* not check anymore */
}
/* enable interrupt */
rt_hw_interrupt_enable(level);
RT_DEBUG_LOG(RT_DEBUG_TIMER, ("software timer check leave\n"));
}
疑问一 `rt_list_t list` 这个临时中间变量的作用是什么?
-
进入 `rt_soft_timer_check` 函数后,先初始化 list 变量。
-
扫描定时器列表,当有到时的定时器,把这个定时器从软定时器列表 `rt_soft_timer_list` 移除,插入到这个 list 临时存放。
-
开中断,调用定时器回调函数,关中断
-
把 list 中存放的定时器移除
-
判断定时器的周期定时器还是一次性定时器
-
继续扫描定时器列表
list 是个局部变量,仅仅起临时存放当前这个定时器的作用。看似是一种稳妥的做法。
但是,这样做的初衷是什么?
为什么这个定时器一定要放到某个列表里?
如果从软定时器列表 `rt_soft_timer_list` 移除后,不插入任何列表会有什么影响?
因为退出 `rt_soft_timer_check` 函数后,list 列表不复存在了,应该不是退出 `rt_soft_timer_check` 函数后的需求,那么插入 list 和 从 list 取出之间有哪些情况需要我们注意,需要用一个临时列表将软定时器暂存?
定时器回调函数里可能发生哪些操作?
-
修改定时器设置
-
停止,重启定时器
-
删除定时器
-
发生中断,在中断里执行上述三种操作
修改定时器设置,可能只涉及到定时器的定时时间间隔和定时周期特性。这两个参数设置需要定时器必须在某个列表中吗?
停止,重启定时器,必然导致修改定时器所在列表指针,这里就涉及到双向列表的操作了。
> 简短介绍一下双向列表,
-
rt-thread 使用的双向列表,每一个节点有一个 prev 和 一个 next 指针,分别指向双向列表中的前一个节点和后一个节点。
-
一个空列表 l 仅有一个不含数据的节点,此节点的 prev next 指针均指向它自己。
-
任何一个带数据的列表节点必须进行初始化,使得它的 prev next 分别指向它自己,这一点和空列表 l 完全雷同!换句话说,***任何一个双向列表节点均有作为链表的潜质***。从操作上讲,你可以定义两个定时器,然后这两个定时器之间构建一个含有两个节点的双向列表,当然,这种做法没有多少实用意义。
-
从链表中移除的节点,**必须**使得它的 prev next 指针指向它自己。
-
**无论一个节点是否在某个双向链表中,或者仅仅是一个独立节点,对它进行删除操作,效果是完全一样的!**
-
更多的操作详见 rtservice.c 文件中相关函数,`rt_list_init, rt_list_insert_after, rt_list_insert_before, rt_list_remove` 等等。
停止定时器会把当前定时器从定时器列表删除,无论这个定时器有没有在某个定时器列表中,或者只是一个独立的定时器节点,删除操作的结果都是一样的,使用 list 这个临时列表可能不能保护它不被删除。
重启定时器会把它先从前一个列表中删除,然后插入软定时器列表 `rt_soft_timer_list` 。list 这个临时列表也阻止不了重启定时器操作。
**至此,可以看出,`rt_list_t list` 这个临时列表无任何存在意义**
疑问二 `soft_timer_status` 指示的是什么状态?
这是一个全局静态变量,它的使用也很简单,只在四个地方使用了,上面的源码函数里有两处,其它两个地方分别是初始化声明
/* soft timer status */
static rt_uint8_t soft_timer_status = RT_SOFT_TIMER_IDLE;
和——以下摘自 `rt_timer_start` 函数
#ifdef RT_USING_TIMER_SOFT
if (timer->parent.flag & RT_TIMER_FLAG_SOFT_TIMER)
{
/* check whether timer thread is ready */
if ((soft_timer_status == RT_SOFT_TIMER_IDLE) &&
((timer_thread.stat & RT_THREAD_STAT_MASK) == RT_THREAD_SUSPEND))
{
/* resume timer thread to check soft timer */
rt_thread_resume(&timer_thread);
rt_schedule();
}
}
#endif /* RT_USING_TIMER_SOFT */
将这四个地方联系起来看,意思好像是调用定时器回调函数前修改软定时器为 busy 状态,返回回调函数后恢复为 idle 状态,而如果是在定时器回调函数里调用 `rt_timer_start` ,可以达到不进行任务调度的目的。好像是起了双保险作用,真是这样吗?
我们分析一下上面这段 `rt_timer_start` 函数片段。
首先判断定时器是不是软定时器,只有软定时器启动时才有进行任务调度的可能。
其次,判断 `soft_timer_status` 是否空闲,以及软定时器线程是否***挂起态***。
以上仨条件均满足,进行任务调度。
我们重点关注“其次”,一个定时器线程调用的定时器回调函数,这个线程会是挂起态吗?答案是肯定不是。它在运行着,肯定是 `RT_THREAD_RUNNING` 的。那么这个 `soft_timer_status` “双保险”了吗?
疑问三 开篇提到的假想
开篇提到了一种假想,假想软定时器回调函数占用 cpu 时间有点儿长,会产生什么影响,引起什么后果。
讨论这个问题仍然离不开 `rt_soft_timer_check` 函数工作原理,我们再梳理一下 `rt_soft_timer_check` 函数的操作。(以下分析忽略 list 以及 soft_timer_status 相关操作)
-
关中断
-
扫描列表是否有节点
-
取出第一个节点
-
***获取当前系统 tick***
-
检查定时器是否定时时间到,如果到时
-
先从软定时器列表 `rt_soft_timer_list` 移除定时器。非周期定时器,取消激活态
-
开中断
-
执行定时器回调函数。(这里可能存在长时间操作)
-
关中断
-
对于周期性定时器,重启定时器;非周期定时器,前面已经做了取消激活态操作。
-
继续扫描列表,取出第一个节点,***获取当前系统 tick*** ,检查定时器是否定时时间到。。。
假设 RT_TICK_PER_SECOND = 1000,有两个周期性定时器 t0 t1 ,定时间隔不同,同时启动,各自的定时器回调函数执行时间 t0 500us,t1 5 ms。
经过一段时间以后,总是可能会出现定时间隔公倍数时刻 Tn ,它们俩同时达到定时时间。
如果 t1 先被处理,那么 t1 重启的时候系统 tick 已经是 Tn + 5;t0 的重启时间有 50% 的可能是 Tn + 5, 50%的可能是 Tn + 6。
如果 t0 先被处理,t0 的重启时间有 50% 的可能是 Tn, 50%的可能是 Tn + 1;t1 重启时间是 Tn + 5 或 Tn + 6。
即便不考虑 t0 不考虑它对外的影响,也不考虑它受到的影响,仅仅分析 t1 自己对自己的影响,也可以看出来,随着时间的推移,它的定时间隔不是初始设定的 Inv ,而是 Inv + 5。
优化后的 `rt_soft_timer_check` 流程
-
***获取当前系统 tick***
-
关中断
-
扫描列表是否有节点
-
取出第一个节点
-
检查定时器是否定时时间到,如果到时
-
先从软定时器列表 `rt_soft_timer_list` 移除定时器。
-
对于周期性定时器,***重启定时器***;非周期定时器,取消激活态。
-
开中断
-
执行定时器回调函数。(这里可能存在长时间操作)
-
关中断
-
继续扫描列表,取出第一个节点,检查定时器是否定时时间到。。。
其中,优化后的重启定时器不能使用原来的接口。需要使用如下原型函数接口
static rt_err_t _rt_timer_start(rt_timer_t timer, rt_tick_t current_tick)
第二个参数是进入 `rt_soft_timer_check` 函数,第一次关中断前获取的当前系统 `tick` 值,无论下面扫描出多少个到达时间的定时器,启动时间都是同一个 `tick` 值。
而且无论其中某个定时器回调函数执行时间有多长,或者多个回调函数累积执行时间有多长,它们的启动时间都是相同的!
注:由此,引起的另一个弊端的,期间某个定时器定时时间到了,但是会被判定为未到,下次调用 `rt_soft_timer_check` 时才会被处理。
static void led1_timeout(void *parameter)
{
rt_tick_t current_tick;
int pin = rt_pin_read(LED1_PIN);
rt_pin_write(LED1_PIN, !pin);
current_tick = rt_tick_get();
rt_hw_us_delay(50000);
}
void led_tick_thread(void *parameter)
{
rt_timer_t led1_timer;
led1_timer = rt_timer_create("ledtim1", led1_timeout,
RT_NULL, 1000,
RT_TIMER_FLAG_PERIODIC | RT_TIMER_FLAG_SOFT_TIMER);
if (led1_timer != RT_NULL) {
rt_timer_start(led1_timer);
}
while (1) {
rt_pin_write(LED0_PIN, PIN_HIGH);
rt_thread_mdelay(500);
rt_pin_write(LED0_PIN, PIN_LOW);
rt_thread_mdelay(500);
}
}
作为对比,两个 led 一个用软定时器控制亮灭频率,一个用 mdelay 延时控制亮灭频率。
如果 timeout 没有延迟,两个灯一直是同步的;有延迟后,过一段时间两个灯亮灭变不同步了。
总结
肯定有很多人反对说,定时器回调函数不要有长时间操作。发消息,信号,邮箱...交给其它线程操作云云。
软定时器本身就是一个线程,通过某种技术手段,在这个线程中可以完成的工作,一定要使用消息机制交给另外一下线程完成吗?
如何抉择,请君深思
本优化系列所有提到的更改已经提交到 gitee ,欢迎大家测试
https://gitee.com/thewon/rt_thread_repo
相关文章:
rt-thread 优化系列(0) SysTick 优化分析
rt-thread 优化系列(一) 之 过多关中断
rt-thread 优化系列(二) 之 同步和消息关中断分析
审核编辑:汤梓红
相关推荐
rt-thread studio 安装
首先需要确保已经安装 rt-thread studio
在工具栏找到 SDK 管理器,点击后在弹出窗口,Board_Supp...
发表于 07-01 11:41 •
0次
阅读
一文带你深入理解 RT-Thread I/O 设备模型 — UART 设备源码分析。
矜辰所致 发表于 07-01 11:24
•
62次
阅读
开发环境:RT-Thread Studio
开发板:Art-Pi
OS版本:4.0.3
硬件
显示屏:金逸晨GMG12864-03A
温湿度:DHT1...
发表于 07-01 11:24 •
0次
阅读
问题发生位置:drv_eth.c文件rt_stm32_eth_tx函数中(254行)
修复方法:stm32f4xx_hal_eth.h头文件631行Lock成员变量定义为...
发表于 07-01 11:12 •
0次
阅读
一、功能简介
在window系统中将rtthread移植到zynq
在sdk中实现无bsp的zynq工程调试
在zynq中演示rtthread的shell功能
二、配...
发表于 07-01 10:48 •
14次
阅读
对于使用 CWRITE 的每个函数调用,都要进行检查以查看函数是成功执行还是因错误而中止。如果发生错....
栈空间的大小是固定的,它有一个水位线,标识栈空间的分配状态,水位线里面的表示已经分配,然后这个水位线....
SGL_SSD_ERROR(OWNER_NAME[], OWNER_AXNAME[], VAR_NA....
1、Linux RIL的概述与驱动
在移动网络通信中,尤其是智能手机,平板等智能设备中,RIL是一个非常重要的组件,RIL使各...
发表于 07-01 10:29 •
384次
阅读
1、移植RIL到ART-Smart之共享内存简析
本次移植的linux ril中,rild作为一个client与modem通过AT命令交互,同时也作为...
发表于 07-01 10:17 •
406次
阅读
事情还是得从RTTHREAD 官方的文档Keil 模拟器 STM32F103 上手指南
说起,用了很久的KEIL,相信大家很少有人用...
发表于 06-30 17:12 •
3254次
阅读
内核是操作系统最重要的部分,学习RT-Thread也是从最基本的内核开始。 RT-Thread内....
发表于 06-30 17:10 •
84次
阅读
硬件介绍
NuMaker-IoT-M487 开发板以 NuMicro M487 系列微控制器为主控核心,主频 192MHz,512KB FLASH,160K...
发表于 06-30 17:01 •
3175次
阅读
MCU启动文件(startup.s)里定义的 Stack 是 1KB
Stack_Size EQU 0x00000400
Rt-Thread 也定义了一个 Stack
请...
发表于 06-30 16:52 •
5696次
阅读
前言
以前没接触过Rt,也没用过实时操作系统,所以板子到手,不如何进行学习。
幸亏官方资料多,教程也多,我等小白有持续了解...
发表于 06-30 16:50 •
3215次
阅读
c\c++语言函数速查手册
发表于 06-30 14:48 •
10次
阅读
介绍Windows下通过 Uboot TFTP 方式下载和启动rt-smart 内核
学完 RT-Thread 内核,从本文开始熟悉了解 RT-Thread I/O 设备管理相关知识。
矜辰所致 发表于 06-30 10:38
•
1168次
阅读
用附件里的 system-user.dtsi 把 project-spec/meta-user/re....
FPGA之家 发表于 06-30 09:48
•
29次
阅读
采用麻雀一号为主控设备来实现,摄像头数据,人体红外感应或门开关来判断是否有人闯入机房。通过Node-....
极速紫韵 发表于 06-30 06:45
•
1281次
阅读
本项目采用到硬件方案是:通过ART-Pi STM32H750主板上的I2C引脚和UART以及一个普通....
极速紫韵 发表于 06-30 06:22
•
1252次
阅读
基于RT-Thread和中蓝讯科开发板,实现按键触发语音报警和NodeRed收集报警信息并上报腾讯云....
极速紫韵 发表于 06-30 00:36
•
1114次
阅读
假设现在我们要实现一个复数类complex,在类的实现过程中探索良好的编程习惯。
开放寻址法
中断服务程序在中断发生时执行,就像在典型的嵌入式系统中一样。系统中的 ISR 或者是用于 PWM....
应用篇-在STM32L051上使用RT-Thread 第五篇,也是本次应用的完结篇。
矜辰所致 发表于 06-29 10:34
•
1462次
阅读
这里最重要的是要注意到上面的图示,积分图对象的Mat(1,1)对应实际图像Mat(0,0),如果不加....
选择正确的嵌入式软件开发工具和正确的工具供应商可能是一项挑战。确保您选择的软件支持您将使用的设备....
从技术上讲,可以编写一个没有超时和延迟函数(如 OSTimeDly())的多任务应用程序。然而,....
./oschina_soft/gitee-EasyTask.zip
发表于 06-29 09:19 •
12次
阅读
为了在开销和分辨率之间取得适当的平衡,您需要考虑硬件平台的功能和应用程序的时序需求。以 µC/O....
Hash,一般翻译做“散列”,也有直接音译为“哈希”的, 哈希系统 竞猜模式就是把任意长度的输入(又....
设备集成商必须采取全面的节能方法,从能够缩减功耗的硬件和基础设施开始,并采用能够控制设备整体功耗....
应用篇-在STM32L051上使用RT-Thread 第四篇,巧妙的使用信号量处理串口通讯。
矜辰所致 发表于 06-28 10:59
•
1499次
阅读
应用篇-在STM32L051上使用RT-Thread 第三篇,学习RT-Thread Studio如....
矜辰所致 发表于 06-27 10:32
•
1431次
阅读
应用篇-在STM32L051上使用RT-Thread 第二篇,使用STM32CubeMX 进行对应外....
矜辰所致 发表于 06-26 14:02
•
2175次
阅读
我们知道,在写裸机程序时,当我们完成硬件初始化后,就需要在主函数中进行调用。当我们使用RT-Thre....
嵌入式大杂烩 发表于 06-25 21:38
•
3252次
阅读
学完了 RT-Thread 内核基础,来使用 RT-Thread 实现一个小应用。
硬件平台:ST....
矜辰所致 发表于 06-25 20:45
•
3440次
阅读
在ESP32上面运行 RT-THREAD.
./oschina_soft/ReactiveObjC.zip
发表于 06-24 14:26 •
10次
阅读
第一种方法用单片机的定时器模拟出PWM。假如你用定时器延时100ms,在50ms之前某一个引脚为低电....
要长高 发表于 06-24 11:53
•
586次
阅读
RT-Thread 内核部分最后一个点 中断管理,顺带着对前面所学知识做个小结。
矜辰所致 发表于 06-24 10:25
•
3389次
阅读
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,哈l8l希2809系2756统竞猜模式就是把....
发表于 06-24 10:08 •
29次
阅读
蓝牙定时器是在按键式定时器的基础上升级而来的,增加了蓝牙连接功能,15米范围内可以通过微信小程序对开....
潘霞 发表于 06-23 16:27
•
217次
阅读
基于NK-980IoT的国学唐诗学习机 1 项目背景 最近一直在陪小孩学习国学精髓,比如唐诗、宋词这....
./oschina_soft/gft4c.zip
发表于 06-23 14:50 •
12次
阅读
无论是在家里还是在公司,安防都尤为的重要,与其亡羊补牢,更重要的是防患于未然。安全是目的,防范是....
这里有个简单的方法,直接在syscalls.c文件中,改写_write()函数的内容,代码如下所示。....
很久之前就开始整理下面的优化项列表了,但是有很多问题研究不深,一时不敢冒失推出。
出出 发表于 06-23 10:21
•
2401次
阅读
记得最初学习 RT-Thread ,对于内存管理我也是简单看看然后一笔带过,当时觉得用不上,在我做的....
矜辰所致 发表于 06-23 10:11
•
268次
阅读
区别于 rt-thread 内核实现的两种定时器,这种定时器依赖芯片内置的定时器外设,依靠稳定高速的....
出出 发表于 06-23 10:10
•
1520次
阅读
信号 signal,并不是线程间同步的信号量 semaphore。后者是线程间同步机制的一种,而前者....
出出 发表于 06-23 09:51
•
1478次
阅读
手把手教你使用RT-Thread制作GD32 RISC-V系列BSP 熟悉RT-Thread的朋....
嵌入式大杂烩 发表于 06-22 19:44
•
2081次
阅读
JVM为了提高性能和减少内存开销,在实例化字符串常量时进行了优化。JVM在Java堆上开辟了一个字符....
讲完了线程同步的机制,我们要开始线程通讯的学习,
矜辰所致 发表于 06-22 10:06
•
251次
阅读
本周笔者花了好多天的时间,计划从多个方面对串口驱动做个比较。下面就从以下几个角度做个对比测试。
出出 发表于 06-22 09:22
•
1363次
阅读
在前一篇文章里,大致提出了我的串口驱动框架理论。里面做了一些对串口驱动特性的幻想。也在 NUC970....
出出 发表于 06-22 09:03
•
1471次
阅读
信息 RE46C163器件是一种低功耗,CMOS电离型烟雾探测器IC。由于外部元件很少,该电路将为电离型烟雾探测器提供所有必需的功能。内部振荡器每隔1.67秒为烟雾探测电路提供10.5 ms的电源,以使待机电流保持在最低水平。在待机状态下,每40秒检查一次电池电量不足的情况。外部引脚可以选择连续音或NFPA时间喇叭模式。互连引脚允许连接多个探测器,因此当一个单元发出警报时,所有单元都会发出声音。电荷转储功能将在退出本地时快速释放互连线报警。互连输入也经过数字滤波。内部1分钟定时器允许单个按钮,按下测试用于降低灵敏度模式。报警记忆功能允许用户确定设备是否先前已进入本地报警条件。利用低功耗CMOS技术,RE46C163器件设计用于符合美国保险商实验室规范UL217和UL268的烟雾探测器。 针可选喇叭图案 报警记忆 灵敏度控制定时器:1分钟 >所有引脚上的> 1500V ESD保护(HBM) 离子检测器输入的保护输出 ±0.75 pA检测输入电流 内部反向电池保护 低静态电流消耗( I / O滤波器和充电转储 内部电池低电量检测 电源电池低电量测试 最多可互连66个探测器 符合RoHS标准,无铅封装 电路图、引脚图和封装图...
发表于 04-18 23:15 •
122次
阅读
信息 RE46C180是下一代低功耗可编程CMOS电离型烟雾探测器IC。该电路具有极少的外部元件,可为电离式烟雾探测器提供所有必需的功能。片上振荡器每10秒钟为烟雾探测电路提供5ms的电源,以使待机电流保持在最低水平。检查电池是否过低条件每80秒进行一次,待机时每320秒进行一次电离室测试。时间喇叭模式支持NFPA 72紧急疏散信号。互连引脚允许连接多个探测器,这样当一个单元发出警报时,所有单元都会响起。当退出本地警报时,电荷转储功能将快速释放互连线。互连输入也经过数字滤波。内部9分钟或80秒定时器可用于降低灵敏度模式。本地报警记忆功能允许用户确定设备是否先前已进入本地报警状态。利用低功耗CMOS技术RE46C180设计用于符合美国保险商实验室规范UL217和UL268的烟雾探测器。 6-12V操作 低静态电流消耗< / p> +/- 0.75pA检测输入电流 离子检测器输入的保护输出 可编程待机灵敏度< / p> 可编程嘘声灵敏度 可编程滞后 可编程电压表用于按键测试 电池设置点不足 本地闹钟内存 自动闹钟定位 喇叭同步 9分钟或80秒Hush Ti mer 时间或连续号角模式 最多可互连40个探测器 IO Filter and Charge Dump < / p> 10年...
发表于 04-18 23:15 •
109次
阅读
信息 RE46C162器件是一种低功耗CMOS电离型烟雾探测器IC。由于外部元件很少,该电路将为电离型烟雾探测器提供所有必需的功能。内部振荡器每隔1.67秒为烟雾探测电路提供10.5 ms的电源,以使待机电流保持在最低水平。在待机状态下,每40秒检查一次电池电量不足的情况。外部引脚可以选择连续音或NFPA时间喇叭模式。互连引脚允许连接多个探测器,因此当一个单元发出警报时,所有单元都会发出声音。电荷转储功能将在退出本地时快速释放互连线报警。互连输入也经过数字滤波。内部8分钟定时器允许单个按钮,按下测试用于降低灵敏度模式。报警记忆功能允许用户确定设备是否先前已输入本地报警条件。利用低功耗CMOS技术,RE46C162器件设计用于符合美国保险商实验室规范UL217和UL268的烟雾探测器。 针可选喇叭图案 报警记忆 灵敏度控制定时器:8分钟 >所有引脚上的> 1500V ESD保护(HBM) 离子检测器输入的保护输出 ±0.75 pA检测输入电流 内部反向电池保护 低静态电流消耗( I / O滤波器和充电转储 内部电池低电量检测 电源电池低电量测试 最多可互连66个探测器 符合RoHS标准,无铅封装 电路图、引脚图和封装图...
发表于 04-18 23:15 •
150次
阅读
信息 RE46C152是一款低功耗CMOS电离型烟雾探测器IC。由于外部元件很少,该电路将为电离型烟雾探测器提供所有必需的功能。内部振荡器每1.66秒向烟雾探测电路供电10.5mS,以使待机电流保持最小。在待机状态下,每40秒检查一次电池电量不足的情况。音调输入允许选择时间模式或2/3占空比连续音调。时间喇叭模式支持NFPA 72紧急疏散信号。互连引脚允许连接多个探测器,这样当一个单元发出警报时,所有单元都会响起。内部8分钟计时器允许使用单独的按钮来降低灵敏度模式。用于测试和定时器模式的单按钮操作也是可能的。尽管该设备设计用于利用电离室的烟雾检测,但它可以用于各种安全应用。 RE46C152设计用于烟雾探测器,符合美国保险商实验室规范UL217和UL268 >所有引脚上的> 1500V ESD保护(HBM) 离子检测器输入的保护输出 +/- 0.75pA检测输入电流 内部反向电池保护 低静态电流消耗( 16L PDIP 内部电池低电量检测 电源低电量测试< / p> 最多可互连40个探测器 引入可选喇叭模式 8分钟定时器进行灵敏度控制 符合RoHS标准的无铅包装。 电路图、引脚图和封装图...
发表于 04-18 23:15 •
86次
阅读
信息 RE46C144是低功耗CMOS光电式烟雾探测器IC。该电路具有最少的外部元件,可为光电式烟雾探测器提供所有必需的功能。 RE46C144设计用于符合美国保险商实验室规范UL217和UL268的烟雾探测器。 内部电源重置 低静态电流消耗 提供16L PDIP或16L N SOIC 所有引脚上的ESD保护 最多可连接40个探测器 10分钟灵敏度控制定时器 连续音喇叭模式 内部电池低电量和室内测试 与Allegro A5358兼容 提供标准包装或符合RoHS标准的无铅包装。 电路图、引脚图和封装图...
发表于 04-18 23:15 •
212次
阅读
信息 RE46C127是低功耗CMOS电离型烟雾探测器IC。由于外部元件很少,该电路将为电离型烟雾探测器提供所有必需的功能。内部振荡器每1.66秒向烟雾探测电路供电10.5mS,以使待机电流保持最小。在待机状态下,每40秒检查一次电池电量不足的情况。 2/3占空比连续喇叭模式用于报警条件。互连引脚允许连接多个探测器,这样当一个单元发出警报时,所有单元都会响起。内部8分钟计时器允许使用单独的按钮来降低灵敏度模式。尽管该装置设计用于利用电离室进行烟雾检测,但它可用于各种安全应用。 RE46C127设计用于符合美国保险商实验室规范UL217和UL268的烟雾探测器。 离子检测器输入的保护输出 +/- 0.75pA检测输入电流 内部反向电池保护 低静态电流消耗( 提供16L PDIP或16L N SOIC 所有引脚上的ESD保护 ;内部电池低电量检测 最多可互连40个探测器 8分钟灵敏度控制定时器 兼容使用Allegro A5348 提供标准包装或符合RoHS标准的无铅包装。 电路图、引脚图和封装图...
发表于 04-18 23:15 •
153次
阅读
信息 RE46C140是低功耗CMOS光电式烟雾探测器IC。该电路具有最少的外部元件,可为光电式烟雾探测器提供所有必需的功能。 RE46C140设计用于符合美国保险商实验室规范UL217和UL268的烟雾探测器。 内部电源重置 低静态电流消耗 提供16L PDIP或16L N SOIC 所有引脚上的ESD保护 最多可连接40个探测器 10分钟灵敏度控制定时器 时间号角模式 内部电池低电量和室内测试 与Allegro A5366兼容 提供标准包装或符合RoHS标准的无铅包装。 电路图、引脚图和封装图...
发表于 04-18 23:14 •
139次
阅读
信息 RE46C122是低功耗CMOS电离型烟雾探测器IC。由于外部元件很少,该电路将为电离型烟雾探测器提供所有必需的功能。内部振荡器每1.66秒向烟雾探测电路供电10.5mS,以使待机电流保持最小。在待机状态下,每40秒检查一次电池电量不足的情况。颞角图案支持NFPA 72紧急疏散信号。互连引脚允许连接多个探测器,这样当一个单元发出警报时,所有单元都会响起。内部10分钟计时器允许使用单独的按钮来降低灵敏度模式。尽管该装置设计用于利用电离室进行烟雾检测,但它可用于各种安全应用。 RE46C122设计用于符合Und的烟雾探测器 >所有引脚上的> 1500V ESD保护(HBM) 离子检测器输入的保护输出 +/- 0.75pA检测输入电流 内部反向电池保护 低静态电流消耗( 16L PDIP或16L N SOIC 内部电池低电量检测 加电低电量测试 最多可互连40个探测器 10分钟定时器进行灵敏度控制 兼容使用Allegro A5367 提供标准包装或符合RoHS标准的无铅包装。 电路图、引脚图和封装图...
发表于 04-18 23:13 •
242次
阅读
信息 CAT1832电压监控器可以暂停并重新启动“挂起”或“停顿”的微处理器,在电源故障后重启微处理器,并去除手动/推送 - 按钮微处理器复位开关该器件是Maxim / Dallas Semiconductor DS1832监控器的替代品。精密基准电压源和比较器电路监控3.3 V系统电源电压V 。在上电期间或当电源超出可选容差限制时,RESET和都将变为活动状态。在电源电压升至RESET阈值电压以上后,复位信号保持有效至少250 ms,从而使电源和系统处理器稳定。跳闸点容差输入TOL选择CAT1832 3.3 V电源的跳闸电平容差为10%或20%。每个器件都具有推挽式高电平有效复位输出。 CAT1832还具有推挽式低电平有效复位输出。去抖动手动复位输入激活复位输出,并在释放后保持有效状态至少250 ms。还包括看门狗定时器重置因软件或硬件故障而停止的微处理器。可选择三个看门狗超时周期:150 ms,600 ms和1.2 sec。如果在看门狗超时周期结束前,输入未被选通为低电平,则复位信号将至少激活250 ms。 可选复位电压容差 - CAT1232LP for 5.0 V电源 - 用于3.3 V电源的CAT1832 可选看门狗周期:150 ms,600 ms或1.2 sec 两个复位输出 - 高电平有效推挽式复位输出 - 低电...
发表于 04-18 22:19 •
238次
阅读
信息 MC1455单片定时器电路是一种高度稳定的控制器,能够产生精确的时间延迟或振荡。如果需要,提供附加端子用于触发或重置。在延时模式下,时间由一个外部电阻和电容精确控制。为了稳定地作为振荡器工作,可以通过两个外部电阻和一个电容精确控制自由运行频率和占空比。该电路可以在下降波形上触发和复位,输出结构可以提供或吸收高达200 mA的电流或驱动TTL电路。 直接替换NE555定时器 从微秒到时间的定时小时 在稳定模式和单稳态模式下运行 可调节占空比 高电流输出可以输出或吸收200 mA 输出可以驱动TTL 温度稳定性为0.005%/°C 常开或常关输出 无铅封装可用 电路图、引脚图和封装图...
发表于 04-18 21:57 •
1625次
阅读
单片定时器电路是一种高度稳定的控制器,能够产生精确的时间延迟或振荡。如果需要,提供附加端子用于触发或重置。在延时模式下,时间由一个外部电阻和电容精确控制。为了稳定地作为振荡器工作,可以通过两个外部电阻和一个电容精确控制自由运行频率和占空比。电路可以在下降波形上触发和复位,输出结构可以提供或吸收高达200 mA的电流或驱动TTL电路。 特性 NE555的直接替换计时器 从微秒到小时的时间 在Astable和Monostable模式下操作 可调节占空比 高电流输出可以输出或吸收200 mA 输出可以驱动TTL 温度稳定性0.005%/°C 正常开启或正常关闭输出 无铅封装可用 电路图、引脚图和封装图...
发表于 04-18 21:28 •
253次
阅读
信息描述 The LMC555 device is a CMOS version of the industry standard 555 series general-purpose timers. In addition to the standard package (SOIC, VSSSOP, and PDIP) the LMC555 is also available in a chip-sized package (8-bump DSBGA) using TIs DSBGA package technology. The LMC555 offers the same capability of generating accurate time delays and frequencies as the LM555 but with much lower power dissipation and supply current spikes. When operated as a one-shot, the time delay is precisely controlled by a single external resistor and capacitor. In the astable mode the oscillation frequency and duty cycle are accurately set by two external resistors and one capacitor. The use of TIs LMCMOS process extends both the frequency range and the low supply capability.特性Industrys Fastest Astable Frequency of 3 MHz Available in Industry's Smallest 8-Bump DSBGA Package (1.43mm × 1.41mm) Less Than 1 mW Typical P...
发表于 04-18 20:33 •
1249次
阅读
信息描述 TLC555 是一个使用 TI LinCMOS 工艺制造的单片定时电路。 定时器与 CMOS,TTL,和 MOS 逻辑电路完全兼容并且运行在高达 2MHz 的频率上。 由于它的高阻抗特性,这个器件使用的定时电容器比那些 NE555 所使用的电容器要小。 因此,可实现更加准确的时间延迟和振荡。 在整个电源电压范围内功耗较低。与 NE555 类似,TLC555 有一个约等于电源电压三分之一的触发电平以及一个约等于电源电压三分之二的阀值电平。 可使用控制电压端子 (CONT) 来改变这些电平。 当触发输入 (TRIG) 下降至低于触发电平的时候,触发器被设定并且输出变为高电平。 如果 TRIG 高于触发电平并且阀值输入 (THRES) 在阀值电平之上的话,触发器被复位并且输出为低电平。 复位输入 (RESET) 的优先级高于所有其它输入并且可被用来启动一个新的定时周期。 如果 RESET 为低电平,触发器被复位并且输出为低电平。 只要当输出为低电平,在放电端子 (DISCH) 和接地 (GND) 之间提供一个低阻抗路径。 所有未使用的输入应该被接至一个适当的逻辑电平来防止错误触发。当 CMOS 输出能够吸收超过 100mA 的电流并提供超过 10mA 电流时,...
发表于 04-18 20:08 •
1048次
阅读
信息LM555是一个高度稳定的控制器,能够产生精确定时脉冲。 如果是单稳态运行,延时将由一个外部电阻和一个电容进行控制。 如果是稳态运行,频率和占空比将由两个外部电阻和一个电容进行精确控制。 高电流驱动能力(200mA) 可调占空比 0.005%/°C的温度稳定性 计时范围从微秒到小时 关闭时间少于2微秒 精密计时 脉冲发生 延时发生 连续定时
发表于 04-18 19:03 •
1231次
阅读
信息 MC1455单片定时器电路是一种高度稳定的控制器,能够产生精确的时间延迟或振荡。如果需要,提供附加端子用于触发或重置。在延时模式下,时间由一个外部电阻和电容精确控制。为了稳定地作为振荡器工作,可以通过两个外部电阻和一个电容精确控制自由运行频率和占空比。该电路可以在下降波形上触发和复位,输出结构可以提供或吸收高达200 mA的电流或驱动TTL电路。 直接替换NE555定时器 从微秒到时间的定时小时 在稳定模式和单稳态模式下运行 可调节占空比 高电流输出可以输出或吸收200 mA 输出可以驱动TTL 温度稳定性为0.005%/°C 常开或常关输出 无铅封装可用 电路图、引脚图和封装图...
发表于 04-18 18:54 •
806次
阅读
1B可编程定时器由一个16级二进制计数器,一个用于外部电容和两个电阻的集成振荡器,一个自动上电复位电路和输出控制逻辑组成。 通过接通电源初始化定时,然后启用上电复位并在指定的V DD 范围内初始化计数器。电源已打开时,可以施加外部复位脉冲。在释放初始复位命令时,振荡器将以外部RC网络确定的频率振荡。 16级计数器将振荡器频率(f ocs 除以n th 级频率为f osc / 2 n 。 特性 可用输出2 8 ,2 10 ,2 13 或2 16 正边沿时钟转换的增量 内置低功耗RC振荡器(在整个温度范围内精度为+/- 2%,+ / - 20%电源和+ / - 在...
发表于 04-18 18:54 •
657次
阅读
6B可编程定时器是一个24级二进制纹波计数器,可通过二进制代码选择16级。提供了片内RC振荡器或外部时钟的规定。包括一个包含脉冲型输出的片上单稳态电路。通过选择适当的计数器级和适当的输入时钟频率,可以实现各种定时。 特性 24个触发器阶段 - 将从2 0 计数到2 24 最后16个阶段可通过四位选择代码选择 8-Bypass输入允许绕过前8个阶段 设置和重置输入 时钟抑制和振荡器抑制输入 片上RC振荡器规定 片上单稳态输出规定 时钟调理电路允许长时间上升和下降时间操作 测试模式允许快速测试序列 电源电压范围= 3.0 Vdc至18 Vdc 能够驱动两个低电平-power TTL Loads或One Low - 额定温度范围内的功率肖特基TTL负载 无铅封装可用 电路图、引脚图和封装图...
发表于 04-18 18:54 •
391次
阅读
和特点 2.7V 至 38V 工作范围 (42V 绝对最大值) IQ = 20μA (工作模式);1.5μA (停机模式) 具自动模式切换功能的多模式降压-升压型充电泵 (2:1、1:1、1:2) 12V 至 5V 转换效率 = 81% IOUT 高达 500mA VOUT:固定的 3.3V、5V 或可调 (2.5V 至 5V) 超低 EMI 辐射 专为符合 ISO 26262 诊断覆盖要求的系统而设计 过热、过压和短路保护 工作结温:150°C (最大值) 具外部定时控制功能的 POR / 看门狗控制器 耐热性能增强型 16 引脚 MSOP 封装 产品详情 LTC®3246 是一款具集成化看门狗定时器的开关电容器降压-升压型 DC/DC 转换器。该器件可采用 2.7V 至 38V 输入产生一个稳定的输出 (3.3V、5V 或可调)。开关电容器分数转换用于在很宽的输入电压范围内保持调节作用。内部电路可自动选择转换比,从而在输入电压和负载条件变化的情况下实现效率的优化。不需要使用电感器。LTC3246 的复位时间和看门狗超时无需外部组件即可设定,或采用外部电容器进行调节。一种窗口模式看门狗功能用于高可靠性应用。复位输入可用于提供额外的电源监视或配置为一个按钮复位。低工作电流 (无负载时为 20μA,在停机模式中为 1.5μA) 和低外部...
发表于 02-22 13:49 •
220次
阅读
和特点 输入电压范围:5.5V 至 38V 单独使能的 5V 和 3.3V 固定输出 5V 输出:100mA (最大值) 3.3V LDO 输出:250mA (最大值) 具自动模式切换功能的多模式降压型充电泵 (2:1、1:1) 低静态电流 当两个输出均在调节时为 20μA (无负载) 在停机模式为 0.5μA 专为符合 ISO26262 标准的系统进行设计 1.1V 基准输出用于系统诊断 具可调定时的上电复位和看门狗控制器 在每个输出上提供过流故障保护 过热保护 150°C 最大工作结温 耐热性能增强型 16 引脚 MSOP 封装 产品详情 LTC®3256 是一款宽输入范围开关电容器降压型 DC/DC 转换器,其可产生两个稳定的输出:通过直接连接至充电泵输出产生 5V 输出,和通过一个低压差 (LDO) 线性后置稳压器产生 3.3V 输出。该器件可提供高达 350mA 的总输出电流。在 12V VIN 和两个输出端上均承受最大负载的情况下,功率耗散比双路输出 LDO 稳压器解决方案减少了 2W 以上。LTC3256 通过在尽可能宽的工作范围内使充电泵运行于 2:1 模式以最大限度地提高效率,并由于 VIN 和负载情况而自动地按需切换至 1:1 模式。受控的输入电流和开关转换速率尽量地降低了传导和辐射 EMI。一个集成的...
发表于 02-22 13:48 •
316次
阅读
和特点 周期范围:1ms 至 9.5 小时利用上电或复位输入实现定时复位利用 1~3 个电阻器进行配置最大频率误差 <1.5%可编程输出极性2.25V 至 5.5V 单电源操作55μA 至 80μA 电源电流 (2ms 至 9.5 小时时钟周期)500μs 启动时间CMOS 输出驱动器可供应 / 吸收 20mA 电流-55°C 至 125°C 工作温度范围可提供扁平 (高度仅 1mm) SOT-23 (ThinSOTTM) 封装和 2mm x 3mm DFN 封装 产品详情 LTC®6995 是一款硅振荡器,具有一个 1.024ms 至 9.54 小时 (29.1μHz 至 977Hz) 的可编程周期范围,专供长持续时间定时过程之用。LTC6995 隶属于 TimerBlox® 通用型硅定时器件系列。单个电阻器 RSET 负责设置 LTC6995 的内部主振荡器频率。输出时钟周期由该主振荡器和一个内部分频器 NDIV 来决定 (可编程至从 1 至 221 范围内的 8 个设定值)。当振荡时,LTC6995 产生一个 50% 占空比的方波输出。该器件提供了一种复位功能,用以停止主振荡器并清零内部分频器。取消复位将启动一个完整的输出时钟周期,这适用于可编程上电复位和看门狗定时器应用。LTC6995 具有两种复位功能版本。对于 LTC6995-1 复位输入为高电平有效,而对于 LTC...
发表于 02-22 12:23 •
317次
阅读
评论