會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客



(1) 2 »


關於Sleepmode&WDT問題
新會員
註冊日期:
2016/09/23 14:10
所屬群組:
註冊會員
文章: 15
等級: 2; EXP: 62
HP : 0 / 40
MP : 5 / 119
離線
各位好
這邊有個關於使用16F1829撰寫SleepMode 及 Watchdog問題想問各位
我這邊寫個很簡單的程式
當我數值還未到一定值時
先進入Sleep mode 接者等待watchdog打開 這都是OK的
但是我直到數值達到一定值時
成功進入我要的程式階段(假設成功就會打開LED這是OK的)
我在進入程式階段這邊也寫了關閉Watchdog動作
可是發現疑似沒有效果
反而會一值重置MCU
感覺好像是沒有關閉到Watchdog似的...
我把這部分程式貼給各位看
不好意思 麻煩各為了...


poLED = 0;//Close LED
WDTCON = 0b00000001; //Enable WDT
while(1)
{
if(m_value == 0xFF)
{
CLRWDT();
poLED = 1; //Open LED
WDTCON = 0b00000000; //Disable WDT
}
else
{
m_value++;;
CLRWDT();
SLEEP();
CLRWDT();
}
}

6月08日 14:16:46
轉換PDF檔 列印


Re: 關於Sleepmode&WDT問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14102
等級: 72; EXP: 43
HP : 1071 / 1785
MP : 4700 / 69950
離線
CLRWDT( ) 不是關閉 WDT 的功能,她是清除 WDT 計數器,一般都是要在一定的時間內清除的。

WDT 要在程式裡不斷的去清除牠的計數器,要不然牠就咬你一口,將系統重置。

6月08日 17:56:18
轉換PDF檔 列印


Re: 關於Sleepmode&WDT問題
新會員
註冊日期:
2016/09/23 14:10
所屬群組:
註冊會員
文章: 15
等級: 2; EXP: 62
HP : 0 / 40
MP : 5 / 119
離線
Ryang 大大您好
謝謝您的上面回答
真心感謝
關於您說的CLRWDT這點我知道唷
只是我想說要把WDT關掉
有甚麼辦法可以解決
因為一直開下去 沒有做CLRWDT 會導致系統重置

6月08日 18:09:46
轉換PDF檔 列印


Re: 關於Sleepmode&WDT問題
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 937
等級: 27; EXP: 24
HP : 0 / 656
MP : 312 / 19761
離線
我猜一下....

程式, 可能是 這樣跑的...

0. power on
1. MCU RESET
2. m_value 被初始化(=0)
3. sleep 休眠
4. watchdog 重開機/重置
又回到 1. RESET

所以 m_value可能 都不會到 0xFF

以上 猜想,可能有誤...

6月08日 18:11:59
_________________
程式是
依照寫出來(的code),跑出結果
不是依照你想出來的,得到結果

先有需求規格 後有解決方案
轉換PDF檔 列印


Re: 關於Sleepmode&WDT問題
新會員
註冊日期:
2016/09/23 14:10
所屬群組:
註冊會員
文章: 15
等級: 2; EXP: 62
HP : 0 / 40
MP : 5 / 119
離線
jason680 大大您好
是的
其實這程式很簡單
就是每次執行m_value+1時
會讓他休眠 並且藉由WDT喚醒
一直到m_value = 0xFF時 就不再做sleepmode動作
可是因為WDT持續在運作關係
所以會導致Reset動作 因此我才想說要怎麼關掉WDT
這隻程式是測試sleepmode及WDT的運用
所以基本上就是想說怎麼關掉WDT才是一個重點所在
謝謝您的回答><

6月08日 18:31:35
轉換PDF檔 列印


Re: 關於Sleepmode&WDT問題
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 937
等級: 27; EXP: 24
HP : 0 / 656
MP : 312 / 19761
離線
試試看這樣宣告變數
加 persistent 或 __persistent
WDT的RESET 不會被初始化...

static persistent int m_value;

網路上看到的(沒驗證過)...

6月08日 23:13:43
_________________
程式是
依照寫出來(的code),跑出結果
不是依照你想出來的,得到結果

先有需求規格 後有解決方案
轉換PDF檔 列印


Re: 關於Sleepmode&WDT問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14102
等級: 72; EXP: 43
HP : 1071 / 1785
MP : 4700 / 69950
離線
剛看下 PIC16F1829 的 Data Sheet. 這元件的 WDT 架構不同於舊的 PIC16Fxxx 的設計。

在 COnfiguration Words 有 WDTE 位元的控制,參考一下貼圖一,WDTE<1:0> 燒成 01 後就可以用程式控制 WDT 了。

參考貼圖二,在 "WDTCON: WATCHDOG TIMER CONTROL REGISTER" 裡有一控制位元 "SWDTEN" 就可以 WDT 的開啟或關閉。

附加檔案:



jpg  擷取.JPG (27.46 KB)
16_593a108a594e8.jpg 830X160 px

jpg  擷取1.jpg (45.05 KB)
16_593a1093a908c.jpg 784X287 px

6月09日 11:05:59
轉換PDF檔 列印


Re: 關於Sleepmode&WDT問題
新會員
註冊日期:
2016/09/23 14:10
所屬群組:
註冊會員
文章: 15
等級: 2; EXP: 62
HP : 0 / 40
MP : 5 / 119
離線
謝謝Ryang大大
當初我把這東西給看錯了(目小)
感謝您提供的資訊 謝謝您

6月13日 19:16:54
轉換PDF檔 列印


Re: 關於Sleepmode&WDT問題
初級會員
註冊日期:
6月19日 12:25:14
所屬群組:
註冊會員
文章: 26
等級: 3; EXP: 83
HP : 0 / 70
MP : 8 / 55
離線
請問
如何設定WDTE<1:0>=01
要在主程式打
WDTE1=0;
WDTE0=1;
?

7月25日 08:54:47
轉換PDF檔 列印


Re: 關於Sleepmode&WDT問題
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14102
等級: 72; EXP: 43
HP : 1071 / 1785
MP : 4700 / 69950
離線
WDTE 這兩個位元是在 Configuration Words 裡的,只能在燒錄時設定。設定方式請參考以一下教育訓練 "XC8T v1.0 New! " 裡面的說明。(Page 61 開始)

附加檔案:



jpg  擷取.JPG (58.79 KB)
16_5978880db2e31.jpg 766X506 px

7月26日 20:13:45
轉換PDF檔 列印



(1) 2 »



無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
2017 Summer Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project