• slider image 442
  • slider image 477
  • slider image 479
  • slider image 480
  • slider image 481
  • slider image 482
:::


Browsing this Thread:   1 Anonymous Users




« 1 (2) 3 4 »


Re: Reset 幾次後程式會被改掉
#26
資深會員
資深會員


查看用戶資訊
可以請問BusyXLCD()的內容嗎?
謝謝。
您的RD0是接到LCD的哪裡呢?

參照:

Zenith 寫道:
非常感謝Eigen的指點,我在ResetLCD()前加一行看LED狀態的程式,沒想到問題消失了,應該是如Eigen所言,LCD尚未Ready,加一行程式剛好等候LCD完成Reset,感謝各位先進提供的意見,真的學到不少知識。
TRISB=0xff;
TRISD=0;
TRISB=0;
PORTB=0;
PORTD=0x01; <--增加此行
ResetLCD();
OpenXLCD(FOUR_BIT & LINES_5X7);

發表於: 2009/10/7 12:09
我相信解決問題的方法不只一種,所以我在回答同好的問題時或者提出與主題不同的方案,
請不要以此做為攻擊的目標,畢竟我也只是想和大家討論如何解決問題而已…
解決問題最重要,.....
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Reset 幾次後程式會被改掉
#25
高級會員
高級會員


查看用戶資訊
非常感謝Eigen的指點,我在ResetLCD()前加一行看LED狀態的程式,沒想到問題消失了,應該是如Eigen所言,LCD尚未Ready,加一行程式剛好等候LCD完成Reset,感謝各位先進提供的意見,真的學到不少知識。
TRISB=0xff;
TRISD=0;
TRISB=0;
PORTB=0;
PORTD=0x01; <--增加此行
ResetLCD();
OpenXLCD(FOUR_BIT & LINES_5X7);

發表於: 2009/10/7 12:01
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Reset 幾次後程式會被改掉
#24
資深會員
資深會員


查看用戶資訊
EESequentialRead 讀不到資料會怎樣?

while(BusyXLCD());
lcd 一直 busy 會怎樣?

這些都會造成 無窮迴圈,造成看似當掉的情況

在這兩個 程序前加個led 就知道當在那了

發表於: 2009/10/6 22:29
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Reset 幾次後程式會被改掉
#23
資深會員
資深會員


查看用戶資訊
我懷疑是硬體鎖死了!因為,如果是硬體鎖死了,除非移除電源,否則無法排除故障的狀態。

造成鎖死的原因,可能是MCLR腳瞬間接底、釋放、彈跳,造成感應大電流打進PIC,造成鎖死。

解決的方法為:在MCLR腳串接一電阻,限流即可。

發表於: 2009/10/6 18:48
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Reset 幾次後程式會被改掉
#22
高級會員
高級會員


查看用戶資訊
補充一下:
1. 當機時,RESET 按久一點沒有效。
2. RESET 電路是由Vdd接1K電阻串聯0.47uf電容接地,按鍵開關與電容並聯,電阻與電容連接處接至MCLR。

發表於: 2009/10/6 18:18
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Reset 幾次後程式會被改掉
#21
高級會員
高級會員


查看用戶資訊
1. 我將LCD接至PORTD,PORTD的每一個BIT都有接電阻加LED,所以可看到訊號傳遞的狀態,將LCD拔掉,LED的變化仍舊正常,但是RESET幾次仍會出問題,似乎與LCM無關。
2. 底下是我的主程式部份,主要是利用I2C介面從MCP9800取得溫度然後顯示在20*4 LCD上,不知道有沒有可改善之處。

#include <p18cxxx.h>
#include <delays.h>
#include "xlcd.h"
#include "i2c.h"

#pragma udata
char Line1[18]="Temperature:";
char Line2[18]="----------------";
void locate(char RowNo, char ColNo);
//Locate LCD cursor
void cls(void);
//Clear LCD screen
void ResetLCD(void);
//LCD software reset
int ftoa (float x, char *str, char prec, char format);
//Transfer float to string for LCD
int abs(int data1, int data2);
//Get positive data

#pragma code
void main(void)
{
int i,j;
unsigned char temp[2];
int Temperature, TempCal1, TempCal2;
float RealTemp;
char resultString[20];
int StrLength;

TRISB=0xff;
TRISD=0;
TRISB=0;
PORTB=0;
ResetLCD();
OpenXLCD(FOUR_BIT & LINES_5X7);

cls();
locate(1,1);
putsXLCD(Line1);
WriteCmdXLCD(CURSOR_OFF&BLINK_OFF);
// Display OFF/Blink OFF

//*** Initialize I2C port
SSPADD=0x19;
OpenI2C(MASTER, SLEW_ON);
EEByteWrite(0x90,0x01,0x60);
//Write configuration register to set resolution at 12 bits
while(1)
{
EESequentialRead( 0x90, 0, temp, 2 );
TempCal1=temp[0];
TempCal2=temp[1];
TempCal1=TempCal1<<4;
Temperature=(TempCal2>>4)+TempCal1;
RealTemp=(float)Temperature*0.0625;
StrLength= ftoa(RealTemp, resultString, 2, 'f');
locate(2,1);
while(BusyXLCD());
DelayPORXLCD();
putsXLCD(resultString);
for(i=0;i<50;i++) DelayPORXLCD();
}
}

發表於: 2009/10/6 18:08
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Reset 幾次後程式會被改掉
#20
資深會員
資深會員


查看用戶資訊
我剛剛才注意到

你有寫到 I2C ,I2C 沒有 RESET ,卡死了

回去重寫

發表於: 2009/10/6 16:29
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Reset 幾次後程式會被改掉
#19
資深會員
資深會員


查看用戶資訊
一、RESET 按久一點,看會不會正常

二、不要趨動 LCM ,直接用一個 LED 周期性 HIGH LOW HIGH LOW

檢查看看少了 LCM 之後會不會正常

一般 RESET 不良當機,透過 BORWN OUT 就能克服(平常開,因為會耗電)

我猜你的 RESET 上有 大電容 或 LCM 的程序有無窮迴圈的 BUG(我寫過,所以我知道)


另一種方式就是依序點亮 LED ,POWER ON 點亮A 滅 B

初始化完成後 滅 A亮 B ,然後讓 C閃爍,用類似這樣的手法,

看 LED 可以知道程式是否有 RESET ,是否有進入MAIN LOOP ,是否卡死在 其它LOOP 之中

發表於: 2009/10/6 16:28
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Reset 幾次後程式會被改掉
#18
高級會員
高級會員


查看用戶資訊
1. 我的電源供應器的5V可以調到4.5V,當BOR設為4.5V時,在電壓降至4.5V時,CPU HALT,往上調到4.5XV時就RESET,看來動作相當正常。
2. 我在MCLR 原本就有加按鍵做 Reset ,一開始發現問題也是因為按了幾次RESET後就會當掉。
3. 所以整個狀況描述如下:
<1>. MCU正常運轉-->按RESET鍵幾下-->MCU HALT-->按RESET鍵也無效-->拔掉5V接頭 (似乎不需要將Vdd與Vss短路)-->接回5V接頭 --> 正常
<2>. MCU正常運轉-->拔掉110V插頭-->經過幾秒插回110V插頭-->MCU HALT-->按RESET鍵也無效-->拔掉5V接頭 -->接回5V接頭 --> 正常
<3>. MCU正常運轉-->拔掉5V接頭 -->接回5V接頭-->MCU正常運轉

發表於: 2009/10/6 14:04
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: Reset 幾次後程式會被改掉
#17
版主
版主


查看用戶資訊
照這樣看起來我還是認為是BOR的問題,確定有設成 4.1V 嗎? 是否可用可調式電源供應器來測試一下。
此外 AC Power Supply 的供電斜率也慢了一點,要不要再MCLR 加個按鍵做 Reset 的測試,確定其問題所在。
如果每次 MCLR 按鍵都可以Reset PIC 的話那真的就是 BOR & POR 的問題。

發表於: 2009/10/6 13:18
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------