Bộ tạo dao động DTMF

Tài liệu Bộ tạo dao động DTMF: BÀI BÁO CÁO THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU Họ và tên: Trần Công Quang Mã số SV: 910473D Nhóm: 4. Lớp: 09DD2N. Ngày làm TN: Thứ ba ngày 07 tháng 05 năm 2009 – TN Ca: 4 Chiều. BÀI 2: BỘ TẠO DAO ĐỘNG DTMF Phần1: TÌM HIỂU VỀ KIT TMS320C6713: Giới Thiệu: _ Thí nghiệm này là thực hành sử dụng phần mềm Code Composer Studio và TI-DSP Starter Kit (DSK) để hiện thực mạch phát tone DTMF. Mục Đích: _ Qua thí nghiệm này: Ta sẽ nắm rõ quy trình thực hiện các giải thuật xử lý số tín hiệu trên các chip DSP, đồng thời hiểu được nguyên tắc tạo tín hiệu quay số DTMF trong mạng điện thoại công cộng. Các nội dung sau sẽ cho ta hiểu các mục tiêu trên có thể đạt được qua các nội dung sau: • Lập trình 4 công tắc vị trí (DIP switch) • Điều khiển LEDs qua DIP switches, • Xuất tín hiệu DTMF ra codec. PHẦN THÍ NGHIỆM: Tương tự bài thí nghiệm số 1 ta cũng chuẩn bị thí nghiệm: Kết nối DSK với máy tính bằng cáp USB. Cấp nguồn cho DSK. Kết nối loa vào jack cắm headphone. Reset board mạch bằng cac...

doc11 trang | Chia sẻ: hunglv | Lượt xem: 1848 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Bộ tạo dao động DTMF, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
BÀI BÁO CÁO THÍ NGHIỆM XỬ LÝ SỐ TÍN HIỆU Họ và tên: Trần Công Quang Mã số SV: 910473D Nhóm: 4. Lớp: 09DD2N. Ngày làm TN: Thứ ba ngày 07 tháng 05 năm 2009 – TN Ca: 4 Chiều. BÀI 2: BỘ TẠO DAO ĐỘNG DTMF Phần1: TÌM HIỂU VỀ KIT TMS320C6713: Giới Thiệu: _ Thí nghiệm này là thực hành sử dụng phần mềm Code Composer Studio và TI-DSP Starter Kit (DSK) để hiện thực mạch phát tone DTMF. Mục Đích: _ Qua thí nghiệm này: Ta sẽ nắm rõ quy trình thực hiện các giải thuật xử lý số tín hiệu trên các chip DSP, đồng thời hiểu được nguyên tắc tạo tín hiệu quay số DTMF trong mạng điện thoại công cộng. Các nội dung sau sẽ cho ta hiểu các mục tiêu trên có thể đạt được qua các nội dung sau: • Lập trình 4 công tắc vị trí (DIP switch) • Điều khiển LEDs qua DIP switches, • Xuất tín hiệu DTMF ra codec. PHẦN THÍ NGHIỆM: Tương tự bài thí nghiệm số 1 ta cũng chuẩn bị thí nghiệm: Kết nối DSK với máy tính bằng cáp USB. Cấp nguồn cho DSK. Kết nối loa vào jack cắm headphone. Reset board mạch bằng cach nhấn nút reset, các LEDs sẽ nhấp nháy và đồng thời có tiếng beep báo hiệu phần codec tích hợp trên board mạch hoạt động tốt. Chạy tiện ích 6713 DSK Diagnostic Utility để kiểm tra các chức năng của DSK. Bảo đảm rằng DSK vượt qua được tất cả các test. Tiến trình thí nghiệm: Tạo Project mới: Mở chương trình DSK 6713: Menu Project àNew…à Project Name: ta đặt tên project Bài 2 (tùy ý). Location: Ta lưu trong MyProjects. Taget: TMS320C67XX. Ta được như sau: Để có Soucre cho bài thí nghiệm số 2 này ta Add soucre vào thư mục Soucre trong Project Bai 2.pjt: Với soure là tất cả các File “ *.c ”, trong Foder: C source, và Foder C source trong Foder: dtmf_generator_713, Tương tự như hình sau: Tiếp theo ta Add file dtmf_generator.cdb. Trong Foder dtmf_generator_c6713. Như sau: Tiếp theo ta copy thư mục “C source” trong thư mục “dtmf_generator_c6713” vào trong: Các bước config của Bài thí nghiệm số 2 trong khi tạo Projects cho DSK6713_Kit trong môi trường Code Composer Studio V3.1 Option -> modify Program/Project Load: Load Program After Build  Project -> Build Option ->: Compiler -> Preprocessor -> Basic -> Target version: C6710X (mv6710)  Linker -> Basic -> Output Module: Absolute Excutable (-a)  Linker -> Basic -> Library Search Path (-i): $(Install_dir)\c6000\dsk6713\lib  Linker -> Basic -> Include Libraries (-l): dsk6713bsl.lib  Compiler -> Preprocessor -> Include Search Path (i): $(Install_dir)\c6000\dsk6713\include  Compiler -> Preprocessor -> Pre-Define Symbol (d): _DEBUG;CHIP_6713 Phần Chương trình tạo Tone DTMF: Chương trình: #include /*Gọi thư viện cho các hàm xuất nhập và một số hàm cơ bản khác…*/ Define là khai báo biến toàn cục Gọi thư viện là các hàm chuyên dùng cho KIT thí nghiệm DSP Khai báo kiểu Int là khai báo số nguyên 2 byte Đây là hàm: dial_tone_generaton được xây dựng như chương trình con. Nếu xây dựng hàm này sau Void main (chương trình chính) thì buộc ta phải khai báo, còn như bài này ta xây dựng trước thì không cần phải khai báo hàm. #include "dtmf_generatorcfg.h" #include "dsk6713.h" #include "dsk6713_aic23.h" #include "aic23_config.h" #include "bargraph.h" #include "sinewaves.h" #include "stereo.h" #include "switches.h" #define SAMPLES_PER_SECOND 48000 #define GAIN 32767 Int16 left_input; Int16 right_input; Int16 left_output; Int16 right_output; Int16 mono_input; int dial_tone_generator(void) { static unsigned int counter = 0; /*Kích cở tối thiểu cho ngăn xếp, vùng cấp phát động*/ int return_value; if ( counter < 4800) { counter++; return_value = 1; /* Return 1 for 0 to 100 ms */ } else if ( counter < 48000) { counter++; return_value = 0; /* Return 0 for 100 ms to 1000 ms */ } else { counter = 0; return_value = 0; /* End of sequence. Go back to beginning */ } return(return_value); } void main(void) { DSK6713_AIC23_CodecHandle hCodec; /*gán hCodec cho DSK6713_AIC23_CodecHandle */ long i; /*Gán biến i là kiểu long*/ unsigned int switch_value; /*Vùng cấp phát động cho switch_value là kiểu int*/ Uint32 temp; /* For 32-bit reads from codec */ int update; /*Gán biến update là kiểu int*/ DSK6713_init(); /*Khai báo chương trình con*/ hCodec = DSK6713_AIC23_openCodec(0, &aic23_config_line); /*Gọi hàm*/ puts("TMS320C6713 DSK: DTMF Generator. Bargraph at 6dB intervals.\n"); /*đưa dữ liệu ra ngoài*/ for ( i = 0; i < 600 * SAMPLES_PER_SECOND; i++) { while (!DSK6713_AIC23_read(hCodec, &temp )); left_input = (Int16) temp; while (!DSK6713_AIC23_write(hCodec, left_output )); switch_value = switch_status_display(); while (!DSK6713_AIC23_read(hCodec, &temp )); right_input = (Int16) temp; while (!DSK6713_AIC23_write(hCodec, right_output )); if ( 0 == switch_value) { left_output = generate_sinewave_1 (697, GAIN); right_output = left_output; } else if ( 1 == switch_value) { update = dial_tone_generator(); if ( 1 == update ) { left_output = generate_sinewave_1 (697, GAIN); right_output = generate_sinewave_2 (1209, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 2 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (697, GAIN); right_output = generate_sinewave_2 (1336, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 3 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (697, GAIN); right_output = generate_sinewave_2 (1477, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 4 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (770, GAIN); right_output = generate_sinewave_2 (1209, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 5 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (770, GAIN); right_output = generate_sinewave_2 (1336, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 6 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (770, GAIN); right_output = generate_sinewave_2 (1477, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 7 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (852, GAIN); right_output = generate_sinewave_2 (1209, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 8 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (852, GAIN); right_output = generate_sinewave_2 (1336, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 9 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (852, GAIN); right_output = generate_sinewave_2 (1477, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 10 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (941, GAIN); right_output = generate_sinewave_2 (1209, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 11 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (941, GAIN); right_output = generate_sinewave_2 (1336, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 12 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (941, GAIN); right_output = generate_sinewave_2 (1477, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 13 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (940+9, GAIN); right_output = generate_sinewave_2 (1336, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 14 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (940 + 19, GAIN); right_output = generate_sinewave_2 (1336, GAIN); } else { left_output = 0; right_output = 0; } } else if ( 15 == switch_value) { update = dial_tone_generator(); if ( update ) { left_output = generate_sinewave_1 (940 + 28, GAIN); right_output = generate_sinewave_2 (1336, GAIN); } else { left_output = 0; right_output = 0; } } bargraph_6dB( left_output, right_output); } DSK6713_AIC23_closeCodec(hCodec); puts("TMS320C6713 DSK has terminated\n"); } Kết quả sau khi Build và chương trình ta được như sau: Thuật toán của chương trình trên như sau: Thuật toán cho hàm dial_tone_generator(void): Trả biến counter về = 0; và biến “return_value = 0” Bắt đầu “dial_tone_generator” Yes Cuonter có < 4800 không? Yes No Counter có < 4800 nửa không? Tăng biến counter ++; Gán biến “return_value = 1” Gán biến counter =0; Khai báo biến “return_value” kiêu Int No Tăng biến counter ++; Gán biến “return_value = 0” Kết thúc hàm và trả biến “return_value” về Thuật toán cho chương trình chính void main( void ): left_input = ( Int16 )temp; End While Yes Gọi thư viện chính cho Kit thí nghiệm: DSK6713_AIC23_CodecHandle hCodec. Khai báo biến i kiểu long; Khai báo biến switch_value kiểu int là vùng cấp phát động; Khai báo biến temp 32 bit; Khai báo biến “update” kiểu int; Bắt đầu Chương trình chính ”void main” Gọi hàm DSK6713_init(); Gọi hàm DSK6713_AIC23_openCodec(0, &aic23_config_line); puts( "TMS320C6713 DSK: DTMF Generator. Bargraph at 6dB intervals.\n" ); ‘Đưa dữ liệu ra ngoài’ for( i = 0; i < 600 * SAMPLES_PER_SECOND; i++) While ( !DSK6713_AIC23_read ( hCodec, &temp ) ) No While ( !DSK6713_AIC23_read ( hCodec, &temp ) ) No left_input = ( Int16 )temp; Yes switch_value = switch_status_display( ); End While Yes End for bargraph_6dB( left_output, right_output ); No Yes No while( !DSK6713_AIC23_write( hCodec, right_output ) ) Yes End While left_output = generate_sinewave_1( 697, GAIN ); right_output = left_output; switch_value = 0 ? No right_input = ( Int16 )temp; While ( !DSK6713_AIC23_read ( hCodec, &temp ) ) Yes End While left_output = generate_sinewave_1( 940+3%, GAIN ); right_output = generate_sinewave_2( 1336, GAIN ); left_output = 0; right_output = 0; update = 15? Yes No Yes No switch_value =15 ? update = dial_tone_generator( ); update = 1? left_output = generate_sinewave_1( 697, GAIN ); right_output = generate_sinewave_2( 1209, GAIN ); left_output = 0; right_output = 0; DSK6713_AIC23_closeCodec ( hCodec ); puts( "TMS320C6713 DSK has terminated\n" ); END No No Yes Yes switch_value =1 ? update = dial_tone_generator( );

Các file đính kèm theo tài liệu này:

  • docBaiBaoCaoThiNghiemDSPSo2.doc