浙江公司响应式网站建设推荐网站网络广告推广

diannao/2025/10/19 12:05:18/文章来源:
浙江公司响应式网站建设推荐,网站网络广告推广,莱芜金点子信息港最新招聘,哪家培训机构学校好最近在学习DALI调光相关知识并下载了Microchip提供的基于ATMega88PA的软件工程及硬件设计参考方案。写这些文章的目的就是把自己对知识的理解作一些梳理。 芯片厂果然专业#xff0c;考虑得相当周到#xff0c;为了芯片销量连软件和硬件方案全都提供了。芯片厂关于DALI1.0实…最近在学习DALI调光相关知识并下载了Microchip提供的基于ATMega88PA的软件工程及硬件设计参考方案。写这些文章的目的就是把自己对知识的理解作一些梳理。 芯片厂果然专业考虑得相当周到为了芯片销量连软件和硬件方案全都提供了。芯片厂关于DALI1.0实现的软硬件参考链接地址如下Salesforcehttps://microchip.my.salesforce.com/sfc/p/#o0000000KAkK/a/3l000001Iuci/0yucLkmht5A3PuLOo2MVtWQlQA1Ca1FgNK1KkCKafeg Firmware部分是DALI1.0实现的源代码包括底层驱动及上层应用使用AVR系列专用开发IDEMicrochip Studio。 这一篇主要理解下如何解码主机发送来的BIT信号重点是dali_bit.c文件关于DALI主机发送数据的时序可以参考这篇博文DALI通信及C语言实现 - 斑鸠一生。 - 博客园 (cnblogs.com) 主机和从机通信使用半双工波特率为1200参考示例中从机使用GPIO的边沿跳变上升沿和下降沿都触发结合定时器来解码主机发送来的信号具体配置如下 1、GPIO为双边沿跳变中断中断处理完成后定时器计数清零 2、定时器溢出时间为32微秒。1200BIT/S的波特率传输一个BIT的时间约833微秒半个BIT也就是一个TE为416微秒所以定时器约溢出13次左右曼切斯特编码是在传输一半BIT时间的时候产生边沿跳变传输1就是上升沿0是下降沿 定时器和GPIO配置完成后就开始等待主机发送前向帧从机解析数据的思路如下 1、总线在没有数据发送时从机的接收引脚也就是双边沿跳变引脚一直是高电平 2、当主机发送起始号时从机的接收引脚会检测到一个下降沿当经过约半个BIT的时间后如果检测到一个上升沿则证明是有效的起始信号进入准备接收信号阶段 3、以后每隔两个TE就读取一次实际传输的BIT如图1所示同时不停检测是否有连续4个TE如果数据接收完成后出现4个连续TE证明是接收到了停止位本次数据接收成功如果数据没有接收完成就出现4个TE说明传输出错 图1DALI时序 4、正确检测到停止位后将接收到的地址和数据递交给上一层进行帧逻辑处理。 再来看源代码文件dali_bit.cDALI从机的接收引脚边沿跳变中断处理程序dali_bit_pcint_interrupt函数如下 /*** \brief External pin interrupt handler** This is the handler for external pin interrupt*/ void dali_bit_pcint_interrupt(void) {static uint8_t bit_index;uint8_t bit_index_temp;uint8_t dali_bit_rx;bit_index_temp bit_index;pin_level DALI_INPORT (1 DALI_INPUT);if (status_receive 0) {if (pin_level LOW) {/* dali bus falling edge indicates start bit */bit_index_temp 0;status_receive BIT_START;dali_rec_addr 0;dali_rec_data 0;}} else if (status_receive BIT_START) {/* dali pin must be high after the second INT0 edge */if ((level_time MIN_TE_CNT) (level_time MAX_TE_CNT)) { /* get the start bit and get ready for 16 bit data. */status_receive BIT_0;bit_index_temp 1;} else {/* Start bit error */status_receive 0;}} else if (status_receive BIT_STOP1) {if (level_time MIN_2TE_CNT) {/* Long level (2xTe) is detected */bit_index_temp 2;} else if ((level_time MIN_TE_CNT) (level_time MAX_TE_CNT)) {/* Short level (1xTe) is detected */bit_index_temp 1;} else {status_receive 0;}if (bit_index_temp 34) { /* If the last Te is low (dali bit 0), a rising edge is* detected before stop bit */ status_receive BIT_STOP1;}/* Decode dali bit at every second Te bit */if (bit_index_temp 0x01) {/* shift out the lowest bit to get dali bit */ dali_bit_rx bit_index_temp 1;if (dali_bit_rx BIT_7) { //the current bit number, maximum 8 for the address byte/* get the address byte */dali_rec_addr 1;if (pin_level) {dali_rec_addr | 0x01;}} else {/* get the data byte */dali_rec_data 1;if (pin_level) {dali_rec_data | 0x01;if (dali_bit_rx BIT_15) { /* if the last Te is high (dali bit 1), a Te * high period is added before stop bit */ status_receive BIT_STOP2;}}}}} else {status_receive 0;}dali_slave_set_addr_to_service(dali_rec_addr);dali_slave_set_data_to_service(dali_rec_data);bit_index bit_index_temp;TCNT0 0;level_time 0; } 代码分析 1、由于在接收主机发送的数据时会多次进入边沿跳变中断必须使用静态变量bit_index并结合变量bit_index_temp保存当前已获取的BIT索引确切的说应该是TE索引pin_level用于获取从机输入引脚的电平状态变量status_receive表示当前接收的是起始信号、数据还是停止位 2、当主机发送起始信号时会触发第一个下降沿第16行判断如果DALI输入引脚是低电平则初始化一些变量并将接收状态转为BIT_START也就是起始信号 3、起始信号下降沿触发后第二次边沿跳变触发时必须是上升沿且触发时间必须是在一个TE周期内才被认为是正常的起始信号如图2所示Start部分先有一个下降沿然后一个上升沿才开始发送MSB。变量level_time会在定时器0的溢出中断处理程序中累加溢出时间约为32微秒8MHz频率不分频最大计数256溢出时间 256/8000000约13个溢出周期后就是一个TE的时间416微秒左右当然这个时间不可能刚好有正负5个溢出周期左右误差范围所以第25行使用了if ((level_time MIN_TE_CNT) (level_time MAX_TE_CNT))。此时变量bit_index_temp被设置为1同时status_receive设置为准备接收第一个数据BIT即BIT_0 图2起始信号先一个下降沿然后一个上升沿 4、正确接收到起始信号后准备接收地址和数据字节。代码第34行判断只要不是接收停止位就保存当前接收到的BIT。代码第35行到第41行判断如果是经过两个TE时间才产生边沿跳变中断的话则将bit_index_temp加2否则加1。当发送不同BIT值时就会出现两个TE后才会出现边沿跳变的情况例如前面的比特是0后面接着是1就会出现连续两个TE的低电平然后产生上升沿跳变如图3所示 图3BIT值改变时会有两个连续TE的高或低电平 5、代码第46行判断当bit_index_temp34时就将status_receive切换到接收停止位1因为包括起始BIT、地址字节和数据字节共17个BIT也就是34个TE当接收到最后一个BIT并且是低电平这里要注意只有当最后一个BIT是低电平时bit_index_temp才会等于34高电平应该是33。最后一个BIT是0且它后面出现上升沿则证明接收到的是停止位1 6、代码第53行到76行是解码接收到的BIT值并赋值给地址变量dali_rec_addr和数据变量dali_rec_data。首先第53行使用了if (bit_index_temp 0x01)bit_index_temp必须为奇数且大于1时if条件才为真。那我们来看一下当接收地址和数据的BIT时bit_index_temp是不是奇数并且对应的BIT是否正确如图4所示当起始位的上升沿产生后bit_index_temp被设置为1然后从35行到41行根据边沿跳变触发时间将bit_index_temp加2或者加1我们可以看到bit_index_temp确实是在每次为奇数时才读取接收到的BIT为节省空间在图中我把bit_index_temp改为了bit_idx。 第1个红点位置也就是有效起始信号上升沿中断时bit_idx 1 第2个红点位置由于经过两个TE才产生下降沿中断bit_idx执行了加2变成3此时if (bit_index_temp 0x01)条件为真读取数据刚好是BIT值0和曼切斯特编码含义一样 第3个红点位置经过了两个TE产生了上升沿中断bit_idx执行了加2变成5此时if (bit_index_temp 0x01)条件为真读取数据刚好是BIT值1和曼切斯特编码含义一样 第4个红点位置经过了1个TE产生了下降沿中断bit_idx执行了加1变成6此时if (bit_index_temp 0x01)条件为假所以没有读取数据 第5个红点位置经过了1个TE产生了上升沿中断bit_idx执行了加1变成7此时if (bit_index_temp 0x01)条件为真读取数据刚好是BIT值1和曼切斯特编码含义一样 第6个红点位置经过了两个TE产生了下降沿中断bit_idx执行了加2变成9此时if (bit_index_temp 0x01)条件为真读取数据刚好是BIT值0和曼切斯特编码含义一样 后面的以此类推可见确实是bit_index_temp变量为奇数且非起始位时才读取并保存BIT值。 图4bit_index_temp为奇数时读取数据 7、dali_bit_rx用于判断当前接收到的是地址字节还是数据字节并计算出BIT号BIT_0到BIT_15对应值1-16小于等于BIT_7时是地址字节否则就是数据字节。前面说过奇数位获取一次数据每隔两个值计算一下当前的BIT序号所以dali_bit_rx bit_index_temp 1。代码第60行和第66行根据当前引脚的电平来保存数据在第68行判断如果是最后一个数据BIT了则设置接收状态为停止位2。 8、最后几行代码主要将定时器0的计数值清零并且将定时器0溢出次数level_time清零。用局部静态变量保存当前的TE索引号以便下次产生边沿跳变中断时赋值给bit_index_temp。 DALI1.0的比特解码部分就介绍到这里后续继续整理其他内容希望和大家一起学习交流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/92091.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

经常访问的网站来打不开制作网页时用的最多的图像文件

在前段时间我写了一篇迁移 csproj 格式的博客 将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成基于 Microsoft.NET.Sdk 的新 csproj,不过全过程是手工进行的,而且到最后处理 XAML 问题也非常头疼。现在,我们可以利用工具自动地完成这个过程。…

专业设计网站有哪些wordpress内存溢出

原标题:适合老电脑升级?GTX1650显卡开箱,性价比依然不高!新一代的NV显卡高端版本基本上全部和大家见面,例如RTX2080ti、RTX2070等等。而中端的RTX2060和GTX1660ti也陆续被玩家接受,剩下入门级的显卡英伟达取…

广州建设网站下载建设网站的实验目的

选择题 题目:房地产属于非货币性资产,其拥有者可以很快将房地产兑换成现金。 题目: 物业经营管理既包括保证物业正常使用的运行操作管理活动,也包括将物业作为一种收益性资产所进行的一系列的经营活动。 题目:政府干预…

建站报价软文推广代理

文章目录 最长上升子序列回顾题目描述问题分析程序代码复杂度分析 怪盗基德的滑翔翼题目描述输入格式输出格式 问题分析程序代码复杂度分析 登山题目描述输入格式输出格式 问题分析程序代码复杂度分析 合唱队形题目描述输入格式输出格式 问题分析程序代码复杂度分析 友好城市题…

大石桥做网站网上注册公司app

目录 SQLite简介SQLite优势安装 SQLite基本使用Java使用SQLite Springboot使用SQLite1.添加依赖2.配置数据库3.创建实体类 4.创建Repository接口5.创建控制器6.运行应用程序 SQLite简介 SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无…

网站开发时保证用户登陆的安全贵州安顺住房城乡建设网站

数据冷热分离方案 1、背景 ​ 随着业务的发展,在线表中的数据会逐渐增加。常规业务都有冷热数据现象明显的特性(需要访问的都是近期产生的热数据;时间久远的冷数据出于备份、备案溯源等诉求会进行在线保留)。在业务表数据 量可控…

免费的网站在川航网站购票后怎么做

原文地址:Design your app for decision-making原文作者:Jeni译文出自:掘金翻译计划本文永久链接:github.com/xitu/gold-m…译者:PTHFLY校对者:ryouaki想帮助用户做决定?你的APP可以这样设计&am…

免费建网站广告语中英文外贸网站模板 生成静态html

1.badboy介绍 Badboy是一款不错的Web自动化测试工具,如果你将它用于非商业用途,或者用于商业用途安装Badboy 的机器数量不超过5台,你是不需要为它支付任何费用的。Badboy提供了将Web测试脚本直接导出生成JMeter 脚本的功能,并且这…

吴江建设局网站打不开建设工程检测网

0. Overview C的预处理指令格式为#name,均以#开头,#和指令名之间不可有空白字符,#前可以有空字符,但为增强可读性,一般应从第一列开始 #name不能由宏展开得来,name也不能由宏展开得来,如 // Wro…

佛山外贸网站推广网站开发系统设计怎么写

程序运行太慢,想要提速,但不使用复杂的技术如 C 扩展或 JIT 编译器。 解决方案 程序优化的第一准则是“不要优化”,第二准则是“不要优化那些不重要的部分”。基于这两个原则,如果你的程序运行得很慢,你得先找出影响性…

太仓网站公司网站漂浮广告代码

From: http://yaven.iteye.com/blog/1084044 今天找了很久关于在VIM中格式化xml的插件都没找到,后来才发现其实不用装插件,在linux环境中使用xmllint就可以实现对xml文件的格式化功能。 1,安装libxml2。 Libxml2 是一个xml的c语言版的解析器&…

网站建设做网站需要多少钱?红河网站建设

关于placement new 在https://blog.csdn.net/qq_42604176/article/details/111997397中已经介绍了placement new的形式。 它的形式为new()/delete().我们将分配好内存的指针送入括号中,就完成了初步的调用了。 其实我们可以定义放任何的东西到()内部。只放一个指针…

网站建设与管理的发展怎么开发手机网站

按照这个路径,找到config.inc.php文件,打开 找到下面三个语句 db_server:一般填127.0.0.1,如果修改了mysql的端口号,要在后面加上修改后的端口号,默认为3306 db_user:自己mysql数据库的用户名 db_password&#xff1…

深圳专业专业网站建设公司简单网站开发流程图

卖家工具箱源码上周,我们在LINEAS成立了一个“测试技能小组”,该小组用于交换有关测试的知识。 各种各样的问题反复出现的一个问题是:有哪些工具可以测试和分析代码? 因此,这是我对此的个人回答,按照我倾向…

租空间开网站七台河市网站建设

上一篇《对产品质量的一点思考》中说到自动化测试的重要性,本文简单介绍下怎样在实际项目中实现端到端测试的自动化,在这里我们使用的端到端测试工具是TestCafe。环境Jenkisn:2.183TestCafe:1.3.0为什么采用TestCafe做自动化测试要…

靖江做网站哪家好wordpress动漫视频主题

USI中,Hash的作用是什么? 在笔出墨之前,USI controller需要得到笔的一系列信息,例如颜色、宽度、压力、倾角信息等等,才允许出墨。 为了加快出墨的速度,USI controller内置一个information cache&#xf…

做同城相亲网站中国建设银行官网开户行查询

Ontrack EasyRecovery 16是由Ontrack官方最新出品的一款全面的自助数据恢复软件,中文名称叫做:易恢复。它能够轻松恢复所有的文件类型,包括文档、表格、图片、音视频和其他文件等,支持恢复不同存储介质数据:硬盘、光盘…

网站转化率是什么意思吴江区建设工程招标网站

这个问题是很难的,因为1980年代G.Kolesnik的二变量指数和方法被认为是登封造极,他关于ζ(1/2it) 和 Dirichlet 除数问题的论文1982年刊登在Pacufic.J.Math.,文中列了很多无法验证的方程,真不知道论文怎么能发表。所以1985年意大利E.Bombieri和…

o2o网站开发免费发布网站建设信息

Python-strace命令追踪ssh操作 通过strace 命令追踪ssh的进程ID,记录操作的命令[实际上是内核里面记录的东西],进行操作日志的Py解析达到效果 追踪进程并写入ssh操作到文件中 Ps: 此时机器A已经ssh登录了机器B,取得它的ssh进程PID 机器A登录后…

沈阳建网站山西运城市建设局网站

1.自己设置温度湿度阈值&#xff0c;当温度过高时&#xff0c;打开风扇&#xff0c;蜂鸣器报警 2.当湿度比较高时&#xff0c;打开LED1灯&#xff0c;蜂鸣器报警 bee.c #include"bee.h" void bee_init() {RCC->MP_AHB4ENSETR | (0x1<<1);GPIOB->MODE…