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


Browsing this Thread:   1 Anonymous Users




(1) 2 »


Re: PLL enable 後 UART 就有問題了
#11
中級會員
中級會員


查看用戶資訊
> 剛在看了一下 OpenUART( ) 的函數,他只支援 USART 的功\r
> 能,而 PIC18F4620 是 Enhanced USART 的功能,有些暫
> 存器的設定就沒有設到所以要額外的去設定
(驚)
我在它的 periph-lib/USART.htm 沒看到它有如此說明, 這是 undocument 的嗎? 還是在哪裡還有額外資料?

不過, 非常謝謝 Ryang 指導, 我有空會去試看看, 現在只求穩定, 東西做出來後我再來調校效率. 我做的是手持式的, 基本上也不希望 CPU 太快啦 耗電!!


> 我所講的是 CPU 的執行速度,因為48MHz 被
> CPUDIV<1:0> 除過了所以 CPU 的執行速度變慢了不再是
> 48MHz 了。

這點我看過了, 在 PIC18F87J50 FAMILY CLOCK DIAGRAM的Peripherals上面有一個 CPU, 所以他們吃同一個 source, 是在 OSCCON<1:0> 控制之後, 雖然不是 CPUDIV (另外 Internal Oscillator 並不經過 CPUDIV) . 不過, 我漏看了, 謝謝提醒

發表於: 2008/12/3 13:15
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PLL enable 後 UART 就有問題了
#10
版主
版主


查看用戶資訊
剛在看了一下 OpenUART( ) 的函數,他只支援 USART 的功能,而 PIC18F4620 是 Enhanced USART 的功能,有些暫存器的設定就沒有設到所以要額外的去設定,如 : BAUDCON & RCSTS Register.

基本上你是使用 8 bit Baud Rage 除法器,所以設成 Baud-High 時 Fosc/16 後其值為 312 已經超過 8-bit 的範圍值了。所以選用 Baud-Low 的設定 Fosc/64 後為 77 才可以符合 8-bit Baud-Rate Register 的設定。
所以你是一直認為 所計算出來的Baud 值是可以直接用 INT 的格式填到 16-bit Baud Rate Generater 的,其實因為 default 的設定是 8-bit 所以就不對了。


USB 在 Full-Speed 底下是要 48MHz 的速度,我所講的是 CPU 的執行速度,因為48MHz 被 CPUDIV<1:0> 除過了所以 CPU 的執行速度變慢了不再是 48MHz 了。USB 與 CPU 的頻率是分開的。

發表於: 2008/12/3 11:26
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PLL enable 後 UART 就有問題了
#9
中級會員
中級會員


查看用戶資訊
Ryang 寫道:
<1>
ANS: 可是你在 Baud-Read Register 卻選用了 8 bit mode (BRG16 = 0) ,所以就錯了。

com:
謝謝指導, 不過在 openuart 參數裡並只有以下二種mode
Transmission Width:
USART_EIGHT_BIT 8-bit transmit/receive
USART_NINE_BIT 9-bit transmit/receive
你指 9-bit 嗎? 不對喔,我的data bit 是 8-bit
既然 API 指明 input 是 unsigned int, 就不可能call進去後又把你shrink成8bit

另外,你講的是直接控制register吧,我程式碼上寫明很清楚喔,我是call MC 的 lib

<2>
ANS: Data Sheet 沒有看清楚,裡面的計算公式裡有標示:
BRGH=0 時,Fosc/64
BRGH=1 時,Fosc/16

com: 你好, 謝謝, 不過, 可能你沒看清我的問題喔, 我很明白清楚的寫USART_BRGH_HIGH
或者跟上一題一樣,你沒弄清 openusart API 喔

不過照你這麼說我也知道了, 其沒有什麼9600要low , 19200就high這種東西,還是以自己輸入為主. 我本來還被嚇一跳,怎有這種怪定義喔

<3>
ANS: 這樣只是將 CPU 的頻率降下來而已,實際上還是沒有真正的解決問題。

com: 謝謝, 不過好像沒有喔, 因為我測過了, 我 USB 還是以 48MHz速度在跑, 你可以看 fig 2-1 , PIC18F87J50 FAMILY CLOCK DIAGRAM

我除頻只是除 圖的右下角那塊 Peripherals 喔, 對於 uart, 24MHz 這個速度對我已經綽綽有餘了

不過,非常謝謝你的指教,還希望我有不懂的地方你能再幫忙幫忙 對於 MicroChip 我是新手

發表於: 2008/12/3 9:33
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PLL enable 後 UART 就有問題了
#8
版主
版主


查看用戶資訊
<1>
void Open1USART( unsigned char config,
unsigned int spbrg);
spbrg 是 unsinged int 超過 256 不會有問題

ANS: 可是你在 Baud-Read Register 卻選用了 8 bit mode (BRG16 = 0) ,所以就錯了。

<2> DataSheet 是這樣寫的
BRGH: High Baud Rate Select bit
Asynchronous mode:
1 = High speed
0 = Low speed

但它並沒有定義何謂 High Speed?何謂 Low?

ANS: Data Sheet 沒有看清楚,裡面的計算公式裡有標示:
BRGH=0 時,Fosc/64
BRGH=1 時,Fosc/16


<3> 我一樣是設 high speed,
但頻率調降/除頻
#pragma config CPUDIV = OSC2_PLL2 // OSC2 = [CPU System clock/2]

baudrate 一樣是9600, 但問題就解決了

ANS: 這樣只是將 CPU 的頻率降下來而已,實際上還是沒有真正的解決問題。

發表於: 2008/12/3 7:59
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PLL enable 後 UART 就有問題了
#7
中級會員
中級會員


查看用戶資訊
<1>
void Open1USART( unsigned char config,
unsigned int spbrg);
spbrg 是 unsinged int 超過 256 不會有問題

<2> DataSheet 是這樣寫的
BRGH: High Baud Rate Select bit
Asynchronous mode:
1 = High speed
0 = Low speed

但它並沒有定義何謂 High Speed?何謂 Low?



<3> 我一樣是設 high speed,
但頻率調降/除頻
#pragma config CPUDIV = OSC2_PLL2 // OSC2 = [CPU System clock/2]

baudrate 一樣是9600, 但問題就解決了

發表於: 2008/12/2 18:49
曾經 狂奔 舞蹈 貪婪的說話, 隨著冷的 濕的 心腐化

個人的休閒小站
歡迎來參觀
http://www.elevior.com
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PLL enable 後 UART 就有問題了
#6
版主
版主


查看用戶資訊
9600bps 屬於低速的,工作在 48MHz 時,請設定成 SYNC = 0, BRGH = 0, BRG16 = 0 (如果使使用 8-bit Baud-Rate Generator),這樣計算公式為 : FOSC/[64 (n + 1)]

9600bps=48000000/[64(n+1)]
78=n+1
n=77

發表於: 2008/12/2 8:13
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PLL enable 後 UART 就有問題了
#5
資深會員
資深會員


查看用戶資訊
假設您的頻率真的是48MHz,那麼套用您的公式

BRGVAL = (F_OSC/16/(BAUDRATE + 1)) = 48000000 / 16 / 9601 = 312

大於1 Bytes 255了

看一下Datasheet裡有關"BRGH"的設定



參照:

test838 寫道:
不, 很抱歉, 可能我沒寫清楚, 如同我寫的, 我 48 也試過了

>我的外部是 12MHz, 我試過48, 8, 6, ....等頻率. 皆無法運作
> #define F_OSC 48000000

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


Re: PLL enable 後 UART 就有問題了
#4
資深會員
資深會員


查看用戶資訊
最簡單的方法,就是讓PIC18F87J50送0X55出去,再用示波器看看速度差了幾倍。
然後,仔細看看
http://ww1.microchip.com/downloads/en/DeviceDoc/39775b.pdf 裏的FIGURE2-1,看是不是那裏設的不對,或者誤解了。
我最近做PIC18F2455也碰到類似的問題,最後才知道是自己資料沒看懂所致。

發表於: 2008/12/1 22:05
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PLL enable 後 UART 就有問題了
#3
中級會員
中級會員


查看用戶資訊
不, 很抱歉, 可能我沒寫清楚, 如同我寫的, 我 48 也試過了

>我的外部是 12MHz, 我試過48, 8, 6, ....等頻率. 皆無法運作
> #define F_OSC 48000000

發表於: 2008/12/1 16:22
曾經 狂奔 舞蹈 貪婪的說話, 隨著冷的 濕的 心腐化

個人的休閒小站
歡迎來參觀
http://www.elevior.com
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PLL enable 後 UART 就有問題了
#2
版主
版主


查看用戶資訊
如果你沒有 Enable PLL 的畫室跑 12MHz 的。如果 Enable PLL 後 12MHz 會現除三得到4MHz 後送給PLL產生 96MHz的頻率,經除二電路得到 48MHz 後送給 USB Peripheral 及 CPU, 如果 CPUDIV<0:1> 是除以1:1 的話,那你的 CPU 是執行 48MHz 的速度,所以 UART 就快了 4 倍,單然收不到正確的資料。

發表於: 2008/12/1 15:19
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... ]

教育訓練中心

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