PWM を使ったSine波の生成について
今、以前に投降した正弦波発振器とは別に、PIC16F88のPWMを使って正弦波を発生する小型の回路を作ろうと考えています。
以下のようなプログラムを作りました。
コンパイルは通るのですが、「error: (1250) could not find space (128 bytes) for variable F994」と「could not find space (128 bytes) for variable _data」というエラーメッセージがでてビルドができません。
どの個所が悪いのでしょうか教えてください。
また、開発環境については、MPLAB X IDE(バージョン3.20)でコンパイラーはXC8(バージョン3.60)を使用しています。
///////////////////////////以下プログラム/////////////////////////////////////////
#include <pic.h>
#define _XTAL_FREQ 4000000
//CONFIGは省略
void ioport(void);
void setCcpMode(unsigned char);
void setPwmPeriod(unsigned char);
void setPwmDuty(unsigned int);
void ConfigTMR2(unsigned char set);
void main(void) {
unsigned int cnt;
unsigned char data[128]={128,134,140,146,152,159,165,171,176,182,188,193,199,204,209,213,218,222,226,230,234,237,240,243,246,248,250,252,253,254,255,255,256,255,255,254,253,252,250,248,246,243,240,237,234,230,226,222,218,213,209,204,199,193,188,182,176,171,165,159,152,146,140,134,128,121,115,109,103,96,90,84,79,73,67,62,56,51,46,42,37,33,29,25,21,18,15,12,9,7,5,3,2,1,0,0,0,0,0,1,2,3,5,7,9,12,15,18,21,25,29,33,37,42,46,51,56,62,67,73,79,84,90,96,103,109,115,121};
ioport();
setCcpMode(CCP_PWM_ACTIVE_HIGH);//CCP1CONに0b00001100をセット
setPwmPeriod(255);//PR2に255をセット
setPwmDuty(0);
ConfigTMR2(TMR2_DIV4_ON);//TMR2のプリスケーラーを4倍に、そしてTMR2をON
while(1){
//duty=adconv(0);
for(cnt=0;cnt<128;cnt++){
setPwmDuty(data[cnt]);
}
}
}
void ioport(void){
OSCCON=0x60;
CMCON=0x07;
TRISA=0x00;
ANSEL=0x00;
PORTA=0x00;
TRISB=0x00;
PORTB=0x00;
}
void setCcpMode(unsigned char mode)
{
CCP1CON= mode;
}
void setPwmPeriod(unsigned char T)
{
PR2=T;
}
void setPwmDuty(unsigned int duty)
{
unsigned char tmp;
tmp=(unsigned char)((duty & 3)<<4);
CCP1CON |=tmp;
tmp=(unsigned char)(duty>>2);
CCPR1L=tmp;
}
void ConfigTMR2(unsigned char set)
{
T2CON=set;
}
補足
ありがとうございます。 teretou3さんのおっしゃるように、書いてみたんですが、やはり動きません。 原因が別にあるのではと思っています。 新たに質問を作りたいと思っていますので、また、よろしくお願いいたします。