基于SPI+DMA方式的ws2812b氛围灯控制

好处:相比于gpio控制,可以大大节省CPU的时间,CPU只要将要传输的数据计算好放入内存中,然后发动DMA传输即可,后续整个过程并不需要CPU干预,CPU可以用于做其他的事情。特别是某些带蓝牙的芯片,需要给到CPU足够的时间进行协议栈的维护。

以下是ws2812b的时序:
在这里插入图片描述
我们只用SPI的一条data线,注意spi有四种mode,会影响spi data在闲时的数据高低,建议调试时使用示波器来检测数据的对错。

我们将SPI的速率设置到3.2M/s,那么每个spi的比特位对应的是312.5ns,此时若spi的数据是4’b1000,那么则对应ws2812b的0 code,如果spi的数据是4‘b的1110,那么则对应ws2812b的1 code。

也就是将spi设定到某个频率, 然后用4bit表示ws2812b的0 码或者1码。
如果本来某个灯的数据是24bit的0x00000000_111111111_00000000,那么对应的spi数据就应该是0x1000_1000_1000_1000_1000_1000_1000_1000____1110_1110_1110_1110_1110_1110_1110_1110___1000_1000_1000_1000_1000_1000_1000_1000=0x80808080_e0e0e0e0_80808080

如果假设以前是12个灯,那么对应288bit的数据,现在将是1152bit(通过SPI传输)的数据。

注意,一定要SPI+DMA方式,如果直接调用同步SPI方式,也就是CPU等待SPI时序发送完成后再退出,第一无法解放CPU,第二由于中断的存在,会出现ws2812b的时序不连续的情况(同步DMA传输可能被中断,在对面是SPI设备的情况下,不会出问题,因为中断时spi clk不动,设备不认为数据有效, 但是在控制ws2812b的情况下,只用到一根线,中间cpu被中断接管,那么会导致数据发送不连续,最后导致后面的灯不亮。

最极端的方法是使用spi clk=2.2M/s,那么可以用spi的3位来代表ws2812b的0码或者1码,但是这种方法不是很容易计算。好处是可以节省25%的内存
当然也可以用6.4M/s的spi速率,此时每个spi比特位对应的是156.25ns,那么用0xc0代表ws2812b的0 code。用0xffc0代表ws2812b的1 code。我当初就是这么做的,转换最简单,但是内存浪费最大。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

P6入门:项目初始化9-项目详情之资源Resource

前言 使用项目详细信息查看和编辑有关所选项目的详细信息,在项目创建完成后,初始化项目是一项非常重要的工作,涉及需要设置的内容包括项目名,ID,责任人,日历,预算,资金,分类码等等&…

基于51单片机PCF8591数字电压表LCD1602液晶显示设计( proteus仿真+程序+设计报告+讲解视频)

基于 51单片机PCF8591数字电压表LCD1602液晶设计 ( proteus仿真程序设计报告讲解视频) 仿真图proteus7.8及以上 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0060 51单片机PCF8591数字电压表LCD1602液晶设计 1.主要功…

C# +.Net检验科信息管理系统源码 LIS系统源码

检验科信息管理系统(LIS) LIS系统集申请、采样、核收、计费、检验、审核、发布、质控、查询、耗材控制等检验科工作为一体的网络管理系统。它的开发和应用将加快检验科管理的统一化、网络化、标准化的进程。 主要包括以下功能: 1、数据采集…

分享一下微信签到领取积分的小程序怎么做

在当前的数字化时代,微信作为中国最流行的社交平台,其影响力已经渗透到生活的各个角落。除了基础的聊天功能,微信还提供了许多实用的附加功能,其中就包括微信签到领取积分这一独特的小程序。本文将探讨微信签到领取积分小程序的魅…

C++代码实现调用OpenAi接口Api

在网上找了一圈C如何调用OpenAi的接口,找到的例子比较简单,完全照搬下来修改一下也能用,不过i整合在自己的类里面就莫名奇妙的问题: 1. 比如 coredump url_easy_perform的执行和curl_easy_setopt放在了两个函数中就出问题了&…

简单实现接口自动化测试(基于python+unittest)

简介 本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Python自带的Unittest框架调用,期望各位可以通过本文对接口自动化测试有一个大致的了解。 引言 为什么要做…

设置虚拟机静态IP

1、修改配置文件 /etc/sysconfig/network-scripts/ifcfg-ens160 将BOOTPROTOdhcp改为static,天机IPADDR192.168.10.13 2、重启网络服务 systemctl restart network

亚马逊云科技携手普华永道,在跨境数据传输方面打造适合中企的安全合规方案

第六届中国国际进口博览会于昨日圆满落下帷幕。11月9日下午,在普华永道解码数字产品与解决方案之道专场中,亚马逊云科技安全合规服务总监白帆先生和普华永道中国网络安全及隐私保护合伙人黄思维先生带来了基于跨境数据传输的合规性讨论,并正式…

技术管理责任制度《二》

技术管理责任制度《二》 彩虹图纸管理软件_图纸管理系统_图纸文档管理软件系统_彩虹EDM【官网】 1、技术档案,指本企业进行生产经营活动所用的一切重要图片、图纸、光碟、图书、报表、技术资料、有关设备、技术的文字说明等技术文件,整理后归并文件档案…

求推荐哪个好用的ERP或CRM软件?有ERP、CRM一体化的软件吗?

推荐好用的ERP或CRM软件?那么,有软件能够实现ERP、CRM一体化吗? 当然有,我们公司就在使用这样一个一体化平台。 只要你能够准确地理解业务逻辑,即使没有编程经验和代码基础,也能够利用简道云轻松创建各种…

动静态库。

gcc去 1、默认路径/usr/include里面去找 2、当前目录去找 但是mymath.h根本不在这里面,所以就报错了 你可以在.c中 #include “./lib/include/” 指明头文件在哪里,但是不推荐 ,建议在gcc时处理

使用 PYTORCH 进行图像风格迁移

一、介绍 本教程介绍如何实现 由 Leon A. Gatys、Alexander S. Ecker 和 Matthias Bethge 开发的神经风格算法。神经风格或神经传输允许您拍摄图像并以新的艺术风格再现它。该算法采用三幅图像,即输入图像、内容图像和风格图像,并将输入更改为类似于内容…

python使用redis模块来跟redis实现交互

大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 redis模块的使用: 1.安装模块: pip3 install redis 2.导入模块:import redis 3.连接方式: 严格连接模式:rredis.StrictR…

认不清车辆车型品牌种类?AI模型来助力,基于YOLO开发大规模车辆检测识别分析系统

随着汽车市场的蓬勃发展,已经涌现诞生了大量的品牌的车型,让人一时间眼花缭乱,很多时候看到一辆汽车只能大概知道这是什么品牌的,但是具体的子品牌详情就不得而知了,有没有可能构建这样的识别模型,让我们在…

LLM实现RPA

“PROAGENT: 从机器人流程自动化到代理流程自动化”这篇论文有几个创新点是比较有意思的:1.通过描述方式生成执行链,执行链通过代码方式生成保证执行链的稳健、可约束2.对执行过程抽取出数据结构,数据结构也通过代码生成方式来约束3.整个过程…

名片识别软件哪个好?

名片扫描软件是一种方便快捷的名片信息录入工具,可以将纸质名片转化为电子版,方便存储、编辑和管理。在市场上,有很多名片扫描软件可供选择,那么哪个好呢?本文将从专业角度出发,为您详细介绍。 首先&#x…

TypeError: Can‘t parse ‘center‘. Sequence item with index 0 has a wrong type

报错代码 import sys sys.path.append(rD:\文档\Temp\WX-FIles\data) # sys.path.append(rD:\文档\Temp\WX-FIles\data)p11 [125, 195] p12 [200, 275] # and the corresponding two points on the second image are:p21 [120, 190] p22 [200, 280] # TODO: write your ow…

集团VPN问题排查及核心交换机(思科C9500)路由编写

前言 昨天发现子公司A无法访问子公司B的服务器。已知之前是可以的。经过tracert及ping的简单排查。发现,A没有经过飞塔200F的防火墙出去。 已知集团使用两套防火墙。思科2110以及飞塔200F。并且在上方都做了VPN的配置。200F承接SD-WAN。 我们知道,当A公…

MySQL 社区开源备份工具 Xtrabackup 详解

文章目录 前言1. Xtrabackup 介绍1.1 物理备份与逻辑备份区别1.2 Xtrabackup 系列版本 2. Xtrabackup 部署2.1 下载安装包2.2 二进制部署2.3 程序文件介绍2.4 备份需要的权限 3. Xtrabackup 使用场景3.1 本地全量备份3.2 本地压缩备份3.3 全量流式备份3.3.1 备份到远程主机3.3.…

Unity Meta Quest 一体机开发(五):手势抓取概述

文章目录 📕教程说明📕 Oculus Integration 中的三种手势抓取方式⭐Hand Grab⭐Touch Hand Grab⭐Distance Hand Grab 此教程相关的详细教案,文档,思维导图和工程文件会放入 Seed XR 社区。这是一个高质量知识星球 XR 社区&#…