會員登陸
網站導航
最新下載
- Microchip 2019 ... (Wed, 09-Jan-2019)
- Microchip 2019 ... (Fri, 07-Dec-2018)
- APP-ESS18-2 實... (Thu, 06-Dec-2018)
- 2018MASTERs (Mon, 22-Oct-2018)
- 201811ESS (Mon, 22-Oct-2018)
- MCC Bootloader ... (Tue, 31-Jul-2018)
- Microchip2018微... (Sat, 07-Jul-2018)
- APP-ESS18-1B Po... (Fri, 22-Jun-2018)
- Microchip 2018 ... (Fri, 08-Jun-2018)
- 2018/5 EDF 贈品... (Thu, 10-May-2018)
訪問統計 (自2012/5/3)
|
正在流覽:
1 名訪客
|
PIC16F1455目前使用遇到的問題? |
|
新會員 
註冊日期: 2008/10/27 11:44
所屬群組:
註冊會員
文章: 9
等級: 1; EXP: 86 HP : 0 / 21 MP : 3 / 654
|
各位先進好: 目前我使用的MPLAB X IDE v3.45+XC8 V1.41+PICkit3 完整程式碼如下: // CONFIG1 #pragma config FOSC = INTOSC // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin) #pragma config WDTE = OFF // Watchdog Timer Enable (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled) #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is digital input) #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled) #pragma config BOREN = OFF // Brown-out Reset Enable (Brown-out Reset disabled) #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin) #pragma config IESO = OFF // Internal/External Switchover Mode (Internal/External Switchover Mode is disabled) #pragma config FCMEN = OFF // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is disabled)
// CONFIG2 #pragma config WRT = OFF // Flash Memory Self-Write Protection (Write protection off) #pragma config CPUDIV = NOCLKDIV// CPU System Clock Selection Bit (NO CPU system divide) #pragma config USBLSCLK = 24MHz // USB Low SPeed Clock Selection bit (System clock expects 24 MHz, FS/LS USB CLKENs divide-by is set to 4.) #pragma config PLLMULT = 3x // PLL Multipler Selection Bit (3x Output Frequency Selected) #pragma config PLLEN = DISABLED // PLL Enable Bit (3x or 4x PLL Disabled) #pragma config STVREN = ON // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will cause a Reset) #pragma config BORV = LO // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), low trip point selected.) #pragma config LPBOR = OFF // Low-Power Brown Out Reset (Low-Power BOR is disabled) #pragma config LVP = OFF // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)
// #pragma config statements should precede project file includes. // Use project enums instead of #define for ON and OFF.
#include <xc.h>
//#define baud 0x17//0x17 for 48MHz -> 31250 baud #define baud 0x13//0x13 for 48MHz -> 38400 baud
void InitializeSystem(void); void UserInit(void); void InitializeUSART(void);
#define InitGpio() TRISA = 0b00001000;\ TRISC = 0b00000000;\
#define GLed LATCbits.LATC3
union{ struct{ unsigned T0 :1; // unsigned T1 :1; // unsigned T2 :1; // unsigned T3 :1; // unsigned T4 :1; // unsigned T5 :1; // unsigned T6 :1; // unsigned T7 :1; // }oneBit; unsigned char allBits; }Time_FLAG; #define interrupt_1ms Time_FLAG.oneBit.T0
unsigned char rc_temp;
#define UART_TRISTx TRISCbits.TRISC4 #define UART_TRISRx TRISCbits.TRISC5
void interrupt ISRCode() { if(TMR0IF && TMR0IE) { TMR0 = 0x00; TMR0IF = 0 ; interrupt_1ms = 1; } if(RCIF && RCIE) { RCIF = 0; rc_temp = RCREG; //硬體接收器的值存到接收暫存器 TXREG = rc_temp; } }
void main(void) { InitializeSystem(); while(1) { if(rc_temp==0) { GLed = 1; } else { GLed = 0; } } }
void InitializeSystem(void) { ANSELA = 0; ANSELC = 0;
//OSCCONbits.IRCF = 0x0f; //16MHz HFINTOSC with 3x PLL enabled (48MHz operation) //OSCCONbits.SCS = 0x00; //OSCCONbits.SPLLEN = 1; //OSCCONbits.SPLLMULT = 1; OSCCON = 0b11111100; ACTCONbits.ACTSRC = 1; //Enable active clock tuning with USB ACTCONbits.ACTEN = 1;
UserInit(); OPTION_REG = 0; TMR0 = 0x05; INTCON = 0b11100000; }
void UserInit(void) { InitGpio(); InitializeUSART(); }//end UserInit
void InitializeUSART(void) { unsigned char c; //unsigned char cnt=0;
UART_TRISTx = 0; UART_TRISRx = 1; TXSTA = 0x20; // TX enable BRGH=0 RCSTA = 0x90; // Single Character RX SPBRG = baud;
BAUDCON = 0x00; // BRG16 = 0
PIE1bits.RCIE = 1;
c = RCREG; // read }
遇到的問題是,DEBUG模式下進行實際量測IO輸出腳與UART傳輸都正確,但是燒錄後拔開PICkit3實際量測IO輸出一直維持HI(沒有如程式中切換),UART傳輸一樣正確. 請問這樣應該要怎麼查詢問題點可能在哪邊?
2017/04/11 23:52
|
|
|
Re: PIC16F1455目前使用遇到的問題? |
|
版主 
註冊日期: 2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者 註冊會員 MICROCHIP
文章: 14612
等級: 73; EXP: 23 HP : 1083 / 1805 MP : 4870 / 78130
|
類比 ADC 輸入功能設定?
ANSELA & ANSELB 這兩個暫存器在初始設定時是否有設成 I/O 模式?
2017/04/12 13:45
|
|
|
Re: PIC16F1455目前使用遇到的問題? |
|
資深會員 
註冊日期: 2007/11/05 08:29
所屬群組:
註冊會員
文章: 229
等級: 14; EXP: 14 HP : 0 / 328 MP : 76 / 10839
|
這不一定有影響 但是 RCIF 是 read-only
if(RCIF && RCIE) { //RCIF = 0; rc_temp = RCREG; // clear RCIF by reading RCREG TXREG = rc_temp; } }
另外 void InitializeUSART(void) { ... UART_TRISTx = 0; UART_TRISRx = 1; TXSTA = 0x20; // TX enable BRGH=0 //RCSTA = 0x90; // Single Character RX SPBRG = baud;
BAUDCON = 0x00; // BRG16 = 0
PIE1bits.RCIE = 1;
RCSTA = 0x90; // 通常最後才啟動
c = RCREG; // <<---- 為什麼? }
請參考使用手冊的說明
2017/04/12 14:45
|
|
|
Re: PIC16F1455目前使用遇到的問題? |
|
新會員 
註冊日期: 2008/10/27 11:44
所屬群組:
註冊會員
文章: 9
等級: 1; EXP: 86 HP : 0 / 21 MP : 3 / 654
|
首先感謝Ryang和timijk的指導, 我照著修改新增 ANSELA = 0;\ ANSELC = 0;\ 也照著 //RCIF = 0;
RCSTA = 0x90; // 通常最後才啟動
測試後情況是一樣的,
今天我另外新增一隻IO腳做輸入訊號控制同一隻輸出腳位,
測試後新增的腳位是可以改變輸出腳位的,但是UART傳送的卻是沒有改變輸出腳位的,DEBUG模式中,是都可以改變輸出腳位狀態的,這個結果很令人無言,不知還有其他可能需要注意的部分嗎?
2017/04/12 18:33
|
|
|
Re: PIC16F1455目前使用遇到的問題? |
|
資深會員 
註冊日期: 2007/11/05 08:29
所屬群組:
註冊會員
文章: 229
等級: 14; EXP: 14 HP : 0 / 328 MP : 76 / 10839
|
你是指 GLed 腳位沒變化嗎?
你用 INTOSC 會有 +/- 3% 的誤差 再加上 你產生的 Baud Rate 是 37500 與 38400 就有 2.34% 的誤差
不曉得會不會是這緣故
2017/04/12 19:50
|
|
|
Re: PIC16F1455目前使用遇到的問題? |
|
新會員 
註冊日期: 2008/10/27 11:44
所屬群組:
註冊會員
文章: 9
等級: 1; EXP: 86 HP : 0 / 21 MP : 3 / 654
|
感謝timijk指導: 我測試判斷不是Baud Rate誤差原因,因為我的程式是確認有接收中斷,就會把接收到的值,直接回傳,測試中也確實有收到回傳的資料並且正確.
2017/04/13 13:42
|
|
|
Re: PIC16F1455目前使用遇到的問題? |
|
高級會員 
註冊日期: 2014/12/02 11:55
所屬群組:
註冊會員
文章: 82
等級: 8; EXP: 0 HP : 0 / 175 MP : 27 / 2158
|
unsigned char rc_temp;
這個改為
volatile unsigned char rc_temp;
試試看
2017/04/13 13:57
|
|
|
Re: PIC16F1455目前使用遇到的問題? |
|
版主 
註冊日期: 2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者 註冊會員 MICROCHIP
文章: 14612
等級: 73; EXP: 23 HP : 1083 / 1805 MP : 4870 / 78130
|
閃眼了,居然沒看到這中斷裡所使用到的變數...
2017/04/13 15:36
|
|
|
Re: PIC16F1455目前使用遇到的問題? |
|
新會員 
註冊日期: 2018/07/29 08:44
所屬群組:
註冊會員
文章: 1
等級: 1; EXP: 0 HP : 0 / 0 MP : 0 / 0
|
感謝昨日管理員撥冗電話指導, 我是負責測試以上firmware的人員,目前碰到的問題是firmware對不同的Host端輸入的MIDI訊號,會有不同的表現,例如接到三星的tablet otg是正常,但接到手機的otg或pc的USB就不正常,最明顯的不正常是一開使接收輸入的MIDI訊號firmware會無法正常解碼,在播放MIDI的時後有時會無法正常解碼 16f1455的USART是透過一顆USB-MIDI IC來接收MIDI訊號 baudrate 31250 我在國外的Microchip網站有發問 https://www.microchip.com/forums/m738164.aspx我只是測試人員對外國人的相關建議,目前摸不著頭緒 想請教個位先進,這樣的問題要如何抓? 需要哪些設備? 加一個Ring buffer的作用為何,會有幫助嗎?(sample code needed) 煩請各位先進不吝指教,感謝
2018/08/01 10:58
|
|
|
Re: PIC16F1455目前使用遇到的問題? |
|
資深會員 
註冊日期: 2009/02/26 09:42
所屬群組:
註冊會員
文章: 331
等級: 16; EXP: 97 HP : 0 / 399 MP : 110 / 11663
|
以下是我所看到的問題, 如果您是使用PIC16F1455將USB configure成Full-speed USB Device的話. 從您的Configuration Bit設定中, 應該修正下面兩行.
(1)
#pragma config USBLSCLK = 24MHz // USB Low SPeed Clock Selection bit (System clock expects 24 MHz, FS/LS USB CLKENs divide-by is set to 4.)
--> 應該改為下面
#pragma config USBLSCLK = 48MHz // USB Full SPeed Clock Selection bit (System clock expects 48 MHz, FS/LS USB CLKENs divide-by is set to 8.)
(2)
#pragma config PLLEN = DISABLED // PLL Enable Bit (3x or 4x PLL Disabled)
--> 應該改為下面
#pragma config PLLEN = ENABLED // PLL Enable Bit (3x or 4x PLL Disabled)
因為您有使用到此顆MCU內建的ACT module, ACT模組是使用USB Host端發出的SOF參考訊號來校正MCU的internal 16MHz, 所以只能將USB設定為Full-speed device, 因為Low-speed device規格並沒有SOF.
2018/08/01 14:05
|
|
您無法在此發表文章
您可以在此觀看文章
您無法回覆文章
您無法編輯自己的文章
您無法刪除自己的文章
您無法發起投票調查
您無法在此投票
您無法上傳附加檔案
您無法不經審核直接發表文章
|
搜尋
Microchip連結
網頁捷徑
2019 Winter Elite 報名
教育訓練
其它網站連結
|