1488|3

365

帖子

0

TA的资源

版主

楼主
 

AG32VF407 AGRV2K Verilog编写Fpga代码控制ws2812进行红绿蓝rgb测试 [复制链接]

 

视频教程

波形测试

 

波形为1,高800ns,低400ns

波形为0,低800ns,高400ns

 

使用50Mhz的clk输出,单边沿触发,则为25Mhz

//ws2812b测试
integer ns400cnt;
integer cnt;
integer period;
integer duty;

initial begin
cnt = 0;
ns400cnt = 0;
period = 3;
duty = 2;
end

always@(posedge c0) begin
    cnt = cnt + 1;
         //20cnt = 400ns         
    if(cnt >= 20) begin
        //pinout[0] = ~pinout[0];
        ns400cnt = ns400cnt + 1;
        cnt = 0;
        if(ns400cnt <= duty) begin
            pinout[0] = 1;
        end
        else if(ns400cnt <= period) begin
            pinout[0] = 0;
        end
        
        if(ns400cnt == period) begin
            ns400cnt = 0;
        end
    end
    
end

 

点亮测试

 

 

always@(posedge c0) begin
    //延时一会等待,内部RC振荡器稳定
    if(start_flag == 0) begin
        delay_cnt = delay_cnt + 1;
        pinout[0] <= 0;
        if(delay_cnt > 200000000) begin
            start_flag = 1;
            delay_cnt = 0;
        end
    end
    
    if(start_flag == 1) begin
        //状态控制
        //cnt2代表bit的数量
        if(cnt2 < 8) begin
            inverse = 0;
        end
        else if(cnt2 >= 8 && cnt2 < 16) begin
            inverse = 1;
        end
        else if(cnt2 >= 16 && cnt2 < 24) begin
            inverse = 1;
        end
        //led2
        else if(cnt2 >= 24 && cnt2 < 32) begin
            inverse = 1;
        end
        else if(cnt2 >= 32 && cnt2 < 40) begin
            inverse = 0;
        end
        else if(cnt2 >= 40 && cnt2 < 48) begin
            inverse = 1;
        end
        //led3
        else if(cnt2 >= 48 && cnt2 < 56) begin
            inverse = 1;
        end
        else if(cnt2 >= 56 && cnt2 < 64) begin
            inverse = 1;
        end
        else if(cnt2 >= 64 && cnt2 < 72) begin
            inverse = 0;
        end
        //led4
        else if(cnt2 >= 72 && cnt2 < 80) begin
            inverse = 0;
        end
        else if(cnt2 >= 80 && cnt2 < 86) begin
            inverse = 1;
        end
        else if(cnt2 >= 86 && cnt2 < 94) begin
            inverse = 1;
        end
        //rst
        else inverse = 2;
        
        //单个bit控制
         //20cnt = 400ns   
        cnt = cnt + 1;
        if(cnt >= 20) begin
            //pinout[0] = ~pinout[0];
            ns400cnt = ns400cnt + 1;
            cnt = 0;
            if(ns400cnt <= duty) begin
                if(inverse == 0) pinout[0] <= 1;
                else if(inverse == 1) pinout[0] <= 0;
                else pinout[0] <= 0;
            end
            else if(ns400cnt <= period) begin
                if(inverse == 0) pinout[0] <= 0;
                else if(inverse == 1) pinout[0] <= 1;
                else pinout[0] <= 0;
            end
            
            if(ns400cnt == period) begin
                ns400cnt = 0;
                cnt2 = cnt2 + 1;
            end
        end
    end
end

4个led灯,94bits

 

第一个led灯绿色

8个H,16个L

 

最新回复

怎么看起来是用的,quartus工具呀,有没有看错呀;   详情 回复 发表于 2024-7-19 13:37
点赞 关注
 
 

回复
举报

119

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

很想用国产芯片,但不知道具体情况怎么样,怕出问题,哎很想用国产芯片,但不知道具体情况怎么样,怕出问题,哎

点评

做产品的话是要考虑的多点    详情 回复 发表于 2023-9-5 21:45
 
 
 

回复

365

帖子

0

TA的资源

版主

板凳
 
wang12011201 发表于 2023-9-4 12:07 很想用国产芯片,但不知道具体情况怎么样,怕出问题,哎很想用国产芯片,但不知道具体情况怎么样,怕出问题 ...

做产品的话是要考虑的多点
 

 
 
 

回复

136

帖子

0

TA的资源

一粒金砂(中级)

4
 

怎么看起来是用的,quartus工具呀,有没有看错呀;

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表