• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::


Browsing this Thread:   1 Anonymous Users






Re: pic24f uart傳輸疑問
#9
高級會員
高級會員


查看用戶資訊
參照:

極光 寫到:
先感謝版主回應,今過這幾天的測驗
我是覺得是我的石英震盪器出現問題,我本來用30MHZ
計算Baud Rate =(15M/9600/16)-1
但用邏輯分析儀觀測的結果是有問題的。

後來我將石英震盪器換成7.6MHZ,在使用PLL*4
Baud Rate=(7.6M*2/9600/16)-1
這樣設定的結果是OK的,UART的Baud Rate 是正常的

不過現再又遇到一個問題,我利用LCD2 LE在除錯模式中
不論發射或接收都正常,但我把程式要燒錄到IC後
就再也收不到了,這讓我很納悶,我想請問一下PLL的設定
是在Register CONFIG下做設定嗎?

還是那只試用於除錯模式下,要燒錄是否還要進行什麼設定
我的Register CONFIG設定如下

_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768 )

_CONFIG2( IESO_OFF & FNOSC_PRIPLL & FCKSM_CSDCMD & OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_XT )


IDE請更新到7.62版試試看

16-bit 28-pin starter development board有範例程式, 其中有UART的功能

你可以參考看看

發表於: 2007/8/31 12:30
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: pic24f uart傳輸疑問
#8
新會員
新會員


查看用戶資訊
我也有一樣問題!!
我覺的問題在
while(!U1STAbits.TRMT); <--------
U1TXREG = 'C';
同樣程式在24fj128ga010就沒問題.

以下是我的程式
#define byte unsigned char
#define word unsigned int
#include "p24fj64ga002.h"

_CONFIG1JTAGEN_OFF GCP_OFF GWRP_OFF BKBUG_OFF COE_OFF ICS_PGx1 FWDTEN_OFF WINDIS_OFF FWPSA_PR128 WDTPS_PS32768 )
_CONFIG2IESO_OFF FNOSC_PRIPLL FCKSM_CSDCMD OSCIOFNC_OFF IOL1WAY_OFF I2C1SEL_PRI POSCMOD_XT )

// the above include path may be different for each user.  If a compile
// time error appears then check the path for the file above & edit
// the include statement above.

#define XTFREQ          7372800                 //On-board Crystal frequency
#define PLLMODE         2                       //On-chip PLL setting
#define FCY             XTFREQ*PLLMODE        //Instruction Cycle Frequency

#define BAUDRATE         9600       
#define BRGVAL          ((FCY/BAUDRATE)/16)-1 


byte G_rx[255] ;
byte G_rx_index;
byte G_rx_now  ;
byte G_rx_mod  ;
byte G_rx_tmp  ;
byte G_rx_byte ;

byte G_tx[256] ;
byte G_tx_index;
byte G_tx_now  ;
byte G_tx_mod  ;
byte G_tx_tmp  ;
byte G_tx_byte ;

word G_word    ;
word G_word_tmp;
word G_tx_check;

int main(void)
{
 
CLKDIVbits.RCDIV 0;
 
RPINR18bits.U1RXR 9;     // Make Pin RP9 U1RX
 
RPOR4bits.RP8R 3;     // Make Pin RP8 U1TX
 
PADCFG1 0xFF;         // Make analog pins digital 
 
LATB 0x0;
 
TRISB 0x0FFF;        // Configure LED pins as output
 
TMR1 0;                // Clear timer 1
 
PR1 0x3D09;            // Interrupt every 250ms
 
IFS0bits.T1IF 0;        // Clear interrupt flag
 
IEC0bits.T1IE 1;        // Set interrupt enable bit
 
T1CON 0x8030;        // Fosc/4, 1:256 prescale, start TMR1
 
TRISB 0x0300;
 
U1BRG  BRGVAL;
 
U1MODE 0x8000;         // Reset UART to 8-n-1, alt pins, & enable 
 //U1STA  = 0x0440;         // Reset status register & enable TX & RX
 
U1STA  0x0400;         // Reset status register & enable TX & RX for one char interrupt
 
_U1RXIF=0;                // Clear UART RX Interrupt Flag
 
_U1RXIE 1;           // Interruption active pour la reception 
 
 
 
G_rx_index=0;
 
G_rx_now  =0;
 
G_rx_mod  =127;
 
G_word=35;
 while(
1)
 {
  
//while (_U1RXIF==0);            // Wait & Receive One Character
  //while(!U1STAbits.TRMT);
  //U1TXREG = '"';
  //while(!U1STAbits.TRMT);        // Echo Back Received Character with quotes
  //U1TXREG = a;
  //while(!U1STAbits.TRMT);
  //U1TXREG = '"';
  //while(!U1STAbits.TRMT);
  //U1TXREG = ' ';     
  //_U1RXIF=0;                    // Clear UART RX Interrupt Flag
  //G_word=G_word & 0x0fff;
  //if (G_rx_now==G_rx_index)
  //{
  //}
  //while(!U1STAbits.UTXBF); /* wait if the buffer is full */
  //U1TXREG = 0x0030;
  
while(!U1STAbits.TRMT);
  
U1TXREG 'C';
  
//for(G_tx_check=0;G_tx_check<65535;G_tx_check++)G_word++; 

  //if (G_tx_check==0){U1TXREG = 'B';G_tx_check=1;}else{
  //LATB ^= 0x4000;            //Toggle LED's

  //while(!U1STAbits.UTXBF);
  //{
  // U1TXREG = 'a';
  // LATB ^= 0xF000;            //Toggle LED's

   //if (U1STAbits.UTXBF)
   //{
   // if(G_rx_now != G_rx_index)
   // {
   //  G_rx_now=((G_rx_now+1) & G_rx_mod);
   //  U1TXREG = G_rx[G_rx_now];
   // }
   //}
  //}

  //if (U1STAbits.TRMT){G_rx_now=(G_rx_now+1) % G_rx_mod;U1TXREG = G_rx[G_rx_now];}

 
}
 return 
0;
}

void __attribute__((interruptno_auto_psv)) _T1Interrupt(void)
{
 
IFS0bits.T1IF 0;        // clear interrupt flag
 
G_word_tmp=G_word;
 
G_rx_tmp=((G_rx_index+1) & G_rx_mod);
 if (
G_rx_tmp == G_rx_now){ G_rx_tmp=((G_rx_tmp+1) &  G_rx_mod);}
 
G_word_tmp=(G_word 0x000f);
 
//G_word_tmp=(G_word_tmp >> 4);
 
G_rx[G_rx_tmp]=(byte)(G_word_tmp);
 
G_rx_index=G_rx_tmp;
 
LATB ^= 0x8000;            //Toggle LED's
}

void __attribute__ ((__interrupt__,no_auto_psv)) _U1RXInterrupt(void

  
_U1RXIF 0
  
G_rx_tmp=(G_rx_index+1) & G_rx_mod;
  if (
G_rx_tmp==G_rx_now){G_rx_tmp=(G_rx_tmp+1) %  G_rx_mod;}
  
G_rx[G_rx_tmp]=(byte)U1RXREG;
  
G_rx_index=G_rx_tmp;
  
LATB ^= 0x4000;            //Toggle LED's
}


發表於: 2007/8/31 11:42
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: pic24f uart傳輸疑問
#7
版主
版主


查看用戶資訊
除錯模式下能正常執行程式,就代表程式及 Config 的設定沒有問題。請改用 Programmer Mode 來燒錄。

發表於: 2007/8/30 15:50
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: pic24f uart傳輸疑問
#6
資深會員
資深會員


查看用戶資訊
先感謝版主回應,今過這幾天的測驗
我是覺得是我的石英震盪器出現問題,我本來用30MHZ
計算Baud Rate =(15M/9600/16)-1
但用邏輯分析儀觀測的結果是有問題的。

後來我將石英震盪器換成7.6MHZ,在使用PLL*4
Baud Rate=(7.6M*2/9600/16)-1
這樣設定的結果是OK的,UART的Baud Rate 是正常的

不過現再又遇到一個問題,我利用LCD2 LE在除錯模式中
不論發射或接收都正常,但我把程式要燒錄到IC後
就再也收不到了,這讓我很納悶,我想請問一下PLL的設定
是在Register CONFIG下做設定嗎?

還是那只試用於除錯模式下,要燒錄是否還要進行什麼設定
我的Register CONFIG設定如下

_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_OFF & COE_OFF & ICS_PGx2 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768 )

_CONFIG2( IESO_OFF & FNOSC_PRIPLL & FCKSM_CSDCMD & OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI & POSCMOD_XT )

發表於: 2007/8/27 21:48
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: pic24f uart傳輸疑問
#5
版主
版主


查看用戶資訊
應該是Baud Rate 算錯,將計算的程式po出來討論一下吧!

你也可以試著修改Baud Rate看看有沒有變化,去揣摩一下公式的內容。

發表於: 2007/8/24 9:41
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: pic24f uart傳輸疑問
#4
版主
版主


查看用戶資訊
應該是Baud Rate 算錯,將計算的程式po出來討論一下吧!

你也可以試著修改Baud Rate看看有沒有變化,去揣摩一下公式的內容。

發表於: 2007/8/24 9:41
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: pic24f uart傳輸疑問
#3
資深會員
資深會員


查看用戶資訊
資料確定有出來,我用示波器看過
我是用icd2除錯,但輸出訊號很奇怪,如果是9600
一個BIT的時間因在104us左右,但我跑出來的卻在xxmS
這讓我很納悶!

因為這和DATA上的公式誤差太大了!
會誤差這麼大我想會不會是我的石英震盪器出了問題
難道PIC24F不能接30MHZ的震盪器嗎?

還是接30M的震盪器,什麼地方要設定嗎?

發表於: 2007/8/24 9:24
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: pic24f uart傳輸疑問
#2
版主
版主


查看用戶資訊
看程式沒做實驗只能用猜的回答問題,做實驗嗎真的很花時間,這樣吧! 你應該找一台示波器 : 第一量一下資料到底有沒有送出來? 如果有送出來量一下時間揪知道的 Baud Rate。

你有用 ICD2 除錯嗎?

發表於: 2007/8/24 9:02
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


pic24f uart傳輸疑問
#1
資深會員
資深會員


查看用戶資訊
我想請問一下
鮑率的算法不是((FCY/BAUDRATE)/16)-1

而fcy=外接震盪器嗎?
但是我照公式這樣設定還是有問題
我不管這麼傳送PC上都收不到資料
後來我接邏輯分析儀來看,發現我本來設定9600的鮑率
完全跑掉!這讓我很納悶難道我公式帶錯了嗎?

我外接震盪器為30MHZ
鮑率=194

後來我在網站上看到資料說FCY=外接震盪器\2
這樣鮑率=96

但我設定這兩個值我PC上都收不到資料,請問是我的震盪器有問題,還是我的CONFIG有設定錯誤阿!

因為除了這兩個有問題外,我實在想不出來還有什麼問題了

==================================

#include<p24fj64ga002.h>
#include<uart.h>

_CONFIG1( JTAGEN_OFF & GCP_OFF & GWRP_OFF &

BKBUG_OFF & COE_OFF & ICS_PGx2 &FWDTEN_OFF &

WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768)

_CONFIG2( IESO_OFF & FNOSC_PRI & FCKSM_CSDCMD &

OSCIOFNC_OFF & IOL1WAY_OFF & I2C1SEL_PRI &

POSCMOD_HS )


int main(void)
{
unsigned int U1MODEvalue;
unsigned int U1STAvalue;
unsigned int Baudvalue;

CloseUART1();

U1MODEvalue=UART_EN|UART_BRGH_SIXTEEN ;
U1STAvalue=UART_TX_ENABLE|UART_RX_OVERRUN_CLR_MASK;
Baudvalue=194;
OpenUART1(U1MODEvalue,U1STAvalue,Baudvalue);

_U1RXR=9;
_RP8R=3;
a=0;
while(1)
{
while(BusyUART1());
WriteUART1('A');
}
}



發表於: 2007/8/23 21:25
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... ]

教育訓練中心

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