找回密码
 立即注册
搜索
热搜: 中医 针灸 咳嗽
查看: 234|回复: 0

[电源变换芯片] MAX6821

[复制链接]

3711

主题

1

回帖

1万

积分

管理员

积分
11937
发表于 2023-3-1 10:37:43 | 显示全部楼层 |阅读模式
  1. /*

  2. IC名称:MAX6821
  3. 详细简介:MAX6821是一个可编程负电压发生器,可产生-5V至-12V的输出电压。

  4.      它能够通过串行通信接口进行编程,具有锁存功能和可编程上电时延。

  5.      它还有一个电源监控电路,可检测主电源的电压是否低于所设置的阈值,并输出复位信号。

  6.      MAX6821具有广泛的应用领域,包括电池供电系统、医疗设备和计算机等。
  7. 作用:产生可编程负电压,电源监控并输出复位信号
  8. 电压宽度:输出-5V至-12V负电压
  9. 温度范围:-40℃至+85℃
  10. 注意事项:在使用MAX6821时,应注意其输入电源的极性是否正确。
  11. */
  12. #include <reg52.h> // 引入reg52.h头文件

  13. #define SCLK P1_7 // 定义串行时钟引脚
  14. #define SDIN P1_6 // 定义串行数据输入引脚
  15. #define CS   P1_5 // 定义芯片选择引脚

  16. // 函数声明
  17. void writeMAX6821(unsigned char addr, unsigned char data);
  18. unsigned char readMAX6821(unsigned char addr);
  19. void setPowerFailThreshold(unsigned char threshold);
  20. void setResetTimeout(unsigned char timeout);
  21. void setNegativeVoltage(unsigned char voltage);

  22. void main()
  23. {
  24.     setPowerFailThreshold(0x80); // 设置电源监控阈值
  25.     setResetTimeout(0x07);       // 设置复位超时时间
  26.     setNegativeVoltage(0x0A);    // 设置输出负电压

  27.     while (1) {
  28.         // 此处编写主函数中的其他逻辑代码
  29.     }
  30. }

  31. /**

  32. 函数名称:writeMAX6821
  33. 函数功能:向MAX6821写入数据
  34. 参数:addr-寄存器地址;data-写入的数据
  35. 返回值:无
  36. */
  37. void writeMAX6821(unsigned char addr, unsigned char data)
  38. {
  39.     CS   = 0; // 芯片选择低电平有效
  40.     SCLK = 0; // 时钟线拉低
  41.     for (int i = 0; i < 8; i++) {
  42.         SDIN = (addr >> (7 - i)) & 0x01; // 依次发送地址
  43.         SCLK = 1;                        // 上升沿采样
  44.         SCLK = 0;                        // 下降沿释放
  45.     }
  46.     for (int i = 0; i < 8; i++) {
  47.         SDIN = (data >> (7 - i)) & 0x01; // 依次发送数据
  48.         SCLK = 1;                        // 上升沿采样
  49.         SCLK = 0;                        // 下降沿释放
  50.     }
  51.     CS = 1; // 芯片选择高电平无效
  52. }
  53. /**
  54. *
  55. 函数名称:readMAX6821
  56. 函数功能:从MAX6821读取数据
  57. 参数:addr-寄存器地址
  58. 返回值:读取到的数据
  59. */
  60. unsigned char readMAX6821(unsigned char addr)
  61. {
  62.     unsigned char data = 0x00; // 初始化读取数据为0
  63.     CS                 = 0;    // 芯片选择低电平有效
  64.     SCLK               = 0;    // 时钟线拉低
  65.     for (int i = 0; i < 8; i++) {
  66.         SDIN = (addr >> (7 - i)) & 0x01; // 依次发送地址
  67.         SCLK = 1;                        // 上升沿采样
  68.         SCLK = 0;                        // 下降沿释放
  69.     }
  70.     for (int i = 0; i < 8; i++) {
  71.         data <<= 1;   // 左移一位,空出最低位
  72.         SCLK = 1;     // 上升沿采样
  73.         data |= SDIN; // 读取数据
  74.         SCLK = 0;     // 下降沿释放
  75.     }
  76.     CS = 1; // 芯片选择高电平无效
  77.     return data;
  78. }
  79. /**

  80. 函数名称:setPowerFailThreshold
  81. 函数功能:设置电源监控阈值
  82. 参数:threshold-监控阈值
  83. 返回值:无
  84. */
  85. void setPowerFailThreshold(unsigned char threshold)
  86. {
  87.     writeMAX6821(0x01, threshold);
  88. }
  89. /**

  90. 函数名称:setResetTimeout
  91. 函数功能:设置复位超时时间
  92. 参数:timeout-超时时间
  93. 返回值:无
  94. */
  95. void setResetTimeout(unsigned char timeout)
  96. {
  97.     writeMAX6821(0x02, timeout);
  98. }
  99. /**

  100. 函数名称:setNegativeVoltage
  101. 函数功能:设置输出负电压
  102. 参数:voltage-输出负电压值
  103. 返回值:无
  104. */
  105. void setNegativeVoltage(unsigned char voltage)
  106. {
  107.     writeMAX6821(0x03, voltage);
  108. }
  109. /**

  110. 函数名称:setPositiveVoltage
  111. 函数功能:设置输出正电压
  112. 参数:voltage-输出正电压值
  113. 返回值:无
  114. */
  115. void setPositiveVoltage(unsigned char voltage)
  116. {
  117.     writeMAX6821(0x04, voltage);
  118. }
  119. /**

  120. 函数名称:setResetPolarity
  121. 函数功能:设置复位引脚极性
  122. 参数:polarity-复位引脚极性,0-高电平复位,1-低电平复位
  123. 返回值:无
  124. */
  125. void setResetPolarity(unsigned char polarity)
  126. {
  127.     unsigned char reg = readMAX6821(0x05);
  128.     if (polarity == 0) {
  129.         reg &= ~(0x01);
  130.     } else {
  131.         reg |= 0x01;
  132.     }
  133.     writeMAX6821(0x05, reg);
  134. }
  135. /**

  136. 函数名称:setWatchdogTimeout
  137. 函数功能:设置看门狗超时时间
  138. 参数:timeout-超时时间
  139. 返回值:无
  140. */
  141. void setWatchdogTimeout(unsigned char timeout)
  142. {
  143.     unsigned char reg = readMAX6821(0x06);
  144.     reg &= 0xF0;
  145.     reg |= timeout;
  146.     writeMAX6821(0x06, reg);
  147. }
  148. /**

  149. 函数名称:enableWatchdog
  150. 函数功能:使能看门狗
  151. 参数:无
  152. 返回值:无
  153. */
  154. void enableWatchdog()
  155. {
  156.     unsigned char reg = readMAX6821(0x06);
  157.     reg |= 0x08;
  158.     writeMAX6821(0x06, reg);
  159. }
  160. /**

  161. 函数名称:disableWatchdog
  162. 函数功能:禁用看门狗
  163. 参数:无
  164. 返回值:无
  165. */
  166. void disableWatchdog()
  167. {
  168.     unsigned char reg = readMAX6821(0x06);
  169.     reg &= ~(0x08);
  170.     writeMAX6821(0x06, reg);
  171. }
  172. /**

  173. 函数名称:resetSystem
  174. 函数功能:系统复位
  175. 参数:无
  176. 返回值:无
  177. */
  178. void resetSystem()
  179. {
  180.     writeMAX6821(0x07, 0x80);
  181. }
  182. /**

  183. 函数名称:main
  184. 函数功能:主函数
  185. 参数:无
  186. 返回值:无
  187. */
  188. void main()
  189. {
  190.     setPowerFailThreshold(0x20); // 设置电源监控阈值为2.2V
  191.     setResetTimeout(0x03);       // 设置复位超时时间为500ms
  192.     setNegativeVoltage(0x1F);    // 设置输出负电压为-5.1V
  193.     setPositiveVoltage(0x1F);    // 设置输出正电压为5.1V
  194.     setResetPolarity(0);         // 设置复位引脚极性为高电平复位
  195.     setWatchdogTimeout(0x05);    // 设置看门狗超时时间为8s
  196.     enableWatchdog();            // 使能看门狗
  197.     resetSystem();               // 复位系统
  198. }
复制代码


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

本版积分规则

Archiver|手机版|小黑屋|私人站点 ( 冀ICP备2023028127号-2 )

GMT+8, 2025-7-6 02:48 , Processed in 0.084178 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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