上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- -- l スポンサー広告 l top
IC16F1705でDAC動作+オペアンプ動作ができました。
 
とりあえず出してみた正弦波です。
やっぱり8ビットの波形は綺麗ですね。試しにFFTを出してみましたが、高調波もほとんどない正弦波になっているようです。

ソースは以下の通りです。やっぱりC言語はアセンブラと比べて楽です。
256ステップのテーブルを10usのウェイトを入れながら回しているので、それだけだと計算上の周波数はf = 1/(256*10^-6) =390Hzです。実測値は263Hzとでているので、for分の処理、配列からのデータ取り出し、DAC設定、で数uSかかっている模様です。妥当な所かと思います。
「スポンサードリンク」

style="display:block"
data-ad-client="ca-pub-0620260288102702"
data-ad-slot="9773401572"
data-ad-format="auto">




//*************************************************
// PIC16F1705 DAC test
// 2015/01/11
//*************************************************

#include xc.h     // ※includeはファイル名を<と>で囲んでください。
#include stdio.h // FC2アップロード時に<>が消えてしまうため。
#include stdlib.h
#include math.h

#define _XTAL_FREQ 32000000

#pragma config FOSC = INTOSC // use intosc , clkout = IO
#pragma config WDTE = OFF // WDT off
#pragma config PWRTE = ON // PWT on
#pragma config MCLRE = OFF // MCLR disabled
#pragma config CP = OFF // Memory code protection disabled
#pragma config BOREN = ON // BOR enabled
#pragma config CLKOUTEN = OFF // CLKOUT = IO
#pragma config IESO = OFF // IESO disabled
#pragma config FCMEN = OFF // FCMEN disabled
#pragma config WRT = OFF // FLASH write protection disabled
#pragma config PPS1WAY = OFF // PPSWAYdisabled
#pragma config ZCDDIS = ON // ZCD enabled
#pragma config PLLEN = ON // 4xPLL enabled
#pragma config STVREN = ON // Stack overflow reset enabled
#pragma config BORV = HI // BOR voltage = HI
#pragma config LPBOR = OFF // PLBOR disabled
#pragma config LVP = OFF // LOW voltage program disabled

int sin0[256];

void main()
{
// IO initialization
OSCCON = 0b01110000 ; // internal osc 32MHz with 4xPLL
ANSELA = 0b00000000 ; // PORTA all digital
ANSELC = 0b00000000 ; // PORTC all digital
TRISA = 0b11111111 ; // PORTA all output
TRISC = 0b00000000 ; // PORTC all output

// DAC & OPAMP1 initialization
DAC1CON0 = 0b10110000; // DAC enable ,OUT1/2 enable
OPA1CON = 0b11010010; // OPAMP1 Enable , DAC-> + , OUT-> -


while(1) {

int i;

// Making sin table

for(i=0;i<256;i++) {
sin0[i] =(int)(128*sin(3.1415926*2*(float)i/254)+128);
}

// Sin wave loop
while(1) {
for (i = 0; i < 255; i++) {
DAC1CON1 =sin0[i];
__delay_us(10);
}
}
}

}




それではまたです。
2015.01.11 Sun l PICマイコン l コメント (0) l top

コメント

コメントの投稿












上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。