查看: 2610|回复: 0

[EVAL-ADXL362Z-DB]Elink 电子水墨屏2程序实现

[复制链接]
  • TA的每日心情
    奋斗
    2023-7-8 16:17
  • 签到天数: 971 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2015-6-30 09:16:00 | 显示全部楼层 |阅读模式
    分享到:
    The DA8521 is a serial-input, 64-output, cascadable, bistable electronic paper display driver.
    Display data is serially clocked into a 64-bit shift register. When the shift register is loaded, the data is parallel-latched into a 64-bit latch register. The outputs of this register drive the high voltage display drivers
    Data on the DATAIN input is serially clocked into the shift register on each rising edge of CLKIN.
    Data is clocked into the device MSB first, i.e. the first clocked data bit will be DD63.
    串行输入,64位输出,传输是MSB方式,位移传输  接收数据由DATDIN->DD0->....->DD63->DATAOUT  可以理解为端口扩展。
    程序上就按照 时序图来编写即可
    1.png
    在硬件上分为 三种模式
    单独
    2.png
    多芯片,单独控制
    3.jpg
    多芯片,级联控制
    4.jpg
    还有一个要注意的问题是 传输是MSB方式,DA8521 在DD00~DD63 与 水墨屏引脚注意逆序,方便操作

    实例例程
    1. #include "iodefine.h"

    2. #define SEG_TABLE1_TopElectrode      ((uint32)0x00000001)
    3. #define SEG_TABLE1_FieldbBackgroudn  ((uint32)0x00000002)
    4. #define SEG_TABLE1_UnitDegree        ((uint32)0x00000004)
    5. #define SEG_TABLE1_UnitmA            ((uint32)0x00000008)
    6. #define SEG_TABLE1_UnituA            ((uint32)0x00000010)
    7. #define SEG_TABLE1_NumB              ((uint32)0x00000FE0)
    8. #define SEG_TABLE1_NumB_Offset       ((uint8)(6-1))
    9. #define SEG_TABLE1_NumC              ((uint32)0x00001000)
    10. #define SEG_TABLE1_NumD              ((uint32)0x000FE000)
    11. #define SEG_TABLE1_NumD_Offset       ((uint8)(14-1))
    12. #define SEG_TABLE1_NumE              ((uint32)0x00100000)
    13. #define SEG_TABLE1_NumF              ((uint32)0x0FE00000)
    14. #define SEG_TABLE1_NumF_Offset       ((uint8)(22-1))
    15. #define SEG_TABLE1_LogBench          ((uint32)0x10000000)
    16. #define SEG_TABLE1_LogHumanWalk      ((uint32)0x20000000)
    17. #define SEG_TABLE1_LogAngleGauge     ((uint32)0x40000000)
    18. #define SEG_TABLE1_LogHandHold       ((uint32)0x80000000)

    19. #define SEG_TABLE2_LogHumanRun       ((uint32)0x00000001)
    20. #define SEG_TABLE2_LogBattery        ((uint32)0x00000002)
    21. #define SEG_TABLE2_LogPower          ((uint32)0x00000004)
    22. #define SEG_TABLE2_LogEink           ((uint32)0x00000008)
    23. /********************************************************/

    24. #define ED_STANDBYB_HIGH     {P3_bit.no1 = 1;}    //Config ED_STANDBYB pin high
    25. #define ED_STANDBYB_LOW     {P3_bit.no1 = 0;}    //Config ED_STANDBYB pin low
    26. #define ED_BLANK_HIGH         {P3_bit.no0 = 1;}    //Config ED_BLANK pin high
    27. #define ED_BLANK_LOW         {P3_bit.no0 = 0;}    //Config ED_BLANK pin low
    28. #define ED_CS_HIGH         {P0_bit.no5 = 1;}    //Config ED_CS pin high
    29. #define ED_CS_LOW         {P0_bit.no5 = 0;}    //Config ED_CS pin low
    30. #define ED_LATCH_HIGH         {P0_bit.no6 = 1;}    //Config ED_LATCH pin high
    31. #define ED_LATCH_LOW         {P0_bit.no6 = 0;}    //Config ED_LATCH pin low
    32. #define ED_CLKIN_HIGH         {P7_bit.no0 = 1;}    //Config ED_CLKIN pin high
    33. #define ED_CLKIN_LOW         {P7_bit.no0 = 0;}    //Config ED_CLKIN pin low
    34. #define ED_OUTPUT_HIGH         {P7_bit.no2 = 1;}    //Config ED_DATAIN pin high   
    35. #define ED_OUTPUT_LOW         {P7_bit.no2 = 0;}    //Config ED_DATAIN pin low   
    36. void einkpin_outhigh(void)
    37. {
    38.     ED_CLKIN_LOW;        //Config ED_CLKIN pin low
    39.     ED_OUTPUT_HIGH;        //Config the corresponding eink pin high
    40.     ED_CLKIN_HIGH;        //Config ED_CLKIN pin high, clock pulse
    41. }
    42. void einkpin_outlow(void)
    43. {
    44.     ED_CLKIN_LOW;        //Config ED_CLKIN pin low
    45.     ED_OUTPUT_LOW;        //Config the corresponding eink pin low
    46.     ED_CLKIN_HIGH;        //Config ED_CLKIN pin high, clock pulse
    47. }
    48. void eink_latchoutput(void)
    49. {
    50.     uint32_t mTemp = 0;
    51.     ED_CS_HIGH;        //Config ED_CS pin high
    52.     ED_LATCH_HIGH;        //Config ED_LATCH pin high
    53.     NOP();
    54.     NOP();
    55.     ED_LATCH_LOW;        //Config ED_LATCH pin low
    56.     ED_CS_LOW;        //Config ED_CS pin low
    57.     ED_BLANK_LOW;        //Config ED_BLANK pin low
    58.     for(mTemp = 0; mTemp<65530; mTemp++) {
    59.         NOP();
    60.     }
    61.     ED_BLANK_HIGH;        //Config ED_BLANK pin high
    62.     ED_CLKIN_LOW;        //Config ED_CLKIN pin low
    63. }

    64. void eink_globalupdate_black(void)
    65. {
    66.     uint32_t mTemp = 0;

    67.     //ED_STANDBYB_HIGH;    //Config ED_STANDBYB pin high, turn on eink driver

    68.     einkpin_outlow();    //Config pin1 of eink low
    69.     for (mTemp=2; mTemp<=64; mTemp++) {
    70.         einkpin_outhigh();//Config all the other 63 pins output of DA8521 high
    71.     }
    72.     eink_latchoutput();

    73.     //ED_STANDBYB_LOW;    //Config ED_STANDBYB pin low, turn off eink driver
    74. }
    75. void eink_globalupdate_white(void)
    76. {
    77.     uint32_t mTemp = 0;

    78.     //ED_STANDBYB_HIGH;    //Config ED_STANDBYB pin high, turn on eink driver

    79.     einkpin_outhigh();    //Config pin1 of eink high

    80.     for (mTemp=2; mTemp<=64; mTemp++) {
    81.         einkpin_outlow();//Config all the other 63 pins output of DA8521 low
    82.     }
    83.     eink_latchoutput();

    84.     //ED_STANDBYB_LOW;    //Config ED_STANDBYB pin low, turn off eink driver
    85. }

    86. void elink_writeOneData(uint32_t ulData)
    87. {
    88.     uint32_t ulTemp = 0x80000000;
    89.     uint8_t  ucTemp = 0;
    90.     for(ucTemp = 32,ulTemp = (uint32_t)0x00000001; ucTemp>0; ucTemp--) {
    91.         if( (ulData&ulTemp)==ulTemp ) {
    92.             einkpin_outhigh();
    93.         } else {
    94.             einkpin_outlow();
    95.         }
    96.         ulTemp=ulTemp<<1;
    97.     }
    98. }
    99. void einkWriteDate(uint32 ulDataLow, uint32 ulDataHigt)
    100. {

    101.     ED_STANDBYB_HIGH;    //Config ED_STANDBYB pin high, turn on eink driver
    102.     //eink_globalupdate_black();//low ->high
    103.     //elink_writeOneData((~SEG_TABLE1_TopElectrode));
    104.     //elink_writeOneData(0xffffffff);
    105.     elink_writeOneData(((ulDataLow)|SEG_TABLE1_TopElectrode)&(~(SEG_TABLE1_FieldbBackgroudn)));
    106.     elink_writeOneData(ulDataHigt);
    107.     eink_latchoutput();

    108.     //eink_globalupdate_white();//high->low
    109.     //elink_writeOneData(SEG_TABLE1_TopElectrode);
    110.     //elink_writeOneData( (uint32)0 );
    111.     elink_writeOneData((ulDataLow)|(SEG_TABLE1_TopElectrode));
    112.     elink_writeOneData(ulDataHigt);
    113.     eink_latchoutput();

    114.     elink_writeOneData(ulDataLow&(~(SEG_TABLE1_FieldbBackgroudn|SEG_TABLE1_TopElectrode)));
    115.     elink_writeOneData(ulDataHigt);
    116.     eink_latchoutput();

    117.     ED_STANDBYB_LOW;    //Config ED_STANDBYB pin low, turn off eink driver
    118. }
    119. void einkWriteDate(uint32 ulDataLow, uint32 ulDataHigt)
    120. {

    121.     ED_STANDBYB_HIGH;    //Config ED_STANDBYB pin high, turn on eink driver
    122.     //eink_globalupdate_black();//low ->high
    123.     //elink_writeOneData((~SEG_TABLE1_TopElectrode));
    124.     //elink_writeOneData(0xffffffff);
    125.     elink_writeOneData(((ulDataLow)|SEG_TABLE1_TopElectrode)&(~(SEG_TABLE1_FieldbBackgroudn)));
    126.     elink_writeOneData(ulDataHigt);
    127.     eink_latchoutput();

    128.     //eink_globalupdate_white();//high->low
    129.     //elink_writeOneData(SEG_TABLE1_TopElectrode);
    130.     //elink_writeOneData( (uint32)0 );
    131.     elink_writeOneData((ulDataLow)|(SEG_TABLE1_TopElectrode));
    132.     elink_writeOneData(ulDataHigt);
    133.     eink_latchoutput();

    134.     elink_writeOneData(ulDataLow&(~(SEG_TABLE1_FieldbBackgroudn|SEG_TABLE1_TopElectrode)));
    135.     elink_writeOneData(ulDataHigt);
    136.     eink_latchoutput();

    137.     ED_STANDBYB_LOW;    //Config ED_STANDBYB pin low, turn off eink driver
    138. }
    139. void elink_Init(void)
    140. {
    141.     ED_STANDBYB_HIGH;    //Config ED_STANDBYB pin high, turn on eink driver

    142.     ED_BLANK_HIGH;        //Config ED_BLANK pin high
    143.     ED_CS_LOW;        //Config ED_CS pin low
    144.     ED_LATCH_LOW;        //Config ED_LATCH pin low
    145.     ED_CLKIN_LOW;        //Config ED_CLKIN pin low


    146.     eink_globalupdate_black();
    147.     eink_globalupdate_white();
    148.     //elink_power();
    149.     einkWriteDate(SEG_TABLE1_UnitDegree|SEG_TABLE1_LogAngleGauge , SEG_TABLE2_LogPower);

    150.     ED_STANDBYB_LOW;    //Config ED_STANDBYB pin low, turn off eink driver
    151. }
    复制代码
    应用过程中还要注意一个问题是,水墨屏是一个连续渐变的过程,所以要连续出现几次才能更新显示,而初始时不受之约限

    回复

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-3-29 16:24 , Processed in 0.111894 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.