C语言 | 陷阱:一个优先级导致的BUG

虽然我在工作中已经非常注意优先级的问题,可还是不小心犯了一个优先级导致的错误: 这句话的本意是等待SR寄存器的某位变为1才继续往下执行,而实际上,因为”==”的优先级大于”&”,这句话等同于: 即 while (0); 所以每次执行到该句话时,不管当前SR寄存器的内容是什么,都会直接跳过while。为了防止出现优先级错误,正确的写法应该是: 与此类似的错误还有: 这句语句的本意是将nByte左移3位后的值加上8赋给nValue,然而实际上因 […]

Smart Home | ZigBee无线设备的低功耗通讯方案

在ZigBee网络中,COO、Router通常由外部电源供电,而ZED节点一般由电池供电。为了提高ZED节点的工作时间,我们需要进行低功耗设计。 低功耗可以从两个层面上考虑:1是硬件层面上的,2是软件层面上的。从硬件层面上说,可考虑的角度主要有:MCU及电路中的其他芯片是否支持睡眠、使用上下拉电阻节约功耗、电源芯片是否可管理、芯片及偏置电路的漏电流等。从软件层面上说,就是提高通信效率、设计睡眠与唤醒策略、加快处理速率减少工作时间等。 我从通信软件设计的角度,列举了几种可行的通讯方案,并最终选择了 […]

自制简易家用报警器

最近我所在的小区频频发生盗窃案件,为了保证财产安全,我决定发挥工程师的优势,制作一套家庭安防系统。 家用报警器就是第一步,它检测一定范围内是否有人体活动,如果有则发出报警,从而起到一定的警示与提醒作用。 它的基本原理是使用一个人体热释电传感器,该传感器在检测到人体活动后,会输出一个持续一段时间的高电平,用该电平通过三极管驱动一个有源蜂鸣器,从而发出报警声。 所需要的材料如下: 大多数材料都是易得的,一些电子材料可以在电子市场买到,人体热释电传感器可以从网上买到,如果没有合适的小盒子,也可以用其它 […]

Smart Home | 短距离无线通信的方案与选择

随着通信与物联网技术的不断发展,我们的设计中越来越多的开始出现无线通信的元素。通过无线通信,设备不再只是独立工作,而是可以通过网络协同工作,增强设备的灵活性与功能。短距离无线通信是无线通讯中最常见的一种情况,一般指通讯范围不超过100m的无线通信。本文整理了短距离无线通信的常用方案,并将不同的方案进行了比较,最后叙述了如何根据不同的项目需求进行选择。 一、常见的短距离无线通信方案 1.1  无线编解码芯片 无线编码芯片将数据编码后进行无线传输,而无线解码器则接收无线数据、并进行一些容错处理。无线 […]

深圳Maker Faire制汇节见闻

上个礼拜我和两个朋友利用周末的时间,去深圳参加了由O’Reilly举办的制汇节活动。 (关于Maker Faire的介绍,可以参见之前的文章:Maker Faire创客展会,中国深圳,4月8号) 展会所在地在宝安区F518,这次展会的主题是“集小智慧,越大未来”,参照方有国内外创客、创客空间和各大机器人制造厂商。 4月8号一早,我们从宾馆出发,还没到地方,远远的就能看见展馆了,F518展馆的外貌很有特色: 很有名的EggBot,可以在鸡蛋上刻出图形: Dangerous Prototypes的单 […]

ARM | 编译器CODE、RO、RW、ZI的含义

当编译一个ARM程序后,会出现Code=…  RO-data= …  RW-data=…  ZI-data=…  的提示报告,如: Program Size: Code=976 RO-data=344 RW-data=4 ZI-data=612   那么这些数据的含义究竟是什么呢? CODE:代码区占用大小,即程序指令的大小; RO:只读变量占用大小,用于保存常量和查询表的大小; RW:读写变量占用大小,是已初始化为非0的变量的大小; ZI:全零变 […]

MicroMouse | MicroMouseV2电机的选择

第一版本的MM(MicroMouse)使用的是带减速箱的N20电机。这种电机非常小巧,比130电机的体积还要小,空载转速大概50转/分钟,适合小型机器人。电机店和淘宝上很容易买到,价格大约在15-25元之间: 图1  N20直流电机 新版本的MM首先希望在电机上进行改进,备选的几个方案有: 1) 直流步进电机; 2) 直流无刷电机; 3) 直流空心杯电机。 步进电机的好处是易于控制,且不需要额外的转速反馈。缺点是速度较慢,且一旦打滑就会造成累积误差。2010年参加全国电脑鼠大赛时,赞助商周立功公 […]