打印
[STM8]

LCD例程里的LCD frequency和Frame frequency是怎么计算的?

[复制链接]
4147|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
官方LCD例程里的初始化函数,这个频率是怎么计算的?
假如我需要LCD的刷新频率是75Hz,应该怎样配置?谢谢!

void LCD_GLASS_Init(void)
{
  /*
    The LCD is configured as follow:
     - clock source = LSE (32.768 KHz)
     - Voltage source = Internal
     - Prescaler = 2
     - Divider = 18 (16 + 2)  
     - Mode = 1/8 Duty, 1/4 Bias
     - LCD frequency = (clock source * Duty) / (Prescaler * Divider)
                     = 114 Hz ==> Frame frequency = 28,5 Hz*/

  /* Enable LCD clock */
  CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);
  CLK_RTCClockConfig(CLK_RTCCLKSource_LSE, CLK_RTCCLKDiv_1);

  /* Initialize the LCD */
  LCD_Init(LCD_Prescaler_2, LCD_Divider_18, LCD_Duty_1_8,
           LCD_Bias_1_4, LCD_VoltageSource_Internal);

  /* Mask register*/
  LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0xFF);
  LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0xFF);
  LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0xFF);
  LCD_PortMaskConfig(LCD_PortMaskRegister_3, 0xFF);
  LCD_PortMaskConfig(LCD_PortMaskRegister_4, 0xFF);
  LCD_PortMaskConfig(LCD_PortMaskRegister_5, 0x0F);

  LCD_ContrastConfig(LCD_Contrast_Level_7);

  LCD_PulseOnDurationConfig(LCD_PulseOnDuration_7);

  LCD_Cmd(ENABLE); /*!< Enable LCD peripheral */
}
沙发
zxm19820916|  楼主 | 2016-5-4 14:46 | 只看该作者
按照这个计算,结果不对啊。得不到28.5Hz啊。
/*
     The LCD is configured as follow:
      - clock source = LSE (32.768 KHz)
      - Voltage source = Internal
      - Prescaler = 2
      - Divider = 18 (16 + 2)  
      - Mode = 1/8 Duty, 1/4 Bias
      - LCD frequency = (clock source * Duty) / (Prescaler * Divider)
                      = 114 Hz ==> Frame frequency = 28,5 Hz*/

使用特权

评论回复
板凳
cowboy2014| | 2016-5-4 22:09 | 只看该作者
一个是运行的速率,一个是数据传输的速率吧

使用特权

评论回复
地板
FAQ| | 2016-5-5 00:14 | 只看该作者
公式是错误的

使用特权

评论回复
5
zxm19820916|  楼主 | 2016-5-12 16:51 | 只看该作者
FAQ 发表于 2016-5-5 00:14
公式是错误的

那正确的公式是??

使用特权

评论回复
6
zxm19820916|  楼主 | 2016-5-19 16:37 | 只看该作者
没有人知道吗?

使用特权

评论回复
7
FAQ| | 2016-5-19 19:24 | 只看该作者

楼主看你一个人挺孤单的,我来给你分析下。

首先我给你解释下公式中提到的名字概念:
LCD frequency是指最小脉宽的频率
Frame frequency是指刷一次屏幕的频率


你现在刷屏幕的频率是114Hz/8=14.25Hz


使用特权

评论回复
8
zxm19820916|  楼主 | 2016-5-20 11:02 | 只看该作者
FAQ 发表于 2016-5-19 19:24
楼主看你一个人挺孤单的,我来给你分析下。

首先我给你解释下公式中提到的名字概念:

所以例程里的公式是错误的对吗?
你能不能给出正确的推算公式?

使用特权

评论回复
9
FAQ| | 2016-5-20 11:05 | 只看该作者
zxm19820916 发表于 2016-5-20 11:02
所以例程里的公式是错误的对吗?
你能不能给出正确的推算公式?

你现在不理解定义,根本没法说。换句话说你自己都不知道想要什么

使用特权

评论回复
10
FAQ| | 2016-5-20 11:10 | 只看该作者
zxm19820916 发表于 2016-5-20 11:02
所以例程里的公式是错误的对吗?
你能不能给出正确的推算公式?

你现在需要75Hz刷新频率,这样屏幕刷屏才不会肉眼觉得闪烁。

因此你可以倒推
  /*
    The LCD is configured as follow:
     - clock source = LSE (32.768 KHz)
     - Voltage source = Internal
     - Prescaler = 2
     - Divider = 18 (16 + 2)  
     - Mode = 1/8 Duty, 1/4 Bias
     - LCD frequency = (clock source * Duty) / (Prescaler * Divider)
                     = 600 Hz ==> Frame frequency = 75Hz Hz*/
这里的Frame frequency帧频率正是你要的屏幕刷新频率。
你现在屏幕是1/8Duty驱动,所以最小脉宽频率就是75Hz*8=600Hz,剩下的具体怎么分频,你应该知道了。

使用特权

评论回复
11
FAQ| | 2016-5-20 11:16 | 只看该作者
zxm19820916 发表于 2016-5-20 11:02
所以例程里的公式是错误的对吗?
你能不能给出正确的推算公式?

你这里填的是LCD_Prescaler_2, LCD_Divider_18

LCD_Init(LCD_Prescaler_2, LCD_Divider_18, LCD_Duty_1_8,
           LCD_Bias_1_4, LCD_VoltageSource_Internal);



32768Hz/600Hz=54.61333333333333,所以你只要保证这个函数的前两个参数的乘积为54.61333333333333即可。

使用特权

评论回复
12
zxm19820916|  楼主 | 2016-5-20 12:28 | 只看该作者
FAQ 发表于 2016-5-20 11:16
你这里填的是LCD_Prescaler_2, LCD_Divider_18

LCD_Init(LCD_Prescaler_2, LCD_Divider_18, LCD_Duty_1_ ...

谢谢回答。我知道我要的frame频率是75Hz,因为1/8duty,所以LCD频率应该是600Hz。

那2个不是我填的, 是官方例程。我的问题是,按照官方例程的配置,和公式推导。得不到例程上面注释里的28.5Hz。你推算一下,是28.5Hz吗?

使用特权

评论回复
13
FAQ| | 2016-5-20 12:49 | 只看该作者
zxm19820916 发表于 2016-5-20 12:28
谢谢回答。我知道我要的frame频率是75Hz,因为1/8duty,所以LCD频率应该是600Hz。

那2个不是我填的, 是 ...

纯属级联分频关系,
LCD frequency是指最小脉宽的频率
Frame frequency是指刷一次屏幕的频率


LCD frequency=Frame frequency/Duty=28.5Hz*8=228Hz而不是114Hz

使用特权

评论回复
14
zxm19820916|  楼主 | 2016-5-20 13:53 | 只看该作者
FAQ 发表于 2016-5-20 12:49
纯属级联分频关系,
LCD frequency是指最小脉宽的频率
Frame frequency是指刷一次屏幕的频率

怎样算出这228Hz?
分别是原始输入时钟,需要分别除以哪些参数?然后得到228Hz。

使用特权

评论回复
15
xmshao| | 2016-5-20 17:15 | 只看该作者
那里可能有点问题。有问题是参考手册靠谱。
搞清原理了 一定会算。时钟哪里来的 怎么分频的。。。

lcd.png (79.27 KB )

lcd.png

使用特权

评论回复
16
xmshao| | 2016-5-20 17:25 | 只看该作者
刚才算了,例程中的注释是对的。

它用 RTCCLK/2 作为LCD的时钟源,即Fclklcd=16.384KHz

使用特权

评论回复
17
zxm19820916|  楼主 | 2016-6-3 14:09 | 只看该作者
xmshao 发表于 2016-5-20 17:25
刚才算了,例程中的注释是对的。

它用 RTCCLK/2 作为LCD的时钟源,即Fclklcd=16.384KHz ...

如果是这样的话,那官方例程注释应该改为
clock source = LSE (32.768 KHz) / 2

手上没有demo板,要不然可以测量一下,到底是不是1/2的频率作为LCD的时钟源?

使用特权

评论回复
18
happy1518| | 2017-9-28 11:17 | 只看该作者
请问楼主最后知道怎么计算的了吗?目前我也在看这部分内容

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

299

帖子

2

粉丝