硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3272|回复: 5
收起左侧

[FreeRTOS] 使用freertos驱动8*8点阵刷新率上不去

[复制链接]

33

主题

203

回帖

302

积分

高级会员

积分
302
发表于 2021-3-5 10:32:31 | 显示全部楼层 |阅读模式
本帖最后由 diiiiiii 于 2021-3-5 10:35 编辑

复制代码

void led88_refresh(uint8_t *mar)
{
    uint8_t *ma, i;
    uint16_t dr, dc;

    const TickType_t xDelay = 10 / portTICK_PERIOD_MS;

    ma = mar;
    dr = 0xFFFF;
    dc = 0x0000;

    for(i = 0; i < 8; i++)   
    {

        dr = ~(0x01 << i) & 0xFF;
        dc = *ma;
        ma++;
        dc = (dc << 8) | (uint16_t)*ma;

        led88_c_send_data(dc);//将数据送到74hc595
        led88_r_send_data(dr);   

        ma++;   
        vTaskDelay(xDelay);  

    }   
}


static TaskHandle_t xLed88DisplayTask = NULL;

void led88_create_display_task(void)
{
    xTaskCreate(led88_display_task, "led88_display_task", 2048, NULL, \
        10, &xLed88DisplayTask);
}


static void led88_display_task(void* arg)
{

    const TickType_t xDelay = 1 / portTICK_PERIOD_MS;
    init_led88_pin();

    while(1)
    {
       led88_refresh(data);//显示点阵
        // vTaskDelayUntil( &xLastWakeTime, xFrequency );
        vTaskDelay( xDelay );
    }
}

电路是没问题的,裸机正常驱动74hc595。
led88_refresh()是每隔10ms换一行刷新,在led88_display_task中,1ms刷新点阵一次。但是显示仍然非常晃动,刷新感很强烈
理论上来说,8*8点阵的刷新频率根本不需要这么快就能稳定显示。
这个现象和freertos有关系吗?


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2021-3-5 10:42:05 | 显示全部楼层
下面这个是10ms更新一行吗

for(i = 0; i < 8; i++)   
    {

        dr = ~(0x01 << i) & 0xFF;
        dc = *ma;
        ma++;
        dc = (dc << 8) | (uint16_t)*ma;

        led88_c_send_data(dc);//将数据送到74hc595
        led88_r_send_data(dr);   

        ma++;   
        vTaskDelay(xDelay);  

    }   
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2021-3-5 10:46:39
eric2013 发表于 2021-3-5 10:42
下面这个是10ms更新一行吗

for(i = 0; i < 8; i++)   

对。

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2021-3-5 10:47:27 | 显示全部楼层
eric2013 发表于 2021-3-5 10:42
下面这个是10ms更新一行吗

for(i = 0; i < 8; i++)   

是的。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106709
QQ
发表于 2021-3-5 10:57:12 | 显示全部楼层

这个为什么要做个延迟,整体更新下不挺好的。由于不了解你的硬件使用情况,其它不清楚了,你自己研究下吧
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2021-3-5 11:03:43 | 显示全部楼层
eric2013 发表于 2021-3-5 10:57
这个为什么要做个延迟,整体更新下不挺好的。由于不了解你的硬件使用情况,其它不清楚了,你自己研究下吧

因为是用595扫描的,只能一行一行的扫描,这个地方不延时的话,等于是每行停留的时间太短,导致led太暗。这个函数负责扫描每行。创建的任务负责多遍刷新整个点阵。
回复

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
 楼主| 发表于 2021-3-6 15:51:32 | 显示全部楼层
已解决。是驱动函数有问题。重新写的驱动。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-30 11:25 , Processed in 0.289012 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表