25章:AE-USBPIC44基板間のシリアル通信USART(非同期)

    作成2015.09.21

     AE-USBPIC44基板2個を使用して、PIC18F4553のシリアル通信USART(非同期)のプログラム方法を理解します。

  1. 参照プログラム
     以下のアドレスを参照しました。
    「https://electrosome.com/uart-pic-microcontroller-mplab-xc8/」にジャンプする。
     PIC 16F877Aを前提に解説していますが、シリアル通信USART(非同期)部分はPIC18F4553もほぼ同じです。

  2. シリアル通信USART(非同期)評価回路図
     参照プログラムでは、8個のスイッチと8個のLEDをしようしていますが、AE-USBPIC44基板に実装してあるSW1とLEDのみの使用としました。





  3. シリアル通信USART(非同期)評価回路外観
     シリアル通信USART(非同期)評価回路外観を以下に示します。
    *USBから電源を供給しますが、USB通信は使用しません。




  4. シリアル通信USART(非同期)評価用ソースプログラムム
    (1)秋月電子通商サンプルプログラム「MPLABを使った使用例1」ソースプログラム
    「newmain18.cの内容変更ファイル」にいく。
    をベースに修正します。

    (2)シリアル通信USART(非同期)機能の追加
    「https://electrosome.com/uart-pic-microcontroller-mplab-xc8/」にジャンプする。
    を参照して修正を加えます。

    (3)AE-USBPIC44基板用シリアル通信USART(非同期)評価用ソースプログラム(送信側)
     AE-USBPIC44基板用シリアル通信USART(非同期)評価用ソースプログラム(送信側)を以下に示します。
    「USART(非同期)評価用ソースプログラム(送信側)」にいく。

    (4)AE-USBPIC44基板用シリアル通信USART(非同期)評価用ソースプログラム(受信側)
     AE-USBPIC44基板用シリアル通信USART(非同期)評価用ソースプログラム(送信側)を以下に示します。
    「USART(非同期)評価用ソースプログラム(受信側)」にいく。


  5. 送信側void main(void)概要
     送信側void main(void)を以下に示します。
    void main(void)
    {
        init();//初期設定
        UART_Init(9600);//UART初期設定、ボーレイト設定
        while(1)
        {
            if(SW1==0)//SW1=ON
            {UART_Write('j');}
            else
            {UART_Write('a');}
            __delay_ms(10);
        }
    }
    
    (1)ボーレイト9600で初期設定します。
    (2)SW1がONのときアスキーコード'j'を送信します。
    (3)SW1がOFFのときアスキーコード'a'を送信します。
    (4)次の送信まで10ms待ちます。


  6. 受信側void main(void)概要
     受信側void main(void)を以下に示します。
    void main(void)
    {
        init();//初期設定
        UART_Init(9600);//UART初期設定、ボーレイト設定
        //割り込み使用時は以下を有効にします。
        //RCIF = 0; //reset RX pin flag
        //RCIP = 1; //high priority
        //RCIE = 1; //Enable RX interrupt
        //PEIE = 1; //Enable pheripheral interrupt (serial port is a pheripheral)
        //INTCONbits.GIE = 1;//Global Interrupt Enable bit
        while(1)
        {
            if(UART_Data_Ready())
            {
                char c = UART_Read();
                 if(c=='j'){LED=1;}
                 else{LED=0;}
                __delay_ms(10);
            }
        }
    }
    
    (1)ボーレイト9600で初期設定します。
    (2)この例では割込み処理を使用しません。
    (3)受信レジスターのデータを1バイト読取ます。
    (4)受信データがアスキーコード'j'のときLEDを点灯します。
    (5)受信データがアスキーコード'a'のときLEDを消灯します。
    (6)次の受信まで10ms待ちます。

  7. シリアル通信USART(非同期)信号波形
    (1)ボーレイト9600におけるアスキーコード'a'=0x61と'j'=0x6Aの信号波形とボーレイト実測結果を以下に示します。
    *ボーレイト9600は設定値と実測値が良く一致します。



    (2)ボーレイト76800におけるアスキーコード'a'=0x61と'j'=0x6Aの信号波形とボーレイト実測結果を以下に示します。
    *ボーレイト76800は設定値と実測値が良く一致します。



    (3)ボーレイト115200におけるアスキーコード'a'=0x61と'j'=0x6Aの信号波形とボーレイト実測結果を以下に示します。
    *ボーレイト115200は設定値と実測値が良く一致します。





  8. ボーレイトの計算
    (1)ボーレイト設定定数の計算式
      unsigned int x;
      BRGH = 1;                                     //Setting High Baud Rate
      x = (_XTAL_FREQ - baudrate*16)/(baudrate*16); //SPBRG for High Baud Rate
      if(x>255)                                       //If High Baud Rage Required
      {
        BRGH = 0;
        x = (_XTAL_FREQ - baudrate*64)/(baudrate*64);   //SPBRG for Low Baud Rate
      }
    

    (2)ボーレイト設定定数xとボーレイトの関係式
    *BRGH = 0の時
    ボーレイト=_XTAL_FREQ/(64*(x+1))

    *BRGH = 1の時
    ボーレイト=_XTAL_FREQ/(16*(x+1))

    (3)具体的な計算結果
     具体的な計算結果を以下の表に示します。
    ボーレイト960076800115200
    _XTAL_FREQ480000004800000048000000
    BRGH011
    設定値(x)773825
    計算ボーレイト961576923115385


  9. シリアル通信USART(非同期)まとめ
    (1)PIC 16F877Aを前提したサンプルプログラム(https://electrosome.com/uart-pic-microcontroller-mplab-xc8/)が大変参考になりました。
    (2)PIC18F4553とPIC 16F877Aとでは、機能が大幅に異なるのですが、シリアル通信USART(非同期)に限ればほぼ同じでした。
    (3)本サンプルプログラムは、単純化されており、シリアル通信USART(非同期)プログラムの理解に最適でした。
    (4)本サンプルプログラムは割込み処理を使用しておらず、処理の流れが単純です。
    (5)反面文字列の高速通信には、てきしません。
    (6)実用的には、本サンプルプログラムをベースに割込み処理を追加する必要があります。
    (7)PIC 16F877Aを前提したサンプルプログラム(https://electrosome.com/uart-pic-microcontroller-mplab-xc8/)において、ボーレイト設定の計算部分にミスがあり、ボーレイト9600では正確に設定されるが、ボーレイト76800とボーレイト115200において誤差が大きくなる問題がありました。
    (8)ボーレイトの計算ミスに関しては、修正しました。




26章:AE-USBPIC44基板使用シリアル-USB変換モジュールに行く。

トップページに戻る。