(夏季休業のお知らせ)

8月10日15時 から 20日まで発送・問合せ等のすべての業務をお休みいたします。
 

 

電子工作の知恵袋

 
 

 

PixiModule UART
USB-UART変換ケーブル
実動デモ


 

    *コンテンツはお客様ご自身のご判断と責任においてご利用ください。
     また、掲載内容を他に流用・転載することは一部・全てを問わず固くお断りいたします。
     引用する場合はリンク表示にてお願いいたします。
     


電子工作の知恵袋


汎用Cソースコードの説明3

 

 

    このページでは、当店提供の汎用Cソースコードを使います。

    PIC16F690マイコンモジュールで使用することができる各種Cソースコードはユーザーサポートページからダウンロードできます。

     

    また、ここでご説明する内容は当店の商品であるPIC16F690マイコンモジュールを前提としています。

    他社製マイコンボードでの作動は一切関知していませんのでご注意ください。 

      

     

     

     

     

     ソースコード2 からの続き。

      

    ソースコード1と2 で本体プログラムである main16f690.c について説明しました。

    このページは、本体プログラムからコールされる関数を記載したbios16f690.c を説明します。

     


    定義関数一覧

     

    当店提供の汎用関数である bios16f690.c には以下の関数が定義されています。

    いずれもPICの内蔵機能を利用するための関数です。

     

     

      //AD機能とポートの設定

      void adinit(unsigned char anselh,unsigned char ansel)

       

      //AD変換(8bit分解能)

      unsigned char ad(unsigned char channel)

       

      //タイマー初期化

      void timerinit(void)

       

      //PWMポート初期化

      void pwmportinit(void)

       

      //PWM開始

      void pwmstart(void)

       

      //PWM停止

      void pwmstop(void)

       

      //PWM周波数設定

      void pwmsetfreq(unsigned char prescale,unsigned char pr2data)

       

      //PWMデューティ設定

      void pwmsetduty(unsigned char setduty)

       

      //一定時間待ち

      void wait(unsigned char waittime)

       

      //UARTの初期化

      void usartinit(unsigned char br)

       

      //UART1バイト受信

      unsigned char rx1byte(void)

       

      //UART1バイト送信

      void tx1byte(unsigned char txdata)

     

      //EEPROM 1バイト読み込み New
      unsigned char eepromread(unsigned char ead)


       //EEPROM 1バイト書き込み New
      void eepromwrite(unsigned char ead,unsigned char edat)

     

     

     

     

    (1)AD機能とポートの設定

    void adinit(unsigned char anselh,unsigned char ansel)

     

    戻り値:なし

    指定パラメーター:使用チャネル指定用レジスタ anselh(範囲:0x00〜0xff)、ansel(範囲:0x00〜0xff)

    デフォルト値:なし

    使用例: adinit(0x00,0x04);

    その他:なし

    機能:以下の通り

     

      ポートにA/D機能を割り当てたい場合にこの関数で使う前にポートを指定します。

      尚、A/D機能を使用しない場合でもデフォルト値で指定する必要があります。

      指定の仕方は、PICのANSELレジスタとANSELHレジスタの値を指定します。

       

     

    ANSELレジスタ

bit7

bit6

bit5

bit4

bit3

bit2

bit1

bit0

AN7

AN6

AN5

AN4

AN3

AN2

AN1

AN0

PORTC

-bit3

PORTC

-bit2

PORTC

-bit1

PORTC

-bit0

PORTA

-bit4

PORTA

-bit2

*1固定

PORTA

-bit1

PORTA

-bit0

 

    ANSELHレジスタ

bit7

bit6

bit5

bit4

bit3

bit2

bit1

bit0

 

 

 

 

AN11

AN10

AN9

AN8

 

 

 

 

PORTB

-bit5

PORTB

-bit4

PORTC

-bit7

PORTC

-bit6

              *空白は1または0どちらでも可

      ANxはPICのポートに割り付けられているA/Dポートの名前です。

      その下に対応するポート名とどのビットなのかを表記しています。

      A/Dとして使うビットを1、使わないビットは0として値を決めます。

       

      例えば、PORTCのビット0をA/D入力端子として使用したい場合は、

       

        ANSEL=0x14、ANSELH=0x00

       

      となります。

     
     

     

    (2)AD変換(8bit分解能)

    unsigned char ad(unsigned char channel)

     

    戻り値: 指定したANxを8ビットA/D変換した値 0x00〜0xff

    指定パラメータ:チャネル番号(ANxのx部分) channel(範囲:0〜11)

    デフォルト値:なし

    使用例: temp=ad(0x02);

    その他:以下の通り

            基準電圧:電源電圧を使用

            変換時間:約34μS

    機能:以下の通り

      AN0〜AN11のいずれか1つを指定してA/D変換を行います。

      事前にadinit()の実行が必要です。

      A/D変換終了通知には割り込みを使用せず、変換が終了するまで待機します。

      変換には電源電圧を基準電圧として使用しますので、安定化電源推奨です。

     


     

     

     

    (3)タイマー初期化

    void timerinit(void)

     

    戻り値: なし

    指定パラメータ:なし

    デフォルト値:なし

    使用例: timerinit();

    その他:なし

    機能:以下の通り

      タイマー1の初期化:1mS周期割り込み

      タイマー2の初期化:RC5からのPWM用設定

      この関数はプログラムの初期化の段階で必ず実行してください。

     

     

     

     

     

    (4)PWMポート初期化

    void pwmportinit(void)

     

    戻り値: なし

    指定パラメータ:なし

    デフォルト値:なし

    使用例: pwmportinit();

    その他:なし

    機能:以下の通り

      RC5をPWM出力可能なように設定します。

      この関数実行以前のRC5ポートの入出力設定を上書きして出力側に強制変更します。

      実行と同時にRC5の出力はLになります。

     

     

     

     

     

     

    (5)PWM開始

    void pwmstart(void)

     

    戻り値: なし

    指定パラメータ:なし

    デフォルト値:なし

    使用例: pwmstart();

    その他:なし

    機能:以下の通り

      実行で、内部のPWM用タイマー2が作動しはじめ、RC5からPWM波形が出力されます。

      pwmportinitを事前に実行する必要があります。

     

     

     

    (6)PWM停止

    void pwmstop(void)

     

    戻り値: なし

    指定パラメータ:なし

    デフォルト値:なし

    使用例: pwmstop();

    その他:なし

    機能:以下の通り

      実行で、PWM用タイマーの作動を停止し、RC5のPWM出力がHまたはLのどちらかで停止します。

      停止時は、H・Lのどちらになるかは不定なので、電位を固定したい時は停止前にデューティを0%か100%に設定する必要があります。

     

     

     

     

     

    (7)PWM周波数設定

    void pwmsetfreq(unsigned char prescale,unsigned char pr2data)

     

    戻り値: なし

    指定パラメータ:PWM周波数設定用レジスタ prescale(範囲:0,1,2)、

               pr2data(範囲:0x01〜0xfe)              

    デフォルト値:なし

    使用例: pwmsetfreq(0x00,0xfe);

    その他:なし

    機能:以下の通り

      RC5から出力するPWMの周波数を設定します。

      PWM周波数は設定直後より反映されます。

      PWMの周波数は以下の式で計算します。

      pr2dataを小さくすることで周波数を上げることができますが、pr2dataは分解能にも関係するため、小さくするとその分 分解能が悪くなります。

      (PWM周波数の設定式)

      PWM周波数=OSC/4/(pr2data+1)/(4^prescale)

       

       

                     :OSC=8MHz固定

       

      (例)7843Hz:OSC=8MHz/PR2=0xfe/prescale=0

            1960Hz/OSC=8MHz/PR2=0xfe/prescale=1

             490Hz/OSC=8MHz/PR2=0xfe/prescale=2

     

     


     

     

     

    (8)PWMデューティ設定

    void pwmsetduty(unsigned char setduty)

     

    戻り値: なし

    指定パラメータ:オン期間値 setduty(範囲:0x00〜0xff)

    デフォルト値:なし

    使用例: setduty(0x7f);

    その他:なし

    機能:以下の通り

      RC5から出力するPWMのオンの期間を設定します。  

      設定値とデューティ比の関係は以下の通りです。

       

              設定範囲:0<=setduty<=(PR2+1)

       

            (例)PR2=0xfeの場合 

                  setduty=0x00で オンデューティ比   0%

                  setduty=0xffで オンデューティ比 100%

       

              *0xffまで設定可能ですが、PR2+1を超えた設定

               は全て100%になる

              *PR2はPWM周波数設定関数pr2dataをいう

     

     

     

     

     

     

    (9)一定時間待ち

    void wait(unsigned char waittime)

     

    戻り値: なし

    指定パラメータ: 待機時間 waittime(範囲0x00〜0xff)

    デフォルト値:なし

    使用例: wait(100);

    その他:なし

    機能:以下の通り 

      ソフトウエアを用いた簡易タイマーです。

      waittimex1mS分ウエイトします。

      尚、ソフトウエアタイマーで精度が悪いため、特に問題ない場合にのみ使用してください。

      特に割り込みが途中でかかると、タイマー時間がその分伸びますので注意が必要です。

      このタイマープログラムはHI-TECHのCコンパイラーで8MHzクロックに合わせて設定されています。

      他のコンパイラを使用する場合は内部定数の再調整が必要です。

     

     

     

     

     

    (10)UARTの初期化

    void usartinit(unsigned char br)

     

    戻り値: なし

    指定パラメータ: ボーレート br(範囲0x00〜0xff)

    デフォルト値:なし

    使用例: usartinit(207);

    その他:なし

    機能:以下の通り 

      UASRT機能の初期化(使用前に実行すること)を行います。

      送受信パラメータは固定で、start1bit,data8bit,stop1bit,no parityとなります。

      ボーレートの設定値は以下の計算式で算出します。    

          ボーレート:OSC/(4*(br+1))

              (例)  br=207  :9600bps

                      br=103  :19.1kbps

                      br= 51  :38.2kbps

                      br= 34  :57.6kbps

                      br= 16  :115.2kbps

          

      受信割り込みは許可、送信割り込みは不許可の設定となります。

     

     

     

     

    (11)UART1バイト受信

    unsigned char rx1byte(void)

     

    戻り値: 受信した1バイト値

    指定パラメータ: なし

    デフォルト値:なし

    使用例: temp=rx1byte();

    その他:なし

    機能:以下の通り 

      受信バッファにデータがセットされるまで待機し、セットされたデータがあれば読み取り、そのデータ値を返し終了します。

      尚、データを読み取るまで待機するため、データが確実にあることがわかる割り込み中での使用を推奨します。

     

     

     

     

     

     

     

    (12)UART1バイト送信

    void tx1byte(unsigned char txdata)

     

    戻り値: なし

    指定パラメータ: 送信したいデータ1バイト値 txdata(範囲0x00〜0xff)

    デフォルト値:なし

    使用例: tx1byte();

    その他:なし

    機能:以下の通り 

      USARTの送信バッファにデータをセットし自動送信します。

      もし、送信バッファが空いていない場合は、空くまで待機します。

       

     

     

     

     

     (13)EEPROM 1バイト読み込み New
    unsigned char eepromread(unsigned char ead)

     

    戻り値: 指定アドレスのEEPROMの値 1バイト

    指定パラメータ: 読み取りたいEEPROMのアドレス ead(範囲0x00〜0xff)

    デフォルト値:なし

    使用例: eepromread(0x07);

    その他:なし

    機能:以下の通り 

      内蔵EEPROMの先頭を0としたアドレスを指定し、そのアドレスで指定されたEEPROMの内容を読み取り返す。

       

     



     (14)EEPROM 1バイト書き込み New
    void eepromwrite(unsigned char ead,unsigned char edat)

     

    戻り値: なし

    指定パラメータ: 値を書き込みたいEEPROMのアドレス ead(範囲0x00〜0xff)
               書き込む値 1バイト edat(範囲0x00〜0xff)

    デフォルト値:なし

    使用例: eepromwrite(0x07,0x55);

    その他:なし

    機能:以下の通り 

      内蔵EEPROMの先頭を0としたアドレスを指定し、そのアドレスで指定されたEEPROMに値を書き込む。
      書き込みには数十mS必要。




       

     


カテゴリ
電子工作の知恵袋 最新情報

  電子工作大好き社員募集中! 株式会社ヌマタR&D