【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统

这篇具有很好参考价值的文章主要介绍了【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.效果展示

1.gif 动图展示

【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统,开发板测评,矩阵,单片机,线性代数

2.字幕展示

【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统,开发板测评,矩阵,单片机,线性代数

2.软件开发流程

2.1 全志XR806 基本开发流程

使用指南
自己踩过的坑
【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统,开发板测评,矩阵,单片机,线性代数

必须app开头
鸿蒙hb 依赖python 环境。建议使用conda虚拟环境
【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统,开发板测评,矩阵,单片机,线性代数

下载开启硬件校验和烧录重启

2.2 W2812 简单介绍

不是科普文,自行百度
`/*WS2812B Timing sequence
________
| | T0L |
0 code |<------>|<-------------->|
| T0H |________________|

    ___________
   |		   |	   T1L	  |

1 code |<--------->|<--------- -->|
| T1H |______________|

RET code
| Treset |
|<------------------------->|
|___________________________|

Data transefer time:
T0H 0 code ,high voltage time 0.4us ±150ns
T1H 1 code ,high voltage time 0.8us ±150ns
T0L 0 code , low voltage time 0.85us ±150ns
T1L 1 code ,low voltage time 0.45us ±150ns
RES low voltage time Above 50us

*/`

硬件驱动

供电 5V
驱动电平 gpio口3.3v 需要加一些简单的转换电路到5v
驱动时序 这里使用SPI 驱动 支持DMA搬运
【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统,开发板测评,矩阵,单片机,线性代数

PB04 SPIO_MOSI 引脚
【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统,开发板测评,矩阵,单片机,线性代数

2.3 软件框架

2.3.1 UDP

1.联网获取IP
使用 wlan_demo 中 例子 wifi_device_connect_test
2.绑定端口
void udp_echoserver_init(void) { struct udp_pcb *upcb; err_t err; /* Create a new UDP control block */ upcb = udp_new(); if (upcb) { /* Bind the upcb to the UDP_PORT port */ /* Using IP_ADDR_ANY allow the upcb to be used by any local interface */ err = udp_bind(upcb, IP_ADDR_ANY, UDP_SERVER_PORT); if (err == ERR_OK) { /* Set a receive callback for the upcb */ udp_recv(upcb, udp_server_receive_callback, NULL); printf("led udp bind OK \r\n"); }else printf("led udp bind error \r\n"); } }
3.注册接收回调
void udp_server_receive_callback(void *arg, struct udp_pcb *upcb,struct pbuf *p, const ip_addr_t *addr, u16_t port) { printf(" 11 udp receive_callback \r\n"); /* Connect to the remote client */ udp_connect(upcb, addr, port); /* Tell the client that we have accepted it */ udp_send(upcb, p); memset(udp_recv_date,0x00,UDP_RECV_DATE_MAX); uint32_t buf_len = pbuf_copy_partial(p, udp_recv_date, p->len, 42); uint32_t cur_pos; if(UDP_RECV_LED_BUFF_LEN==buf_len){ #if 1 for(u32_t i = 0;i < buf_len;){ if(i%48==0)printf("\r\n"); printf("%x-%x-%x ",udp_recv_date[i],udp_recv_date[i+1],udp_recv_date[i+2]); if(udp_recv_date[i]!=0)cur_pos = i; i+=3; } printf("\r\n recv data %d,pos=%d %d,%d\r\n",buf_len,cur_pos,cur_pos/48,(cur_pos%48)/3); #endif led_spi_update(udp_recv_date); //led_spi_update_test(); } /* free the UDP connection, so we can accept new clients */ udp_disconnect(upcb); /* Free the p buffer */ pbuf_free(p); }
4.提取UDP数据
pbuf_copy_partial(p, udp_recv_date, p->len, 42);
这里偏移了42。包含了一些UDP通信的信息。

2.3.2 SPI 驱动

1.SPI初始化 这里使用6M的速率
`void led_spi_init(void)
{
printf(“led_spi_init\r\n”);
IoTGpioInit(GPIO_ID_PA21); //(3)
IoTGpioSetDir(GPIO_ID_PA21, IOT_GPIO_DIR_OUT); //(4)

uint16_t i = 0;
uint16_t loop_color = 0;
SPI_Global_Config spi_param;

spi_param.cs_level = DEMO_SPI_CS_LEVEL;
spi_param.mclk = DEMO_SPI_MCLK;

HAL_SPI_Init(DEMO_SPI_PORT, &spi_param);


SPI_Config spi_Config;
HAL_Status ret = HAL_OK;

spi_Config.firstBit = SPI_TCTRL_FBS_MSB;
spi_Config.mode = SPI_CTRL_MODE_MASTER;
spi_Config.opMode = SPI_OPERATION_MODE_DMA;
spi_Config.sclk = DEMO_SPI_MCLK;
spi_Config.sclkMode = SPI_SCLK_Mode1;

printf("spi open...\n");
ret = HAL_SPI_Open(DEMO_SPI_PORT, DEMO_SPI_CS, &spi_Config, 5000);
if (ret != HAL_OK) {
	printf("spi open failed");
	return ret;
}
HAL_SPI_Config(DEMO_SPI_PORT, SPI_ATTRIBUTION_IO_MODE, SPI_IO_MODE_NORMAL);
printf("led_spi_init ok.\n");

}
2.数据发送HAL_SPI_Transmit`
这里有坑:SPI驱动第一次数据第一个自己前2位。波形离谱。这里通过多发一个字节0x00.避免过去。

点阵屏

点阵屏灯排布

【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统,开发板测评,矩阵,单片机,线性代数

这里需要根据自己的走向修改程序。
`void broad_ws2812_set_position(uint8_t w,uint8_t h,uint8_t r,uint8_t g,uint8_t b)
{
uint16_t pos = 0;
pos = wBROAD_WS2812_STRIP_LED_H;
if(w%20){
pos +=h;
}
else{
pos +=(BROAD_WS2812_STRIP_LED_H-h-1);
}
if(r
g&&r==b)
{
led_spi_buff[pos
3+0] = 0; //
led_spi_buff[pos3+1] = 0;
led_spi_buff[pos
3+2] = 0;
}
else{
led_spi_buff[pos3+0] = b/2; //
led_spi_buff[pos
3+1] = r/2;
led_spi_buff[pos*3+2] = g/2;
}

}`

把2812控制数据变化成SPI数据

`static void led_data_to_ws2812(uint8_t val, uint8_t* dst)
{
int i = 7;

for (i = 7; i >= 0; i--)
{
    if ((val >> i) & 0x01)
    {
        *(dst++) = 0xfc;
    }
    else
    {
        *(dst++) = 0xc0;
    }
}

}`

系统简介

本系统实现了,使用python 控制 wifi蓝牙 2812点阵板子控制。可以实现大数据传输,实时仿真控制,暂时很好效果。

开源 百度网盘大家自行下载测试

【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统,开发板测评,矩阵,单片机,线性代数

链接:https://pan.baidu.com/s/1b3u0MtCrWUPOOnkjKskyQw
提取码:6666文章来源地址https://www.toymoban.com/news/detail-850233.html

到了这里,关于【XR806开发板试用】简单点灯-- 基于SPI控制W2812矩阵幻彩动图和字幕显示系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Arduino物联网快速开发:基于ESP8266与点灯Blinker制作小白都会的DIY《智能家居》系统

    我们要制作一款能够远程控制家里灯、风扇的开关,并采集温湿度、光照传输到手机APP上。正好看到了点灯Blinker的开源方案, blinker是一套跨硬件、跨平台的物联网解决方案,提供APP端、设备端、服务器端支持,使用公有云服务进行数据传输。可用于智能家居、数据监测等领

    2024年02月06日
    浏览(35)
  • Java开发手册之单元测试,软件测试端简单易用的SPI框架

    【推荐】编写单元测试代码遵守 BCDE 原则,以保证被测试模块的交付质量。 B:Border,边界值测试,包括循环边界、特殊取值、特殊时间点、数据顺序等。 C:Correct,正确的输入,并得到预期的结果。 D:Design,与设计文档相结合,来编写单元测试。 E:Error,强制错误信息输

    2024年04月25日
    浏览(32)
  • 【STM32】BLDC驱动&控制开发笔记 | 07_SPI通信测试 - STM32F407用SPI配置DRV8323驱动芯片

    最近在埋头搞STM32 + 无刷直流电机控制,想实现用自己的STM32F407VGT6芯片板子,外加一块驱动板(目前选用到TI的DRV8302或者DRV8323驱动芯片),搞定电机驱动,最后实现比较好的控制效果。如果不是同一块芯片的同学也不用急着走,大体上都是可借鉴哒~ 本文主要实现使用SPI通信

    2024年02月08日
    浏览(42)
  • 物联网开发笔记(91)- 使用Micropython开发ESP32开发板之通过串口SPI控制ILI9341 液晶屏显示文字

    一、目的         这一节我们学习如何使用ESP32开发板,通过串口SPI控制ILI9341 液晶屏。我使用的是3.2寸的,分辨率240x320 V1.0,TFT屏幕。文末有购买地址。 二、环境         ESP32(固件:esp32-20220618-v1.19.1.bin) + Thonny(V4.0.1) + ILI9341 液晶屏模块 + 几根杜邦线 + Win10 64位商业版

    2024年02月16日
    浏览(35)
  • FPGA实现基于SPI协议的Flash驱动控制(全擦除、页擦除、读数据、页写、连续写—地址写)

    本论文使用Verilog HDL硬件描述语言,结合野火可以FPGA征途Pro开发板,实现了SPI通信协议的全擦除,扇区擦除,读数据,页写,连续写的驱动设计。在 Altera Cyclone Ⅳ 芯片上采用“自顶向下”的模块化设计思想及 Verilog HDL 硬件描述语言,设计并实现串行外设接口(SPI)。在 Qu

    2024年02月12日
    浏览(31)
  • 物联网开发笔记(96)- Micropython ESP32开发之SPI接口控制Micro SD卡TF卡模块挂载内存卡

    一、目的         这一节我们学习如何使用乐鑫的ESP32开发板连接SD卡模块,进行目录、文件的相关操作。         在早前我们也介绍过TFT SD卡的操作,这里我们重新复习一下。 物联网开发笔记(60)- 使用Micropython开发ESP32开发板之SPI接口控制Micro SD卡TF卡模块_microsd卡

    2024年01月25日
    浏览(29)
  • 基于ZYNQ PS-SPI的Flash驱动开发

                    本文使用PS-SPI实现Flash读写,PS-SPI的基础资料参考Xilinx UG1085的文档说明,其 基础使用方法 是,配置SPI模式,控制TXFIFO/RXFIFO,ZYNQ的IP自动完成发送TXFIFO数据,接收数据到RXFIFO,FIFO深度为128Byte。本文介绍了使用PS-SPI的Flash开发。 硬件平台:Xilinx ZYNQ Flash芯片

    2024年03月23日
    浏览(27)
  • 物联网开发笔记(89)- 使用Micropython开发ESP32开发板之合宙ESP32 C3开发板通过串口SPI控制st7789 TFT液晶屏1.3寸

    一、目的         这一节我们学习如何使用合宙的ESP32 C3开发板控制1.3寸彩色TFT显示屏模块,分辨率240*240,SPI接口,ST7789驱动芯片。 二、环境         ESP32  C3 + Thonny + 1.3寸 st7789液晶屏模块 + 几根杜邦线 + Win10 接线方法:   三、st7789 TFT显示屏驱动 st7789py.py   四、点亮

    2024年02月11日
    浏览(34)
  • 安防监控项目---web点灯(网页发送命令控制A9的led)

    书接上期,和大家分享的是web点灯,哈哈哈,谈论起点灯这个词,这么久以来我已然已经成长为一名合格的点灯大师了;点灯是一个很好的测试办法,不仅要去测试开发板是否正常,也要去测试网页是否能够顺利下发数据,接下俩让我们仔细来看一下这个过程!!! 先来理一

    2024年02月07日
    浏览(26)
  • ESP8266控制LED点灯和按钮,配合巴法云平台和微信小程序实现远程控制

    ESP8266控制LED点灯和按钮,配合巴法云平台和微信小程序实现远程控制 本文将介绍如何使用ESP8266控制LED点灯和按钮,同时利用巴法云平台和微信小程序实现远程控制。具体实现过程如下: 一、硬件准备 ESP8266模块 LED灯 按钮 杜邦线 面包板 二、开发环境搭建 ESP8266使用Arduino

    2024年02月12日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包