极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1720|回复: 2

在家用lgt8f328p的休眠功能做了个表

[复制链接]
发表于 2020-3-17 10:01:42 | 显示全部楼层 |阅读模式
本帖最后由 qingkong 于 2020-3-17 10:05 编辑



只是显示时间的时候可以到3ma左右


这个东西是双主机I2C总线
ESP8266 自己忙自己的,NTP更新了时间后就去睡觉。图片上那个就是它睡着后拍的
我这个没有弘老大的库,因为他那个库没法调lgt8f328p的运行速度

  1. github找 dbuezas lgt8fx/master/package_lgt8fx_index.json
复制代码




ESP8266的就是个NTP表加了个deepsleep,就不上了。。。。

下面是lgt8f328p的代码,上传时选择CPU频率是1MHZ LDO是AMS1117

  1. //使用的库 timerone; Grove 4  Digit Display; Grove - RTC DS1307;
  2. //从DS1307读RTC时间 显示到数码管
  3. //建议使用lg8f328p 这个国产兼容芯,因为这货3.3V也是16MHZ 电压范围是5.5-3V 啥也不用管,直接用18650电池供电就行
  4. /*
  5. Power consumption @ 5v
  6. Clock   Pro mini style w/o power LED  Pro mini style  Nano style
  7. 32MHz  12.7mA  15.0mA  32.6mA
  8. 16MHz  9.2mA   11.5mA  27.8mA
  9. 8MHz   7.1mA   9.4mA   25.4mA
  10. 4MHz   5.9mA   8.2mA   23.3mA
  11. 2MHz   5.3mA   7.6mA   23.4mA
  12. 1MHz   5.0mA   7.3mA   22.8mA

  13. */

  14. /*******************************************************************************/
  15. //#include  <TimerOne.h>
  16. #include <TM1637.h>
  17. #define ON 1
  18. #define OFF 0
  19. #include <DS1307.h>
  20. //#include <WDT.h>
  21. #include <PMU.h>

  22. int8_t TimeDisp[] = { 0x00, 0x00, 0x00, 0x00 };
  23. volatile unsigned char ClockPoint = 1;
  24. //unsigned char Update= ON;
  25. //unsigned char halfsecond = 0;
  26. unsigned char second;
  27. unsigned char minute = 0;
  28. unsigned char hour = 12;

  29. //#define CLK 6 //pins definitions for TM1637 and can be changed to other ports
  30. //#define DIO 7

  31. #define CLK 10 //pins definitions for TM1637 and can be changed to other ports
  32. #define DIO 9
  33. TM1637 tm1637(CLK, DIO);
  34. DS1307 clock1307; //define a object of DS1307 class

  35. void setup() {

  36.   //pinMode(0, OUTPUT);

  37.   // delay to check wdt reset condition
  38.   delay(1000);
  39.   /*
  40.    #if defined(__LGT8FX8P__)
  41.    wdt_enable(WTO_2S);
  42.    #else
  43.    wdt_enable(WTO_512MS);
  44.    #endif
  45.    */

  46.   uint32_t guid = (GUID3 << 24) | (GUID2 << 16) | (GUID1 << 8) | GUID0; // 给guid赋值唯一ID
  47.   // Serial.println(guid); // 串口输出唯一ID
  48.   tm1637.set(BRIGHT_DARKEST); //BRIGHT_TYPICAL = 2,BRIGHT_DARKEST = 0,BRIGHTEST = 7;

  49.   tm1637.init();

  50.   //Timer1.initialize(2*500000);         //timing for 500ms
  51.   // Timer1.attachInterrupt(TimingISR); //declare the interrupt serve routine:TimingISR
  52.   clock1307.begin();
  53.   clock1307.startClock();

  54.    
  55.   ADCSRA = 0; // disable ADC

  56. }
  57. void loop() {
  58.   // put your main code here, to run repeatedly:
  59.   //wdt_reset();
  60.   //digitalToggle(0);

  61. //  delay(1);
  62. //  if (Update == ON) {
  63.   TimingISR();
  64.   TimeUpdate();
  65.   tm1637.display(TimeDisp);

  66.   // }

  67.   /*
  68.    *休眠模式 功能说明
  69.    空闲模式(IDLE) 仅仅关闭内核时钟,其他外设模块正常工作,所有有效中断源均可 以将内核唤醒
  70.    省电模式(Save) 与 DPS0 模式相同,Save 模式为与 LGT8FX8D 保持兼容
  71.    掉电模式(DPS0) 与 Save 模式相同,支持唤醒源包括:
  72.     所有引脚电平变化
  73.     看门狗定时唤醒
  74.     异步模式的 TMR2 唤醒
  75.    掉电模式(DPS1) 关闭所有内外部振荡器, 支持唤醒源包括:
  76.     所有引脚外部电平变化
  77.     外部中断 0/1
  78.     工作于 32K LFRC 的看门狗定时器
  79.    掉电模式(DPS2) 关闭内核电源, 最低功耗模式,支持的唤醒源包括:
  80.     外部复位
  81.     PORTD 引脚电平变化
  82.     LPRC 定时唤醒(128ms/256ms/512ms/1s)
  83.    需要注意,从 DPS2 唤醒的过程与上电复位相同

  84.    PM_IDLE,
  85.    PM_POWERDOWN = 2,
  86.    PM_POFFS1 = 3,
  87.    PM_POFFS0 = 6
  88.    */

  89.   //  ADCSRA = 0; // disable ADC
  90.   PMU.sleep(PM_POWERDOWN, SLEEP_1S);
  91.   //  delay(1000);
  92. }
  93. void TimingISR() {
  94.   //halfsecond++;
  95.   //Update = ON;

  96.   // Serial.println(second);
  97.   ClockPoint = !ClockPoint;

  98.   // if (halfsecond == 2) {
  99.   //   halfsecond = 0;

  100.   // }
  101. }

  102. void printTime() {
  103.   clock1307.getTime();  //delay(100);
  104. //  Serial.print(clock1307.hour, DEC);
  105.   hour = clock1307.hour;
  106. //  Serial.print(":");
  107. //  Serial.print(clock1307.minute, DEC);
  108.   minute = clock1307.minute;
  109. //  Serial.print(":");
  110. //  Serial.print(clock1307.second, DEC);
  111. //  Serial.print("  ");
  112. //  Serial.print(clock1307.month, DEC);
  113. //  Serial.print("/");
  114. //  Serial.print(clock1307.dayOfMonth, DEC);
  115. //  Serial.print("/");
  116. //  Serial.print(clock1307.year + 2000, DEC);
  117. //  Serial.print(" ");
  118. //  Serial.print(clock1307.dayOfMonth);
  119. //  Serial.print("*");
  120. //  switch (clock1307.dayOfWeek) // Friendly printout the weekday
  121. //  {
  122. //  case MON:
  123. //    Serial.print("MON");
  124. //    break;
  125. //  case TUE:
  126. //    Serial.print("TUE");
  127. //    break;
  128. //  case WED:
  129. //    Serial.print("WED");
  130. //    break;
  131. //  case THU:
  132. //    Serial.print("THU");
  133. //    break;
  134. //  case FRI:
  135. //    Serial.print("FRI");
  136. //    break;
  137. //  case SAT:
  138. //    Serial.print("SAT");
  139. //    break;
  140. //  case SUN:
  141. //    Serial.print("SUN");
  142. //    break;
  143. //  }
  144. //  Serial.println(" ");
  145. }
  146. void TimeUpdate(void) {
  147.   if (ClockPoint)
  148.     tm1637.point(POINT_ON);
  149.   else
  150.     tm1637.point(POINT_OFF);
  151.   printTime(); //设置数据 准备显示时间
  152.   // Update = OFF;

  153.   TimeDisp[0] = hour / 10;
  154.   TimeDisp[1] = hour % 10;
  155.   TimeDisp[2] = minute / 10;
  156.   TimeDisp[3] = minute % 10;

  157. }
复制代码



最后。。。。
弘老大OCROBOT的做工的确是很不错的,我当年测试就是用的他的板子
但是 那个也太大了。。。  真到了做个小东西就不方便了

能否做个这种类似arduino mini pro的,然后ldo换成微盟那个me6118a也行啊800ma 静态电流50ua 总是比ams1117 强多了。。。而且还是全国产。。。
体积下来了,很多东西都好用啊,而且没了串口芯片,也能便宜点不是

建议搞3.3V的,这个东西与ESP8266啥的都友善。。。虽然ADC可能受影响。。。
170106yxcbwj26my66mwcu.jpg
回复

使用道具 举报

 楼主| 发表于 2020-3-17 14:11:53 | 显示全部楼层
或者出一个不带LDO的也成啊 控制好体积
回复 支持 反对

使用道具 举报

发表于 2020-3-19 23:04:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2020-7-13 20:52 , Processed in 0.050626 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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