基于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。我当初就是这么做的,转换最简单,但是内存浪费最大。

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

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

相关文章

k8s_base

应用程序在服务器上部署方式的演变,互联网发展到现在为止 应用程序在服务器上部署方式 历经了3个时代1. 传统部署 优点简单 缺点就是操作系统的资源是有限制的,比如说操作系统的磁盘,内存 比如说我8G,部署了3个应用程序,当有一天…

【第2章 Docker容器基础入门】 课程介绍 + docker容器介绍

一、课程介绍 1.1、容器运行时 1.2、官网 1.3、私有镜像 二、什么是 Docker ? 2.1 Docker 的思想来自于集装箱,集装箱解决了什么问题? 2.2 、K8S 1.25版本之后可能废弃docker,为什么还需要学习docker? 一、课程介…

“具有分布式能源资源的多个智能家庭的能源管理的联邦强化学习”文章学习一

一、摘要 本文提出了一种新型的联邦强化学习(FRL)方法,用于管理带有家电、太阳能光伏系统和储能系统的多个智能家庭的能源。 所提出的FRL方法的创新点在于开发了一种由本地家庭能源管理系统(LHEMS)和全局服务器(GS)组成的分布式深度强化学习(…

飞书开发学习笔记(六)-网页应用免登

飞书开发学习笔记(六)-网页应用免登 一.上一例的问题修正 在上一例中,飞书登录查看网页的界面显示是有误的,看了代码,理论上登录成功之后,应该显示用户名等信息。 最后的res.nickName是用户名,res.i18nName.en_us是英…

嵌入式养成计划-54----ARM--异常处理流程

一百三十五、异常处理流程 135.1 arm处理器工作模式 135.2 异常源和异常模式关系 135.2.1 异常源 异常源就是引发处理器进入相应异常模式 135.2.2 对应关系 异常模式异常源FIQ模式FIQ类型异常源引发处理器进入FIQ模式IRQ模式IRQ类型异常源引发处理器进入IRQ模式SVC模式上电…

工具及方法 - 手机扫条码工具: SCANDIT APP

一般扫个链接使用微信扫一扫即可。扫具体条码,可以在微信里搜索小程序,打开也能扫,得到条码内容。 还有其他方式,比如使用淘宝、百度等APP也可以直接扫码条码,还能得到更多的信息。 使用百度的话,不扫条码…

3D造型渲染软件DAZ Studio mac中文版介绍

DAZ Studio mac是一款3D造型和渲染软件,由 Daz 3D 公司开发。它允许用户创建、编辑、动画化并渲染精美的数字图像与动画。DAZ Studio 还提供了一个虚拟的3D艺术家工作室环境,让用户可以轻松地设置场景、布置角色和应用材质。 用户可以通过 DAZ Studio 中…

图像实时采集系统

本方案主要在于解决图像实时采集系统对算法校正的仿真实验,以及采集卡接收电路的验证。 由于图像实时跟踪处理系统需要大量的外场景实验,大部分时候只能通过采集的现场图像以在电脑软件中读取图片的形式来进行验证算法,而无法通过采集卡对接…

《网络协议》05. 网络通信安全 · 密码技术

title: 《网络协议》05. 网络通信安全 密码技术 date: 2022-09-10 15:16:15 updated: 2023-11-12 07:03:52 categories: 学习记录:网络协议 excerpt: 网络通信安全(ARP 欺骗,DoS & DDoS,SYN 洪水攻击,LAND 攻击&a…

基于flask+bootstrap4实现的注重创作的轻博客系统项目源码

一个注重创作的轻博客系统 作为一名技术人员一定要有自己的博客,用来记录平时技术上遇到的问题,把技术分享出去就像滚雪球一样会越來越大,于是我在何三博客的基础上开发了[l4blog],一个使用python开发的轻量博客系统,…

github镜像访问方法

https://ghproxy.com/ (GitHub 文件 , Releases , archive , gist , raw.githubusercontent.com 文件代理加速下载服务) https://mirror.ghproxy.com/ 在这个网址后面直接加上github的网址,如: https://mirror.ghproxy.com/htt…

ZYNQ实验--Petalinux--Linux C 编程入门

Linux C 编程入门 在 Windows 下我们可以使用各种各样的 IDE 进行编程,比如强大的 Visual Studio。Ubuntu 下也有一些可以进行编程的工具,但是大多都只是编辑器,也就是只能进行代码编辑,如果要编译的话就需要用到 GCC 编译器&…