• 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: 電腦轉RS458與RS232連結
#6
資深會員
資深會員


查看用戶資訊
開機為什麼會進中斷,我也不知
試看看啟動中斷GIE前先讀取RCREG兩次
data = RCREG;
data = RCREG;
看看有無效果

=================================
void isr_high(void)
{
getsUSART(UR_ADR,2);
//略
}

這樣寫法較不妥,就算你只有啟動這個中斷也不建議這樣寫
還是加上中斷旗標判斷,以避免一些沒考慮到的bug

void isr_high(void)
{
if(PIR1bits.RCIF)
{
getsUSART(UR_ADR,2);
//略
}
}


=================================
另外,

我的建議是不要使用getsUSART() 函式

一次讀進一整個字串看起來很方便
但程式卻需要一直等在那邊
是個很浪費時間、又沒甚麼效率的做法

最不好的是程式使用while()去等待data
根本沒有處理timeout的問題
只要傳送端沒有傳送完整長度資料 你程式就掛了

一定要用這個函數的話也可以,
自己修改過, 且最好把timeout考慮進去,避免掉while()的死迴圈的問題


但最好是每中斷一次讀一byte資料,
都收完了再處理資料


=================================
最後再牢騷一下

雖然大部分C18內建的函式都不錯用
但我也發現有不少函式其實是有問題的
使用那些內建函式前,建議還是先把它的source code研讀一下
了解一下實際動作再說

發表於: 2009/9/26 12:01

Edited by nicecookie on 2009年09月26日 13:19:49
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 電腦轉RS458與RS232連結
#5
新會員
新會員


查看用戶資訊
目前巳測試TX功能正常

唯在RX時一直無法接收
巳確定DE處於LOW狀態,等待接收

一開機就會一直卡在接收程式中斷當中的等待字元接收
但當時並未有任何訊號輸入需接收
並確定非由其他中斷觸發

中斷服務程式如下:
===============================
#pragma interrupt isr_high
void isr_high(void)
{
getsUSART(UR_ADR,2);
getsUSART(UR_CMD,2);
getsUSART(UR_REVERSE,2);
getsUSART(UR_CHIP,1);
getsUSART(UR_CH,1);
getsUSART(UR_DATA,4);
getsUSART(UR_LRC_CHK,2);

Delay1TCY();
}
#pragma code
===============================

中斷所呼叫之副程式如下:
===============================

void getsUSART(char *buffer, unsigned char len)
{
char i;
unsigned char data;

for(i=0;i<len;i++)
{
while(!DataRdyUSART());//<==卡在此處
data = getcUSART();
*buffer = data;
buffer++; }
}

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



煩請解惑,感激不盡

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


Re: 電腦轉RS458與RS232連結
#4
版主
版主


查看用戶資訊
以 APP001 為例,版子上用 SN75176 為RS-485 的介面元件,電路上將 RC0 --> J2 -->J7 (CTS pin) 接到 SN75176 的 DE 腳做為半雙工發送控制用。

使用 RS-485 做半雙工傳輸時,切換DE (輸出/輸入方向控制) 時,不可以只檢查TXIF 這會使的最後一個Byte 傳不出去的,建議檢查 TMRT 這樣才可以確保 UART 資料以經傳算完畢。

DE 腳是控制輸出的,RS-485 平常處於接收模式,要傳送資料時再將 DE 設成 Hi 後再傳送資料,完全傳送完畢後再將 DE 設成 Low 成為接收模式。

還有RS-485 的傳輸線須接上一終端電阻 220 ohm 的,不然訊號會因傳輸線的阻抗過高而無法傳送的。

發表於: 2009/9/25 15:51
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 電腦轉RS458與RS232連結
#3
新會員
新會員


查看用戶資訊
請問半雙功時,程式該如何設定?

發表於: 2009/9/25 13:45
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 電腦轉RS458與RS232連結
#2
資深會員
資深會員


查看用戶資訊
基本上RS232是全雙工,RS485是半雙工(與用什麼MCU無關)

而用RS232(全雙工)沒問題.
用RS485(半雙工),會有收不到問題:
MCU可以傳給PC, 而MCU收不到PC信號.

可能要檢查一下(量一下波形),是否為全雙工,半雙工問題.

發表於: 2009/9/25 11:19
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


電腦轉RS458與RS232連結
#1
新會員
新會員


查看用戶資訊
實驗硬體:APP001ver3 with pic18F4520
==================================
Complier:PIC C18
==================================
實驗目的:
確認PIC18F4520上之RS458通訊正常
(目前使用電腦之RS232port 配合市面上之轉接頭轉成RS458與PIC18F4520通訊)
註:巳確認轉接頭工作正常
==================================
實驗條件:
使用9600 baud rate
不使用轉接頭,使用RS232時與電腦通訊時均正常
==================================
當轉接成RS485時狀況如下:
可傳送字元至電腦,但無法接收電腦傳回之字元
接收來自電腦之訊號使用中斷撰寫,但一直會卡在中斷中
且無法接收字元訊號
==================================
程式設定:
OpenUSART( USART_TX_INT_OFF
& USART_RX_INT_ON
& USART_SYNCH_MODE
& USART_SYNC_MASTER
& USART_EIGHT_BIT
& USART_CONT_RX
& USART_BRGH_HIGH
,103);
RCSTAbits.SPEN=1;
TRISCbits.TRISC7=1;
TRISCbits.TRISC6=0;
PIE1bits.TXIE=0;
PIR1bits.RCIF=0;
IPR1bits.RCIP=1;
PIE1bits.RCIE=1;
==================================
請教問題:
轉接成RS458時,是否要設定成同步模式 ?
如是的話,該設成Master還是slave ?
另外RXDTP及TXCKP該如何設定 ?
==================================
感激不盡~

發表於: 2009/9/25 9:59
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... ]

教育訓練中心

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