[技术问答] 电荷泵电压不稳定

[复制链接]
1916|8
 楼主| zzzxiao 发表于 2022-1-25 18:48 | 显示全部楼层 |阅读模式
请问大家,我使用的NANO110KE3BN单片机,想要使用c-type驱动LCD显示,按照手册上将V1,V2,V3,VLCD,DH1,DH2,引脚通过0.1uF电容连接到地,但是只有上电的时候会显示,然后电压就逐渐降低到0.6V,在R-TYPE模式下给VLCD引脚电压,显示是正常的。目前现象就是电荷泵电压不稳定,但是也没有发现短路问题.请大家看一下是不是程序方面配制问题或者提供一些测试问题的方式
  1. /**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
  4. * $Revision: 4 $
  5. * $Date: 14/09/11 5:23p $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    Show how to pixel on and off on LCD panel.
  7. *
  8. * @note
  9. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
  10. *****************************************************************************/

  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <string.h>
  14. #include <stdint.h>
  15. #include "Nano100Series.h"
  16. #include "lcd.h"
  17. #include "uart.h"
  18. #include "sys.h"
  19. #include "clk.h"
  20. #include "gpio.h"
  21. #include "LCDLIB.h"

  22. #define LCD_ALPHABET_NUM        7
  23. #define LCD_DIGIT_NUM           4


  24. /*!<Enable LCD for 100/128-Pin Package */
  25. #define MFP_LCD_TYPEA() { \
  26.                             SYS->PA_L_MFP |= 0x77770000;    /* seg 36 ~ 39 */\
  27.                             SYS->PA_H_MFP |= 0x7777;        /* seg 20 ~ 23 */\
  28.                             SYS->PB_L_MFP = 0x77777777;     /* seg 10 ~ 13, 4 ~ 7 */\
  29.                             SYS->PB_H_MFP = 0x77777777;     /* LCD V1 ~ V3, seg 30 ~ 31, 24 ~ 26 */\
  30.                             SYS->PC_L_MFP |= 0x777777;      /* LCD COM3 ~ COM0, DH1/DH2 */\
  31.                             SYS->PC_H_MFP |= 0x77000000;    /* seg 32 ~ 33 */\
  32.                             SYS->PD_L_MFP |= 0x77770000;    /* seg 2 ~ 3, 34 ~ 35 */\
  33.                             SYS->PD_H_MFP = 0x77777777;     /* seg 0 ~ 1, 14 ~ 19 */\
  34.                             SYS->PE_L_MFP |= 0x70000000;    /* seg 8 */\
  35.                             SYS->PE_H_MFP |= 0x77700007;    /* seg 9, 27 ~ 29 */\
  36.                         }

  37. /*!<Enable LCD for 64-Pin Package */
  38. #define MFP_LCD_TYPEB() { \
  39.                             SYS->PA_L_MFP |= 0x77777700;    /* seg 18 ~ 23 */\
  40.                             SYS->PA_H_MFP = 0x77777777;     /* seg 6 ~ 9, 24 ~ 27 */\
  41.                             SYS->PB_L_MFP = 0x77777777;     /* COM2, COM3, seg 0 ~ 5 */\
  42.                             SYS->PB_H_MFP = 0x77777777;     /* LCD V1 ~ V3, seg 10 ~ 14 */\
  43.                             SYS->PC_L_MFP |= 0x70007777;    /* LCD COM1 ~ COM0, DH1/DH2, seg 17 */\
  44.                             SYS->PC_H_MFP |= 0x77007777;    /* seg 28 ~ 31, 15 ~ 16 */\
  45.                         }

  46. void SYS_Init(void)
  47. {
  48.     /*---------------------------------------------------------------------------------------------------------*/
  49.     /* Init System Clock                                                                                       */
  50.     /*---------------------------------------------------------------------------------------------------------*/
  51.     /* Unlock protected registers *///LIRC默认使用;HIRC默认使能;LXT默认禁止;HXT默认禁止
  52.     SYS_UnlockReg();
  53. /* Enable External XTAL (32.768KHz) */
  54.     CLK_EnableXtalRC(CLK_PWRCTL_LXT_EN_Msk);
  55.     CLK_EnableXtalRC(CLK_PWRCTL_HIRC_EN_Msk);//CLK_DisableXtalRC(CLK_PWRCTL_HIRC_EN_Msk);
  56.     /* Waiting for 12MHz clock ready */
  57.     CLK_WaitClockReady( CLK_CLKSTATUS_LXT_STB_Msk);//32.768K
  58.     CLK_WaitClockReady( CLK_CLKSTATUS_HIRC_STB_Msk);//12M
  59.     /* Switch HCLK clock source to HIRC */

  60.    CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC,CLK_HCLK_CLK_DIVIDER(6));//12M  HB101 MCLK和SMCLK默认试时钟为1MHz

  61.        
  62.     /* Enable IP clock */

  63.     CLK_EnableModuleClock(UART0_MODULE);
  64.                 CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HIRC, CLK_UART_CLK_DIVIDER(1));

  65.                 CLK->CLKSEL1 &= ~CLK_CLKSEL1_LCD_S_Msk;
  66.     CLK->CLKSEL1 |= (0x0 << CLK_CLKSEL1_LCD_S_LXT);// Clock source from external 12 MHz or 32 KHz crystal clock
  67.                
  68.           CLK_EnableModuleClock(LCD_MODULE);
  69.     SystemCoreClockUpdate();

  70.   
  71.     /*---------------------------------------------------------------------------------------------------------*/
  72.     /* Init I/O Multi-function                                                                                 */
  73.     /*---------------------------------------------------------------------------------------------------------*/
  74.     /* Set GPB multi-function pins for UART0 RXD and TXD */
  75.       SYS->PA_H_MFP &= ~(SYS_PA_H_MFP_PA14_MFP_Msk|SYS_PA_H_MFP_PA15_MFP_Msk);
  76.       SYS->PA_H_MFP |=  (SYS_PA_H_MFP_PA14_MFP_UART0_RX|SYS_PA_H_MFP_PA15_MFP_UART0_TX);
  77.     /* Select LCD COMs, SEGs, V1 ~ V3, DH1, DH2 */
  78.      MFP_LCD_TYPEA();

  79.    GPIO_DISABLE_DIGITAL_PATH(PB, BIT9);
  80.    GPIO_DISABLE_DIGITAL_PATH(PB, BIT10);
  81.    GPIO_DISABLE_DIGITAL_PATH(PB, BIT11);

  82.        
  83.         GPIO_DISABLE_DIGITAL_PATH(PC, BIT0);
  84.   GPIO_DISABLE_DIGITAL_PATH(PC, BIT1);
  85.     /* Lock protected registers */
  86.     SYS_LockReg();
  87.    
  88. }








  89. void UART0_Init()
  90. {
  91.     /*---------------------------------------------------------------------------------------------------------*/
  92.     /* Init UART                                                                                               */
  93.     /*---------------------------------------------------------------------------------------------------------*/
  94.     UART_Open(UART0, 115200);
  95. }

  96. void  clk_delay(int16_t num)
  97. {
  98.         int16_t a,b;
  99.         for(a=0;a<num;a++)
  100.         for(b=0;b<1250;b++)
  101.         {
  102.                 ;
  103.         }
  104. }


  105. static void TestItem (void)
  106. {
  107.     printf("\n\n");
  108.     printf("+-----------------------------------------------------------+\n");
  109.     printf("|                    LCD Sample Program                     |\n");
  110.     printf("+-----------------------------------------------------------+\n");
  111.     printf("|  Any Dot Display Test                                     |\n");
  112.     printf("+-----------------------------------------------------------+\n");
  113. }

  114. int32_t main(void)
  115. {

  116.         int i=0;
  117.         int j=0;
  118.     SYS_Init();

  119.     UART0_Init();
  120.                        
  121.     /* LCD Initialize */
  122.     LCD_Open(LCD_EXTERNAL_C_TYPE, 4, LCD_BIAS_THIRD, LCD_FREQ_DIV64, LCD_CPVOl_3_3V);

  123.     LCD_EnableDisplay();

  124.     TestItem();
  125.             GPIO_SetMode(PE, BIT6, GPIO_PMD_OUTPUT); // 设置LED开关端口       
  126.                   // 关闭LED
  127.           GPIO_SetMode(PA, BIT3, GPIO_PMD_OUTPUT); // 设置LED开关端口       
  128.                   // 关闭LED
  129.           GPIO_SetMode(PC, BIT8, GPIO_PMD_OUTPUT); // 设置LED开关端口       
  130.                     // 关闭LED
  131.           GPIO_SetMode(PA, BIT12, GPIO_PMD_OUTPUT); // 设置LED开关端口       
  132.                 GPIO_SetMode(PE, BIT3, GPIO_PMD_OUTPUT); // 设置LED开关端口       


  133.                                 PE3=0;
  134.                                 PA3=0;
  135.                                 PC8=0;
  136.                                 PA12=1;
  137.                                
  138.                                
  139.                                
  140.                                 LCD_SetPixel(2,4,1);
  141. //                        for( i=0;i<=4;i++)
  142. //                        for( j=0;j<=39;j++)
  143. //                        {
  144. //                                LCD_SetPixel(i,j,1);
  145. //                        }
  146.     while(1)
  147.     {
  148.                 //        LCD_SetAllPixels(1);       

  149.                        
  150.                         PE6=1;
  151.                         clk_delay(100);

  152.                         PE6=0;
  153.                         clk_delay(100);
  154.     }
  155. }


  156. /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/



 楼主| zzzxiao 发表于 2022-1-26 09:11 | 显示全部楼层
问题找到了,手册上的推荐的电容是0.1uF,但是实际用的时候47nF的是可以正常显示的。可能跟自己的电路有关
mbutterfly 发表于 2022-1-26 12:51 | 显示全部楼层
好奇怪
hi0712 发表于 2022-1-26 18:05 | 显示全部楼层
不上电路图
王栋春 发表于 2022-1-26 22:26 | 显示全部楼层
楼主将电路原理图上传一下,光有代码有些让人摸不着头绪呀。
jasontu 发表于 2022-1-27 09:11 | 显示全部楼层
建议量看看vlcd上面的电压,及d1,d2及com seg上面的脚位看看是不是有被抽电压。
kiwis66 发表于 2022-1-27 09:46 | 显示全部楼层
这种明显是电路的问题
onlycook 发表于 2022-2-9 17:07 来自手机 | 显示全部楼层
电路图看看才知道问题所在啊
skyred 发表于 2022-2-11 14:23 | 显示全部楼层
应该是电路的问题~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

22

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部