View Single Post
Old 09-05-2008, 02:16 PM   #3
trieutuan_vnu
Đệ tử 1 túi
 
trieutuan_vnu's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 14
:
Sory anh, em có gửi kem file 00_program.rar mà. Trong đó có hàm khởi tạo sóng sin reference, hàm sin này sử dụng 4 bít, nó điều khiển và cho ra sóng sin sau khi qua bộ biến đổi dac r-2r network. Vả sau đó là qua bộ lọc thông thấp để làm mịn tín hiệu(Đo ra miột tín hiệu rất đẹp_cái này đã làm được và em đã kiểm tra rồi ko sai gì cả)Tín hiệu này sau khi được hình thành sẽ cung cấp cho 1 sensor(cấu tạo theo kiểu cầu trở) tín hiệu từ senor ra sẽ có tần số đúng bằng tần số của tín hiệu reference tạo ra.
-Ở đây em chỉ muốn hỏi anh là để nhân tín hiệu sau khi biến đổi ADC với tín hiệu referen em tạo ra theo bảng thì nhân như thế nào.

///==============Hàm tạo tín hiệu reference==============
#include <p30f4011.h>
#include "common.h"
#include "dsp.h"
volatile unsigned char _sinTableIndex;
extern fractional* ref_input_s90;
extern fractional* ref_input;
static unsigned char sinTable[] = {5,6,7,8,9,9,10,10,10,10,10,9,9,8,7,6,5,4,3,2,1,1, 0,0,0,0,0,1,1,2,3,4};
static unsigned char sinTable_s90[] = {10,10,10,9,9,8,7,6,5,4,3,2,1,1,0,0,0,0,0,1,1,2,3, 4,5,6,7,8,9,9,10,10};
void __attribute__((__interrupt__,no_auto_psv)) _T2Interrupt( void )
{
_sinTableIndex++;
_sinTableIndex &= 0b00011111;

LATE = (sinTable[_sinTableIndex]);
*ref_input = (sinTable[_sinTableIndex]);
*ref_input_s90 = (sinTable_s90[_sinTableIndex]);
IFS0bits.T2IF = 0; // Xoa co ngat
}


#include "p30f4011.h"
#include "common.h"
#include "dsp.h"


//extern fractional input_I_signal[NUMSAMP];
//extern fractional input_Q_signal[NUMSAMP];
//extern fractional output_I_signal[NUMSAMP];
//extern fractional output_Q_signal[NUMSAMP];
extern unsigned int doFilterFlag;
// extern int sample;

extern fractional* i_Ptr;
//extern fractional* i1_Ptr;
//extern fractional* i2_Ptr;







void Init_ADC(void);


void __attribute__((__interrupt__)) _ADCInterrupt(void);
void Init_ADC(void)
{
/*
ADCON1bits.FORM = 3; // 1.15 fractional //number format. // signed fractional

ADCON1bits.SSRC = 2; // Timer 3 cham dut lay mau va kich hoat

ADCON1bits.ASAM = 1; // Khoi dong che do tu dong lay mau

ADCON2bits.SMPI = 0; // ngat sau moi mau thu duoc;


ADCON3bits.SAMC = 31;
ADCON3bits.ADCS = 63;



ADCHS = 0x0008; // Kenh 8 doc tin hieu giua AN8 va AVss
ADCSSL = 0x0000; // Khong quet cac ngo vao
ADPCFG = 0xFFFF;
ADPCFGbits.PCFG8 = 0;


IFS0bits.ADIF = 0; // xoa co ngat ADC
IEC0bits.ADIE = 1; // cho phep ngat ADC

ADCON1bits.ADON = 1; // bat ADC
T3CONbits.TON = 1; // bat timer 3


*/
ADCON1bits.FORM = 3; // 1.15 fractional
ADCON1bits.SSRC = 2; // Timer 3 cham dut lay mau va kich hoat
ADCON1bits.ASAM = 1; // Khoi dong che do tu dong lay mau
ADCON1bits.SIMSAM = 0; // Samples multiple channels individually in sequence


ADCON2bits.SMPI = 0; // ngat sau moi mau thu duoc;
ADCON2bits.CHPS = 0;

// ADCON2=0;

ADCON3bits.SAMC = 1; // dung 1TAD cho lay mau
ADCON3bits.ADCS = 3; // dung clock he thong,TAD = 2xTcy = 250 ns


ADCHS = 0x0008; //Kenh 0 doc tin hieu giua AN8 va AVss


ADCSSL = 0x0000; //Khong quet cac ngo vao


ADPCFG = 0xFFFF;
ADPCFGbits.PCFG8 = 0; // AN8 la ADC con lai la digital

IFS0bits.ADIF = 0; // xoa co ngat
IEC0bits.ADIE = 1; // cho phep ngat


ADCON1bits.ADON = 1; // bat modul ADC

}
void __attribute__((__interrupt__)) _ADCInterrupt(void)
{
//Clear the Timer3 Interrupt Flag
IFS0bits.T3IF = 0;

// sample = ADCBUF0; // int format
*i_Ptr = ADCBUF0;




doFilterFlag = 1;
IFS0bits.ADIF = 0;
}
trieutuan_vnu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn