2009年12月29日 星期二

如何自動計算 SPBRG

Introduction

本文說明如何自動計算 PIC18 MCU 的 SPBRG (Baud Rate Generator)。

Highlights

本文討論下列項目:

  • Baud Rate 計算公式
  • 自動計算 SPBRG
  • PICMultiCalc 工具

Baud Rate 計算公式

  • USART 的 Baud rate 主要是由 SPBRGH (high byte) 和 SPBRG (low byte) 這兩個位元組決定
  • BRGH (TXSTA<2>) 決定 High 或 Low speed baud rate, 將 BRGH 設為 1 可讓實際值更接近想要的 baud rate
  • BRG16 (BAUDCON<3>) 用來決定 8-bit 或 16-bit mode, 當 BRG16 設為 1 時,就要搭配 SPBRGH 來設定 baud rate
  • 設定 BRGH 或 BRG16 可以減少 baud rate error

Baud rate 計算公式表:

image

SPBRG 計算範例:

image

自動計算 SPBRG

既然知道計算方法,就可以寫成程式自動計算 SPBRG:

註:

  • 按照 datasheet 的說法,原本 8-bit mode 下的 SPBRG 計算式應為 (((FOSC)/BAUD_RATE)/16 - 1),因為 C preprocessor 會無條件捨去小數位,115200bps 算得的 SPBRG 為 20 比用計算機算得的值少 1,錯誤率超過了 3%。後來我參考 Microchip TCP/IP Demo App 的寫法,將計算式改成 ((((FOSC)+8*BAUD_RATE)/BAUD_RATE)/16 - 1) 後,算出的 SPBRG 即為 21,錯誤率降至 1.36%。16-bit mode 則加上 32 * BAUD_RATE,至於 8*BAUD_RATE 或 32*BAUD_RATE 是怎麼算來的,原因不詳。

使用範例:

執行結果:

image

PICMultiCalc 工具

另一個替代方案:有網友寫了一支方便的工具 PICMultiCalc,可以用來計算 SPBRG。以 PIC452 為例,只要輸入 CPU 頻率 40MHz,並設定好想要的 baud rate 38400,PICMultiCalcu 便立刻算出適當的 SPBRG 值,接下來把算出的 SPBRG 值填到程式裏,Baud rate 的設定就完工了:

image

參考資料

0 意見: