ページ 11

XC8コンパイラでのPWM制御をしたいのですが、pwm.hがうまく取り込めません

Posted: 2014年6月14日(土) 17:33
by kerotan0820
質問をする場所を迷いましたが、ここで質問させていただくことにしました。
ここで聞くことでなかったらすみません。ご指摘ください。

今現在、以下の環境、条件で開発を始めました。
MPLAB X IDE
XC8コンパイラ
PIC 16F886

赤外線LEDやモーター制御などをするためにPWM制御を覚えたいと思い取り組んでいるのですがうまくいきませんでした。
プログラムを添付させていただきます。

コード:

/*
 * File:   main.c
 * Author: windows
 *
 * Created on 2014/06/14, 14:13
 *
 * PWM動作テストプログラム
 * PICは16F886を使用
 */

#pragma config  CPD = OFF,\
                BOREN = OFF,\
                IESO = OFF,\
                DEBUG = OFF,\
                FOSC = INTRC_NOCLKOUT,\
                FCMEN = OFF,\
                WDTE = OFF,\
                MCLRE = OFF,\
                LVP = OFF,\
                PWRTE = OFF,\
                WRT = OFF

#include <xc.h>
#include <./plib/pwm.h>
#define _XTAL_FREQ 4000000

void main(void) {
    TRISA = 0x00;       // 入出力設定
    TRISB = 0x00;       //
    TRISC = 0x00;       //
    PORTA = 0x00;       // ポート初期化
    PORTB = 0x00;       //
    PORTC = 0x00;       //
    OSCCON = 0b01110000;
    ANSEL = 0x00;
    ANSELH = 0x00;
    OpenPWM1();
    SetDCPWM1();
    SetOutputPWM1();
    ClosePWM1();

    return;
}
この中で
OpenPWM1();
SetDCPWM1();
SetOutputPWM1();
ClosePWM1();

という標準関数を利用しようとしているのですが、どれも「error: undefined symbols:」というエラーで使えません。
SetOutputPWM1()に関してはエディターに記述している段階で「Unable to resolve identifier SetOutputWPM1」と言われてしまいます。

pwm.h のインクルードに関してですが、#include <pwm.h>では取り込めなかったので自分でファイルの位置を指定しました。
すると pwm.h 内で取り込んでいるヘッダーまでも場所が違うとのことですべて勝手ながら書き換えてしまいました。
良くも悪くもその部分のエラーはとりあえず消えたのですが、その行動も標準関数が使えなくなっている原因ではないかと不安に思っております。

なにか思い当たる原因がある方がいらっしゃいましたらご教授お願いいたします。

Re: XC8コンパイラでのPWM制御をしたいのですが、pwm.hがうまく取り込めません

Posted: 2014年6月14日(土) 19:57
by softya(ソフト屋)
xc8は使ったこと無いんですが、検索してみたところplibがPIC18 ONLYとフォーラムに書かれてました。
なので強引にやっても、リンクか実行時にダメなんじゃないかと思います。

Re: XC8コンパイラでのPWM制御をしたいのですが、pwm.hがうまく取り込めません

Posted: 2014年6月14日(土) 21:45
by kerotan0820
softya(ソフト屋) さんが書きました:xc8は使ったこと無いんですが、検索してみたところplibがPIC18 ONLYとフォーラムに書かれてました。
なので強引にやっても、リンクか実行時にダメなんじゃないかと思います。
回答ありがとうございます。
なるほど…。
16F886のPWMのサンプルプログラムを拝見したのですが、何故か自分で関数を作っていたので不思議に思っていました。そのような理由なのですね…。
がんばってみます、ありがとうございました。