PSoC 4000S のディープスリープモードからの長時間定期間隔ウェイクアップ

Tip / ログイン to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
ToWa_4096566
Level 1
Level 1
First question asked First reply posted

PSoC 4000S Prototyping Kit でディープスリープモード以下の低消費電力モードにして

1~2時間程度の間隔で数秒~数十秒程度アクティブモードで処理を実行したいのですが、実現する方法はありますか?

よろしくお願いいたします。

0 件の賞賛
1 解決策
RyanZhao
Moderator
Moderator
Moderator
250 sign-ins First question asked 750 replies posted

Wakatsuki-san,

PSoC 4000Sのディープスリープモードに、WDTだけはアクティプ です。PSoC 4000S WDTの一番長い周期は2sです。

1~2時間程度の間隔でければ.... I2Cマスタを使用する場合は、I2Cウェイクアップをお勧めします。

WDTのISRに、ユーザーカウンタ(グローバル ヴァリアブル)を使用するをお勧めします。

For example:

/*************************Pseudo code**********************************/

WDT_ISR()

{

     /* This is NOT TRUE 1~2 hour sleep then wake up, it is just sleep-wakeup-sleep-wakeup-sleep-wakeup...for 1~2 hours */    

     WDT_Clear();

     Soft_Counter++;

}

...

...

main()

{

     ...

     for(;;)

     {

          ...

          if (Soft_Counter>=N)

          {

               Soft_Counter = 0;

               /*Do user task*/

          }

          else

          {

               /* Enter Deep Sleep */

          }

          ...

     }

     ...

}

/*************************Pseudo code**********************************/

よろしくお願いいたします。

Ryan

元の投稿で解決策を見る

0 件の賞賛
2 返答(返信)
RyanZhao
Moderator
Moderator
Moderator
250 sign-ins First question asked 750 replies posted

Wakatsuki-san,

PSoC 4000Sのディープスリープモードに、WDTだけはアクティプ です。PSoC 4000S WDTの一番長い周期は2sです。

1~2時間程度の間隔でければ.... I2Cマスタを使用する場合は、I2Cウェイクアップをお勧めします。

WDTのISRに、ユーザーカウンタ(グローバル ヴァリアブル)を使用するをお勧めします。

For example:

/*************************Pseudo code**********************************/

WDT_ISR()

{

     /* This is NOT TRUE 1~2 hour sleep then wake up, it is just sleep-wakeup-sleep-wakeup-sleep-wakeup...for 1~2 hours */    

     WDT_Clear();

     Soft_Counter++;

}

...

...

main()

{

     ...

     for(;;)

     {

          ...

          if (Soft_Counter>=N)

          {

               Soft_Counter = 0;

               /*Do user task*/

          }

          else

          {

               /* Enter Deep Sleep */

          }

          ...

     }

     ...

}

/*************************Pseudo code**********************************/

よろしくお願いいたします。

Ryan

0 件の賞賛

RyanZ_36 様

回答いただきありがとうございます。

方法について了解しました。

グローバル変数のカウンタを使って実現する方法を試してみたいと思います。

0 件の賞賛