Re: Vdd瞬間低電壓之後
|
||||
---|---|---|---|---|
新會員
|
因為我沒辦法修改我自己的文章
所以我將需要的附件回在這邊 附件內pdf為MCU跟POWER的電路圖 main.c跟interrupt.c為我主文內敘述的兩個.c 麻煩大家幫忙了..^^ Attach file: Link only for registered users
發表於: 2009/8/17 11:16
|
|||
|
Vdd瞬間低電壓之後
|
||||
---|---|---|---|---|
新會員
|
版主您好
============ MCU:PIC18F6620 watch dog 為 On brown out 為 2.7V 程式架構如下 main() { while(1) { if(true) { ......... Yellow_LED 閃爍; clr_wdt; } else { ......... } Red_LED 閃爍 } } 另外於中斷程式內加入 Green_LED 閃爍 之後 利用power supply 於MCU正常工作時瞬間 給予一低電壓後再拉回正常電位 大部分的情形下, MCU會維持正常工作, 或是 造成watchdog啟動, 進而重啟MCU. 但在某些情形會造成以下情形 Yellow_LED不閃爍 Red_LED閃爍 Green_LED閃爍 但Watch Dog卻沒有啟動讓MCU重開 就燈號判斷 表示程式沒有去清watch dog 但watch dog也沒Time out掉 ================== 這個狀況要等到重新上電後 不知道這樣的情形是當時I/O(Yellow_LED)出了問題或是有其他的問題造成這樣的現象? 希望這樣的敘述, 板大能看得懂, 看不懂的話, 我再盡力補充, 麻煩大大了, 感謝
發表於: 2009/8/15 22:34
Edited by deepmotion on 2009年08月15日 22:56:43
Edited by deepmotion on 2009年08月16日 01:47:37 |
|||
|
請問CAN Initial 的問題
|
||||
---|---|---|---|---|
新會員
|
您好,
最近在用18f4580做CAN 的功能, 可是在Initial的時候碰到一點問題 我嘗試過用了兩套lib 分別是 AN878 和 can18cxx8.c 結果都一樣 問題是當我在切換CAN mode的時候會針對 CANCON去設定 理論上來說(according to datasheet) CANSTAT會跟著改變 可是CANSTAT就是不會變 (cancon會變) AN878的code更是直接跳過 canstat的檢查 雖然他這樣程式會跑 可是Message卻send不出去 我現在沒辦法知道是我其他的Code有問題 還是是因為Mode沒有真正切換過去的問題 請問這樣的問題要怎樣解決呢? Thx
發表於: 2008/6/2 16:39
|
|||
|
Re: 關於中斷的問題
|
||||
---|---|---|---|---|
新會員
|
跟意麵大說的一樣
小弟我真的是土法煉鋼型的 小弟知道降的學習 底子會很不穩 但..被趕鴨子上架了..ORZ 而且小弟的slave device還不是EEPROM 而是其他種類的device 小弟搞懂了I2C的通訊協定之後 就用PICC裡面的範例程式所改過來的 感謝意麵大大的提醒 我會去買書回來好好學習的~~!!! 謝謝大家..^^
發表於: 2007/8/17 14:02
|
|||
|
Re: 關於中斷的問題
|
||||
---|---|---|---|---|
新會員
|
不好意思
晚點將程式補上 (程式不在身邊..) 感謝大大...^^
發表於: 2007/8/16 14:34
|
|||
|
關於中斷的問題
|
||||
---|---|---|---|---|
新會員
|
小弟寫了個簡單的中斷程式
主程式內只有 while(1) 然後timer1 25ms中斷一次 但每次程式跑一跑 一開始還正常 之後就會出現 只有time1正常計時並執行中斷程式 主迴圈內的printf就再也沒被執行過了 不知道版上各位高手是否有遇過降的問題 可以指點一下小弟我 感謝大家..^^ p.s. 小弟是使用picc編譯 ======================== 小弟使用的是18F452 不好意思 以上這個問題已經解決了 是小弟的程式結構不好 調整之後已經解決了 但現在出現另一個問題 就是在char read_ext_eeprom(int address) {} 這段程式內的 data = i2c_read(0); // read byte 這邊常常都會停很久 導致MCU重啟 而我在I2C的設定中 已經設定在read的部份 會自動restart wdt (#use I2C(master, sda=I2C_SDA, scl=I2C_SCL,RESTART_WDT,FORCE_HW)) 不知道為什麼還是會讓MCU重啟 麻煩大家幫我看看了 謝謝 意麵大哥,謝謝你提醒我把code貼上來..^^ p.s 每次都po些笨問題,謝謝大家不吝指教..^^ ================================ 主程式 void main(void) { InitI2C(); InitPIC(); I2C_Init(); InitInterrupts(); write_ext_eeprom(0x00,0x0A); write_ext_eeprom(0x01,0x0E); write_ext_eeprom(0x02,0x03); write_ext_eeprom(0x03,0x00); write_ext_eeprom(0x05,0x00); write_ext_eeprom(0x04,0x00); write_ext_eeprom(0x06,0x00); write_ext_eeprom(0x07,0x00); printf("Start\r\n"); while(1) { restart_wdt(); if(printf_flag == 1) { printf("now data = %x\r\n",j8); j8 = 0; printf_flag = 0; } } } ============================== 中斷部份 #int_timer1 //0.025sec timer1_interrupt() { disable_interrupts(GLOBAL); Timer1Count++; restart_wdt(); j8 = read_ext_eeprom(0x08); if (Timer1Count>=40) { Timer1Count = 0; printf_flag = 1; } enable_interrupts(GLOBAL); } ================================== I2C(write) void write_ext_eeprom(int address, int data) { int i =9; restart_wdt(); i2c_start(); // start bit i2c_write(0x1C); // control byte i2c_write(address); // Address low byte i2c_write(data); // data byte i2c_stop(); // stop bit delay_ms(11); // delay to allow write } ================================== I2C(read) char read_ext_eeprom(int address) { int i =9; restart_wdt(); i2c_start(); // start bit i2c_write(0x1C); // control byte i2c_write(address); // address low byte i2c_start(); // restart i2c_write(0x1D); // control byte data = i2c_read(0); // read byte i2c_stop(); // stop bit return(data); }
發表於: 2007/8/15 16:03
|
|||
|
關於從PICC轉換至C18
|
||||
---|---|---|---|---|
新會員
|
想請問一個問題
我本來是用PICC來做編譯 但現在想換到C18來做 #use <===像是這個宣告 在PICC可用 在C18上是無法編譯的 那我要如何知道要如何替換 有資料可供參考嗎~? 我的晶片是pic18f6620 以上,麻煩版大們了..^^
發表於: 2007/1/24 14:23
|
|||
|