<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一個軟硬件開源的低功耗時鐘項目

          共 6847字,需瀏覽 14分鐘

           ·

          2024-05-21 07:33


                    

          鏈接:https://www.cnblogs

          這是一款基于 AVR128DA48 的超低功耗 LCD 時鐘,能夠使用 CR2032 紐扣電池或太陽能電池運行三年以上:


          它使用 AVR128DA48 的片上溫度傳感器,用 ADC 讀取其自身的電源電壓。還有一個 I2C 接口,你可以連接一個外部傳感器,如濕度傳感器。

          介紹

          盡管LCD液晶顯示是相對較舊的技術(shù),但與新型顯示器相比,它們?nèi)跃哂卸囗梼?yōu)勢,包括低功耗、低成本和可讀性。

          1.硬件電路
          LCD 時鐘的電路:
          基于 AVR128DA48單片機


          LCD顯示
          LCD顯示器為四位七段靜態(tài)LCD,40引腳,可顯示溫濕度,LCD 顯示器安裝在電路板的正面,元件在背面。

          MCU處理器
          該處理器是采用 TQFP-48 封裝的 AVR128DA48,但該 PCB 可與一系列其他 48 引腳處理器配合使用,比如選擇內(nèi)存容量更低、價格更低的一些MCU代替。

          電池(電源)
          這里采用CR2032 或類似電池為其供電,或者使用太陽能電池,附加超級電容來供電:

          I2C接口
          為方便擴展,這里添加了I2C接口,這里可以添加溫濕度傳感器,或者其他I2C從設(shè)備。

          源碼

          這里先分享一些主要源碼內(nèi)容,最后提供源碼鏈接。

          1.IO配置
          void PortSetup () {  for (int p=0; p<4; p++) Digit[p]->DIR = 0xFF;       // All pins outputs  PORTE.DIR = PIN0_bm | PIN1_bm;                      // COMs outputs, PE0 and PE1  PORTF.DIR = PIN5_bm | PIN4_bm;                      // 1A, colon}
          2.時鐘
          這里節(jié)省成本,并非使用時鐘芯片或模塊,用單片機定時器計數(shù)實現(xiàn)時鐘的功能。

          利用定時器中斷實現(xiàn)時鐘計數(shù)、更新:
          ISR(RTC_PIT_vect) {  static uint8_t cycles = 0;  static unsigned long halfsecs;  RTC.PITINTFLAGS = RTC_PI_bm;                        // Clear interrupt flag  // Toggle segments  for (int p=0; p<4; p++) Digit[p]->OUTTGL = 0xFF;    // Toggle all PORTA,B,C,D pins  PORTE.OUTTGL = PIN0_bm | PIN1_bm;                   // Toggle COMs, PE0 and PE1  PORTF.OUTTGL = PIN5_bm | PIN4_bm;                   // Toggle segment 1A, Colon
          cycles++; if (cycles < 32) return; cycles = 0;
          // Update time halfsecs = (halfsecs+1) % 172800; // 24 hours uint8_t ticks = halfsecs % 120; // Half-second ticks if (MinsButton()) halfsecs = ((halfsecs/7200)*60 + (halfsecs/120 + 1)%60)*120; if (HoursButton()) halfsecs = halfsecs + 7200;
          if (MinsButton() || HoursButton() || ticks < 108) DisplayTime(halfsecs); else if (ticks == 108) DisplayVoltage(); else if (ticks == 114) DisplayTemp();}

          3.顯示時間
          LCD顯示部分就LCD有關(guān):
          void DisplayTime (unsigned long halfsecs) {  uint8_t minutes = (halfsecs / 120) % 60;  #ifdef TWELVEHOUR  uint8_t hours = (halfsecs / 7200) % 12 + 1;  #else  uint8_t hours = (halfsecs / 7200) % 24;  #endif  Digit[0]->OUT = Char[hours/10];  Digit[1]->OUT = Char[hours%10];  Digit[2]->OUT = Char[minutes/10];  uint8_t units = Char[minutes%10];  Digit[3]->OUT = units;  uint8_t colon = (halfsecs & 1)<<4;                  // Toggle colon at 1Hz     PORTF.OUT = (units>>1 & PIN5_bm) | colon;}

          4.ADC采集溫度
          這都是操作寄存器實現(xiàn)的功能:
          void DisplayVoltage () {  ADC0.MUXPOS = ADC_MUXPOS_DACREF0_gc;                // Measure DACREF0  ADC0.CTRLA = ADC_ENABLE_bm;                         // Single, 12-bit, left adjusted  ADC0.COMMAND = ADC_STCONV_bm;                       // Start conversion  while (ADC0.COMMAND & ADC_STCONV_bm);               // Wait for completion  uint16_t adc_reading = ADC0.RES;                    // ADC conversion result  uint16_t voltage = adc_reading/50;  ADC0.CTRLA = 0;                                     // Disable ADC
          // Display it Digit[0]->OUT = Char[Space]; Digit[1]->OUT = Char[voltage/10] | 0x80; // Decimal point Digit[2]->OUT = Char[voltage%10]; uint8_t units = Char[Vee]; Digit[3]->OUT = units; PORTF.OUT = (units>>1 & PIN5_bm); // No colon}
          5.功耗問題
          做這種產(chǎn)品,低功耗難度最大(做過低功耗的同學(xué)才能理解這種難度)

          博主做了一個測試,在不同時鐘頻率下的功耗對比:
          時鐘頻率
          24MHz
          12MHz
          4MHz
          1MHz
          能量消耗
          9.5μA
          10.7μA
          11.3μA
          12.8μA

          看到這測試結(jié)果,你肯定會感到疑惑:頻率越低功耗怎么越大?

          這里主要是測試平均功耗,頻率越低,代碼執(zhí)行時間越長,其功耗相對更高

          使用電池時:
          CR2032 紐扣電池的典型容量為 225 mAh,因此功耗 7.3μA 時,時鐘的預(yù)期電池壽命約為 (225/0.0073/24/365)3.5 年。

          使用太陽能時:
          使用 0.47F 超級電容器,你可以理解為 1 秒內(nèi)的電流為 0.47A。可以算出工作時間:(0.47/7.3x10 ?6 /60/60)大約 18 小時,這就能足以讓時鐘在白天使用太陽能電池供電過夜。


          春招已經(jīng)開始啦,大家如果不做好充足準(zhǔn)備的話,春招很難找到好工作。


          送大家一份就業(yè)大禮包,大家可以突擊一下春招,找個好工作!


          瀏覽 62
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩无码一区二区网站 | 怡春院视频 | 日韩AV中文字幕大香 | 精品的ai操逼网 精品豆花视频在线 | 黄色AV网探花 |