衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于ME8S003實(shí)現(xiàn)WS2812 LED調(diào)光快速解決方案

jf_pJlTbmA9 ? 來源:敏矽MCU ? 作者:敏矽MCU ? 2023-09-18 10:56 ? 次閱讀

ws2812驅(qū)動(dòng)相信有不少人都用過,大家對(duì)這款彩色LED真的是又愛又恨,愛的是它它使用簡(jiǎn)單,采用單總線通信方式,節(jié)約IO口,而且可以多級(jí)串聯(lián)。而普通的彩色LED不是共陰就是共陽,每個(gè)顏色一個(gè)引腳,一般都是用PWM驅(qū)動(dòng),想要控制亮度、顏色就要分別控制每個(gè)引腳上的PWM占空比,想要驅(qū)動(dòng)多個(gè)LED就更麻煩了。恨的是ws2812對(duì)時(shí)序的要求比較高,對(duì)低速單片機(jī)不太友好而且開發(fā)比較復(fù)雜。

今天我們就針對(duì)基于ME8S003硬件PWM如何快速實(shí)現(xiàn)控制ws2812的驅(qū)動(dòng)。其中ME8S003提供的2路PWM模塊可以輕松實(shí)現(xiàn)當(dāng)下流行的LED驅(qū)動(dòng)WS2812的通信,不需要過多占用CPU時(shí)間。敏矽微提供整套軟、硬件解決方案,幫助用戶快速開發(fā);

1、概述

“WS2812”解決方案

ME8S003是內(nèi)嵌8051兼容的1T高性能8位微控制器。該系列控制器具有高性能、高適應(yīng)范圍和超低成本特點(diǎn)。內(nèi)置48MHz主時(shí)鐘和獨(dú)立的低速(30K/1.5M可切換)時(shí)鐘,常用外設(shè)8路1M高速12位的ADC轉(zhuǎn)換器,允許4路輸入2個(gè)比較器,2+3通道PWM,2個(gè)UART串口,SPI接口I2C總線接口,3通用16位計(jì)數(shù)器/定時(shí)器。低功耗支持深度睡眠和掉電模式。提供M2調(diào)試端口,實(shí)現(xiàn)系統(tǒng)仿真

2、WS2812基本說明

“WS2812”快速解決方案

WS2812B是一款全彩LED控制IC,單總線控制,何為單總線我的理解就是數(shù)據(jù)線在一根線上傳輸?shù)目刂品绞骄褪菃慰偩€。

WS2812是一個(gè)集控制電路與發(fā)光電路于一體的智能外控LED光源,外形一般為5050封裝,每個(gè)LED燈珠為一個(gè)像素點(diǎn),支持RGB無極調(diào)色,同時(shí)每顆燈珠內(nèi)部集成有智能數(shù)字接口數(shù)據(jù)鎖存信號(hào)整形放大驅(qū)動(dòng)電路,還包含有高精度的內(nèi)部振蕩器和可編程電流控制部分,有效保證了像素點(diǎn)光的顏色高度一致。

wKgZomUDv4eAUsNQAAHl2oy5CRE109.png

wKgaomUDv4qAcdXqAAEQZErR4hM337.png

3、ME8S003使用PWM實(shí)現(xiàn)數(shù)據(jù)移位輸出

“WS2812”快速解決方案

ME8S003內(nèi)嵌一個(gè)PWM模塊,可以支持兩個(gè)獨(dú)立的16位PWM輸出。同時(shí)還可以配置成為兩個(gè)定時(shí)器,或者兩路PWM合并支持載波輸出(如實(shí)現(xiàn)38K Irda應(yīng)用),或者配置兩個(gè)不同的PWM輸出來對(duì)應(yīng)bit數(shù)據(jù)0/1并合并在一起,從而實(shí)現(xiàn)使用PWM進(jìn)行bit流數(shù)據(jù)的移位輸出。

下面我們將討論如何使用PWM模塊實(shí)現(xiàn)bit流數(shù)據(jù)的移位輸出:

首先,我們將對(duì)PWM0和PWM1進(jìn)行周期和占空比分別配置,其中PWM0的周期(PWM0CRCH/ PWM0CRCL)和占空比(PWM0CCH/ PWM0CCL)將用來代表數(shù)據(jù)0,PWM1的周期(PWM1CRCH/ PWM1CRCL)和占空比(PWM1CCH/ PWM1CCL)將用來代表數(shù)據(jù)1。0和1的周期和占空比是不同的,以WS2812應(yīng)用為例,PWM0的周期和占空比分別為1.2us和0.3us,PWM0的周期和占空比分別為1.2us和0.9us。

當(dāng)我們使能PWM的數(shù)據(jù)移位功能時(shí),要輸出數(shù)據(jù)0,PWM移位輸出管腳(PWMSHT)就PWM0配置的波形;要輸出數(shù)據(jù)1,PWM移位輸出管腳就PWM1配置的波形。

wKgZomUDv4uAd8tIAABCpxQFJVY269.png

最后的問題就是如何連續(xù)輸出一個(gè)bit數(shù)據(jù)流。ME8S003 PWM為這個(gè)移位功能設(shè)置一個(gè)乒乓緩存(PWMSHIFTDAT0/ PWMSHIFTDAT1),我們只需要來回切換并不斷把需要發(fā)出的數(shù)據(jù)喂入乒乓緩存即可。

當(dāng)所有數(shù)據(jù)傳輸結(jié)束,關(guān)閉PWM。

4、WS2812控制實(shí)程

“WS2812”快速解決方案

ME8S003提供了全套的驅(qū)動(dòng),其中關(guān)于PWM 移位數(shù)據(jù)功能有PWM配置函數(shù)和PWM數(shù)據(jù)移位輸出函數(shù);

PWM配置函數(shù):

voidPWM_DataShift_Cfg(unsignedlongcyclefreq,unsignedcharduty0inpercentage,unsignedcharduty1inpercentage)
cyclefreq:PWM周期頻率,單位hz
duty0inpercentage:數(shù)據(jù)0輸出占空比的百分比
duty1inpercentage:數(shù)據(jù)1輸出占空比的百分比
voidPWM_DataShift_Cfg(unsignedlongcyclefreq,unsignedcharduty0inpercentage,unsignedcharduty1inpercentage)
{
unsignedlongtemp,temp1;
unsignedcharclkshift;
clkshift=(PWMCON0 0x07)+1;
if(clkshift>2)
temp=SystemClock>>clkshift;
else
temp=SystemClock;
temp=temp/cyclefreq;
PWM0CRCL=temp 0xFF;
PWM0CRCH=(temp>>8) 0xFF;
PWM1CRCL=PWM0CRCL;
PWM1CRCH=PWM0CRCH;
temp1=(temp*duty0inpercentage)/100;
PWM0CCL=temp1 0xFF;
PWM0CCH=(temp1>>8) 0xFF;
temp1=(temp*duty1inpercentage)/100;
PWM1CCL=temp1 0xFF;
PWM1CCH=(temp1>>8) 0xFF;
set_PWMCON1_SHIFTDIR;
}

PWM數(shù)據(jù)移位輸出函數(shù):

voidPWM_DataShift(unsignedchar*dataptr,unsignedcharlen)
dataptr:輸出數(shù)據(jù)起始指針
len:數(shù)據(jù)長(zhǎng)度
voidPWM_DataShift(unsignedchar*dataptr,unsignedcharlen)
{
PWMSHIFTDAT0=*dataptr++;
PWMSHIFTDAT1=*dataptr++;;
PWM_DATASHIFT_START;
len-=2;
//shiftalldata
while(len)
{
if(PWMSTA_DAT0BF==0)
{
PWMSHIFTDAT0=*dataptr++;
len--;
}
if(len==0)break;
if(PWMSTA_DAT1BF==0)
{
PWMSHIFTDAT1=*dataptr++;
len--;
}
}
while(PWM_DATASHIFT_BUSY);
PWM_DATASHIFT_STOP;
}

3個(gè)WS2812 驅(qū)動(dòng)的LED燈實(shí)例程序:

Main.c
//-----------------------------------------------------------------------------
//Includes
//-----------------------------------------------------------------------------
#include"me8s003.h"http://SFRdeclarations
#include"io_mux.h"
#include"sfr_macro.h"
#include"sys.h"
#include"pwm.h"
//-----------------------------------------------------------------------------
//main()Routine
//-----------------------------------------------------------------------------
//3ledunsignedcharcolor_data[9]={0xFF,0x80,0x40,0x40,0xFF,0x80,0x80,0x40,0xFF};
unsignedcharmax_data_no=9;
unsignedintdata_index;
voidmain(void)
{
Modify_System_Clock(HCLK_48M);
P0_5_INIT(P0_5_PIO);
P0_Output_Enable(IO_BIT5);
P1_2_INIT(P1_2_PWMSHT);
PWM_Init(PWM_CLK_DIVIDED_BY_1);
PWM_DataShift_Cfg(833000,25,75);//833K=~1.2usPWMcycle,25%=~0.3us,75%=~0.9us
while(1)
{
//shiftdata
PWM_DataShift(color_data,max_data_no);
//preparenextdata
for(data_index=0;data_index<=max_data_no;data_index++)
????????{
????????????color_data[data_index]=color_data[data_index]+1;
????????}
????????P0_5?=!P0_5;?????????????????????//?Turn?onoff?LE
????????Ddelay(800);?//Reset,?>80us
}
}

來源:敏矽MCU

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7649

    瀏覽量

    152103
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23355

    瀏覽量

    663160
  • PWM
    PWM
    +關(guān)注

    關(guān)注

    114

    文章

    5198

    瀏覽量

    214874
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3255

    瀏覽量

    115365
  • WS2812
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    6252
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    WS2812是否可以反轉(zhuǎn)UART的輸出?

    是否可以反轉(zhuǎn) UART 的輸出。輸出 1 而不是 0,輸出 0 而不是 1。 問題背景:按照以下方案使用 UART 控制 WS2812: (1)XX XXX XX(0). 具有 7 個(gè)數(shù)據(jù)位的 UART。 WS2812 的 3
    發(fā)表于 07-15 07:37

    求一種使用SPI+DMA的方式進(jìn)行WS2812的控制方案

    怎樣使用SPI+DMA的方式進(jìn)行WS2812的控制呢?如何實(shí)現(xiàn)SPI控制WS2812燈呢?
    發(fā)表于 12-21 06:37

    講講WS2812的數(shù)據(jù)協(xié)議

    可編程定電流控制部分,可以保證LED亮度一致。下面來講講WS2812的數(shù)據(jù)協(xié)議。WS2812采用的是一種叫做單線歸零碼的通訊方式。首先要注意的是,單線歸零碼通過識(shí)別電平轉(zhuǎn)換來判別0和1信號(hào),與一般的電平...
    發(fā)表于 01-11 07:25

    Arduino控制WS2812燈帶的方法

    設(shè)計(jì)者:STCode(公眾號(hào)同名)Arduino控制WS2812燈帶(燈環(huán))1) WS2812WS2812燈帶WS2812燈環(huán)WS2812
    發(fā)表于 01-12 08:08

    利用ESP32中的硬件SPI接口控制WS2812的顯示

    1、利用硬件SPI控制WS2812智能集成LED光源 WS2812通過簡(jiǎn)單的外部接口、特有的級(jí)聯(lián)方案便于利用MCU完成多個(gè)LED控制,極大簡(jiǎn)
    發(fā)表于 06-21 15:17

    WS2812驅(qū)動(dòng)的總結(jié)和時(shí)序的詳細(xì)資料分析

    WS2812相信有不少人都用過,大家對(duì)這款彩色LED真的是又愛又恨,愛的是它它使用簡(jiǎn)單,采用單總線通信方式,節(jié)約IO口,而且可以多級(jí)串聯(lián)。而普通的彩色LED不是共陰就是共陽,每個(gè)顏色一個(gè)引腳,一般
    發(fā)表于 08-01 17:35 ?64次下載
    <b class='flag-5'>WS2812</b>驅(qū)動(dòng)的總結(jié)和時(shí)序的詳細(xì)資料分析

    如何進(jìn)行WS2812的面板燈制作詳細(xì)資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何進(jìn)行WS2812的面板燈制作詳細(xì)資料合集免費(fèi)下載包括了:DMX512轉(zhuǎn)WS2812 面板燈程序,STC8系列單片機(jī)技術(shù)參考手冊(cè),WS2812燈板照片,
    發(fā)表于 05-29 17:36 ?164次下載
    如何進(jìn)行<b class='flag-5'>WS2812</b>的面板燈制作詳細(xì)資料合集免費(fèi)下載

    dfrobot炫彩WS2812 RGB LED可剪裁白色燈帶介紹

    WS2812 RGB裸板白燈條是由一系列的全彩LED組成。
    的頭像 發(fā)表于 12-27 15:35 ?4610次閱讀
    dfrobot炫彩<b class='flag-5'>WS2812</b> RGB <b class='flag-5'>LED</b>可剪裁白色燈帶介紹

    STM32使用LL庫PWM的DMA模式驅(qū)動(dòng)ws2812

    驅(qū)動(dòng)n個(gè),當(dāng)然n是有限制的。時(shí)序超級(jí)簡(jiǎn)單,也有一定難度。類似的帖子網(wǎng)上有很多,在此不再贅述。WS2812驅(qū)動(dòng)方式大概有以下幾種:1.使用GPIO模擬,中間加延時(shí)實(shí)現(xiàn)“0”、“1”的時(shí)序,延時(shí)需要...
    發(fā)表于 11-30 10:21 ?66次下載
    STM32使用LL庫PWM的DMA模式驅(qū)動(dòng)<b class='flag-5'>ws2812</b>

    STM32F103C8T6+PWM+DMA驅(qū)動(dòng) WS2812燈帶

    #STM32+PWM+DMA驅(qū)動(dòng) WS2812燈帶#文章目錄1.理論:2代碼:理論:使用STM32F103C8T6驅(qū)動(dòng)WS2812燈帶,每個(gè)燈由24位組成三種顏色RGB,每8位控制一種
    發(fā)表于 12-27 19:29 ?216次下載
    STM32F103C<b class='flag-5'>8</b>T6+PWM+DMA驅(qū)動(dòng) <b class='flag-5'>WS2812</b>燈帶

    WS2811/WS2812擴(kuò)展器

    電子發(fā)燒友網(wǎng)站提供《WS2811/WS2812擴(kuò)展器.zip》資料免費(fèi)下載
    發(fā)表于 07-04 09:35 ?15次下載
    <b class='flag-5'>WS</b>2811/<b class='flag-5'>WS2812</b>擴(kuò)展器

    WS2812 LED燈條的DIY Arduino 1D乒乓球游戲

    電子發(fā)燒友網(wǎng)站提供《帶WS2812 LED燈條的DIY Arduino 1D乒乓球游戲.zip》資料免費(fèi)下載
    發(fā)表于 11-04 14:38 ?0次下載
    帶<b class='flag-5'>WS2812</b> <b class='flag-5'>LED</b>燈條的DIY Arduino 1D乒乓球游戲

    WS2812 RGB LED開源分享

    電子發(fā)燒友網(wǎng)站提供《WS2812 RGB LED開源分享.zip》資料免費(fèi)下載
    發(fā)表于 02-01 14:05 ?28次下載
    <b class='flag-5'>WS2812</b> RGB <b class='flag-5'>LED</b>開源分享

    WS2812 LED芯片的使用筆記

    最接接觸了WS2812 LED,相信有不少人都用過。大家對(duì)這款彩色LED肯定是又愛又恨,愛的是它使用簡(jiǎn)單,采用單總線通信方式,節(jié)約IO口,而且可以多級(jí)串聯(lián)。而普通的彩色LED不是共陰就
    的頭像 發(fā)表于 10-01 09:58 ?6957次閱讀
    <b class='flag-5'>WS2812</b> <b class='flag-5'>LED</b>芯片的使用筆記

    論如何使用WS2812以及類似燈珠

    ? ?WS2812 LED燈珠,這是一種非常流行的可尋址RGB LED。每個(gè)WS2812 LED內(nèi)部集成了控制電路,因此可以通過一個(gè)數(shù)據(jù)輸入
    的頭像 發(fā)表于 09-30 15:11 ?618次閱讀
    論如何使用<b class='flag-5'>WS2812</b>以及類似燈珠
    百家乐推广| 五寨县| 圣淘沙百家乐现金网| 五大连池市| 免费百家乐规律| 赌场大亨| 百家乐一起多少张牌| 百家乐官网压分技巧| 百家乐大娱乐场开户注册| 百家乐官网马宝| 德州扑克游戏大厅| 在线百家乐博彩网| 皇冠百家乐官网赢钱皇冠| 大发888娱乐游戏可以玩吗| 百家乐娱乐分析软| 百家乐官网太阳城菲律宾| 百家乐园太阳| 大桥下做生意风水好吗| 澳盈88| 北京太阳城医院怎么样| 金都百家乐现金网| 夏邑县| 大发888娱乐城优惠码lm0| 太阳城百家乐娱乐开户| 百家乐官网博赌城| 百家乐官网高手qq| 大发888娱乐客户端真钱| 百家乐智能软件| 百家乐官网电脑赌博| 赌博游戏| 威尼斯人娱乐场wnsrdcylcbywz| 百家乐长龙有几个| 豪门百家乐官网的玩法技巧和规则 | 最新百家乐的玩法技巧和规则| 百家乐官网光纤冼牌机| 网络百家乐官网真人游戏| 澳门百家乐官网下路写法| 运城市| 克拉克百家乐官网下载| 百家乐官网代打是真的吗| 网上百家乐官网赢钱公式|