忍者ブログ

Fグループ電子工作講座

秋月電子SH7125ボードで始めるマイコン開発

PWM機能を試す

前々回前回で作成したSH7125のPWM機能を試します。
※2017/05/02 説明内のフォルダ名が間違っていたので修正しました。

ファイルはとりあえず
 汎用IO設定ソース:io_setup.c
 汎用IO設定ヘッダ:io_setup.h
 PWM設定ソース:intMTU.c
 PWM設定ヘッダ:intMTU.h
の4つを使います。

プロジェクトの準備~ビルド

とりあえず付属CDのコンパイル編に従ってプロジェクトを作ります。

1)HEWを起動・新規プロジェクトワークスペースの作成


ワークスペース名:sh7125_PWM_test(任意で構いません。ワークスペース名に半角カッコ()を使うと動かない事があります。
プロジェクト名:sh7125_PWM_test(ワークスペース名と同じでOK)
ディレクトリ:標準設定では「C:\WorkSpace」内に作成されます。
CPU種別、ツールチェイン:SuperHって名前が入っている方。多分標準で選択されているはず。
この項はこれでOKです。

次のページ CPU:使用するCPUとC言語を機械語に変換する機能(ツールチェイン)を選択します。

ツールチェインバージョン:標準選択で構いません。インストールしたHEWのバージョンで多少違います。
CPUシリーズ:SH-2
CPUタイプ:SH7125
以降は標準選択を使用するので完了ボタンでもOKです

オプション:よく分かりません。標準選択で構いません。
生成ファイル:よく分かりません。標準選択で構いません。
標準ライブラリ:多分使用したいライブラリの選択です。標準選択で構いません。
スタック領域:多分メモリ関係の設定です。標準選択で構いません。
ベクタテーブル:よく分かりません。標準選択で構いません。
デバッガ:シミュレータデバッガ関連の様ですがよく分かりません。標準選択で構いません。
生成ファイル名:自動生成されるファイル一覧が表示されます。とくに選択する要素はありません。

2)ファイルの追加

一旦HEWは置いておいてプロジェクトを作成したフォルダを開きます。
今回の設定では C:\WorkSpace\sh7125_PWM_test です。
sh7125_PWM_testフォルダの中にsh7125_PWM_testフォルダがあるので開きます。
ここにダウンロードしたファイル4つを入れます。

3)ファイルの登録

HEWに戻って操作します。
メニューよりプロジェクト→ファイルの追加


作成(ダウンロード)したファイル4つを登録します。

1つづつ登録しても、4つまとめて登録してもどちらでも構いません。

4)ファイルの編集1:割り込み機能の有効化

ファイルが追加できたところで、割り込み関数を登録します。
左側の一覧の「C source file」よりresetprg.cを開いて編集します。
36行目付近
#define SR_Init    0x000000F0

#define SR_Init    0x00000000
へ変更します。

5)ファイルの編集2:割り込み関数の登録

ファイルが追加できたところで、割り込み関数を登録します。
左側の一覧の「C source file」よりintprg.cを開いて編集します。
195行目付近
void INT_MTU2_0_TCIV0(void){/* sleep(); */}

void INT_MTU2_0_TCIV0(void){MTU20_INT_OVF();}
へ変更します。

6)ファイルの編集3:メインファイルの編集

続いてメインファイルを編集します。
sh7125_PWM_test.cを開いて中身をまるごと書き換えます。

#include "io_setup.h"    //汎用IO機能の読込
#include "intMTU.h"        //PWM機能の読込

void main(void){
    hardware_setup();    //汎用IOの初期化
    Init_MTU();            //PWM機能の初期化
   
    while(1){
        if(get_sw1()){    //スイッチで出力を切り替える
            set_pwm( PWM_PE0 , 50 );    //PWM出力:ポート、出力 0-1023
            set_pwm( PWM_PE1 , 100 );    //PWM出力:ポート、出力 0-1023
        }else{
            set_pwm( PWM_PE0 , 200 );    //PWM出力:ポート、出力 0-1023
            set_pwm( PWM_PE1 , 400 );    //PWM出力:ポート、出力 0-1023
        } // end if
    } // end while
}

これでPWMを使用する準備ができました。
ビルドしてエラーが出なければ成功です。

Cannot find "C" specified in option "start"との警告が出ます。
Interface様の2006/05/17(水)の項に解説と対処法がありました。
http://www.cqpub.co.jp/interface/editors/yamaguchi/


書き込み~動作確認。

書き込んで実行します。
書き込んで実行してください。
LEDの赤と緑が微妙に光っていれば成功です。
SW1を切り替えるとLEDの明るさが変わるはずです。

また、電源を入れた状態でボードを振ると2色のLEDが点滅していることが確認できます。
SW1を切り替えるとデューティー比が変わるので点灯時間が変わる事が分かると思います。


AD変換とPWMを組み合わせる

AD変換の回で作成したプログラムと組み合わせてみます。

ファイルは
 AD変換設定ソース:ADConv.c
 AD変換設定ソース:ADConv.h
の2つを追加します。
追加方法はPWMのファイルと同じです。

組み合わせ1

メインファイルを下記に変更します。
#include "io_setup.h"    //汎用IO機能の読込
#include "intMTU.h"        //PWM機能の読込
#include "ADConv.h"        //AD変換機能の読込

void main(void){
    hardware_setup();    //汎用IOの初期化
    init_MTU();            //PWM機能の初期化
    init_ADC();            //AD変換機能の初期化
  
    while(1){
        check_ai();    //AD変換を実行
        set_pwm( PWM_PE0 , get_ai(0) );    //PWM出力:ポート、出力 0-1023
        set_pwm( PWM_PE1 , get_ai(1) );    //PWM出力:ポート、出力 0-1023
    } // end while
}
※2016/12/20に公開したAD変換の初期化関数名をInit_ADCからinit_ADCへ変更しております。

これでPF0、PF1に接続した可変抵抗のAD変換値に反応してLEDの明るさが変わるようになります。

組み合わせ2

メインファイルを下記に変更します。
#include "io_setup.h"    //汎用IO機能の読込
#include "intMTU.h"        //PWM機能の読込
#include "ADConv.h"        //AD変換機能の読込

void main(void){
    short out=0;
    hardware_setup();    //汎用IOの初期化
    init_MTU();            //PWM機能の初期化
    init_ADC();            //AD変換機能の初期化
  
    while(1){
        check_ai();    //AD変換を実行
        out=(get_ai(0)-512)*2;                //AD変換値を -1013 - 0 - 1013 に変換
        set_pwm2( PWM_PE0 ,PWM_PE1 , out );    //PWM出力:ポートA,B、出力 -1023-0-1023
    } // end while
}
これでPF0に接続した可変抵抗のAD変換値に反応して2つのLEDの明るさが排他的に変わります。

関連:当ブログで扱うSH7125の特殊機能一覧
PR

コメント

プロフィール

HN:
ぼんどF博士
性別:
男性

最新コメント