こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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;
}

投稿日時 - 2016-01-28 17:44:23

QNo.9118488

すぐに回答ほしいです

質問者が選んだベストアンサー

unsigned char data[128]

const unsigned char data[128]
const (read_only) 属性にしてコンパイル通るようになりました RAM でなく ROM 上にデータ確保

(1) char data[] 設定データに 256=0x100 がありunsigned char(0-255)数値範囲をオーバーしています 
(2) PWMデータ更新にタイマーで同期取る必要があるのでは?

投稿日時 - 2016-01-29 10:28:17

お礼

返事が遅れました。

その後、ソースコードを変更した結果、解決しました。

投稿日時 - 2016-04-22 10:01:57

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-