PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   dsPIC - Bộ điều khiển tín hiệu số 16-bit (http://www.picvietnam.com/forum/forumdisplay.php?f=29)
-   -   Các thắc mắc về ASM30, C30 (http://www.picvietnam.com/forum/showthread.php?t=400)

namqn 23-04-2006 06:47 PM

Các thắc mắc về ASM30, C30
 
Hiện nay đã có một số bạn quan tâm đến dsPIC, sử dụng ASM30 hay C30 để viết chương trình, và có những thắc mắc, cũng như trở ngại trong khi viết chương trình cho dsPIC. Tôi mở luồng này để các bạn có thể post những câu hỏi, những vấn đề liên quan đến việc viết chương trình cho dsPIC.

Nào các bạn, hãy cùng nhau chinh phục dsPIC đi!

Thân,

ThanhPhuc 29-04-2006 11:36 PM

Khi xử dụng ADC của dsPIC và UART có ảnh hưởng gì không ?
Khi chuyển ADC on bằng lệnh (ADCON1bits.ADON =1 ;) thì không thể set ADON =1 được .Đoạn chương trình như sau :
Code:

ADPCFG =0xFFFB;
 ADCON1=0x0000;
 ADCHS = 0x0002;
 ADCSSL =0 ;
 ADCON3 =0x0002;
 ADCON2=0;
 a=100;
 ADCON1bits.ADON =1;
 if(!ADCON1bits.ADON)
  printf("%d", a);
..

Đoạn trên là chương trình mẫu của DS70064D,hai lệnh cuối dùng để kiểm tra ADON.
Khi kiểm tra bằng phần mềm khi vào đoạn chương trình trên lệnh printf thực hiện nên trên PC nhận giá trị 100.Các anh xem giúp đoạn trên có lỗi gì không?

namqn 30-04-2006 06:52 PM

Bạn mô tả thêm phần cứng: chip được sử dụng, các từ cấu hình liên quan đang dùng, các chân I/O đang được sử dụng.

Thân,

ThanhPhuc 01-05-2006 10:20 AM

Em dùng bootloader cấu himhf như sau :
Code:

#include <p30f4012.h>
#include "stdio.h"
#include "uart.h"
_FOSC(CSW_FSCM_OFF & XT_PLL4);  //Set up for crystal multiplied by 4x PLL
_FWDT(WDT_OFF);                //Turn off the Watch-Dog Timer.
_FBORPOR(MCLR_EN & PWRT_OFF);  //Enable MCLR reset pin and turn off the power-up timers.
_FGS(CODE_PROT_OFF);

Phần khai báo UART như hướng dẫn của anh.Em sử dụng hàm
void OpenUART1(unsigned int config1,unsigned int config2, unsigned int ubrg) .Phần giao tiếp với PC hoạt động tốt

namqn 01-05-2006 08:06 PM

Bạn sử dụng mã nguồn mẫu của Microchip, phần UART chạy tốt, hai lệnh bạn thêm vào để kiểm tra bit ADON không có vấn đề. Vậy các phần bạn đã post ở đây không có vấn đề gì. Tôi đã thử kiểm tra phần mã của hai lệnh bạn thêm vào do C30 dịch ra, vẫn không có vấn đề gì. Bạn thử kiểm tra xem module ADC của bạn có làm việc hay không, bằng cách dùng một tín hiệu chuẩn nào đó (pin 1.5V chẳng hạn) để xem ADC có đọc về đúng và ổn định hay không. Tôi thường không kiểm tra bit ADON đó, vì khi bật module thì các kết quả đọc được từ ADC về chứng tỏ nó đang hoạt động tốt.

Tôi sẽ thử dùng kết hợp ADC và UART, sẽ thông báo kết quả cho bạn sau.

Thân,

namqn 02-05-2006 06:54 PM

Tôi đã thử dùng ADC cùng với UART, chip làm việc bình thường. Các giá trị ADC đọc được đã được truyền lên PC mà không gặp vấn đề gì. Sử dụng 2 lệnh tương tự như của bạn để kiểm tra bit ADON cho thấy bit đã được set thành công, không có thông báo được xuất lên PC thể hiện bit ADON không thể set được.

Thân,

ThanhPhuc 06-05-2006 10:52 AM

Em đã thử module ADC,do Module ADC chưa làm việc nên mới kiểm tra các thanh ghi liên quan đến ADC.Em đang tìm các tài liệu liên quan đến ADC để kiểm tra xem còn cần phải khai báo thêm lệnh gì nửa,nếu chương trình đúng thì module ADC bị hỏng.

namqn 06-05-2006 08:59 PM

Trích:

Nguyên văn bởi ThanhPhuc
Em đã thử module ADC,do Module ADC chưa làm việc nên mới kiểm tra các thanh ghi liên quan đến ADC.Em đang tìm các tài liệu liên quan đến ADC để kiểm tra xem còn cần phải khai báo thêm lệnh gì nửa,nếu chương trình đúng thì module ADC bị hỏng.

Tôi dùng đoạn chương trình mẫu của Microchip, và đoạn chương trình tôi tự viết, không có điểm gì khác biệt. Những thanh ghi cần thiết đã được thiết lập trong chương trình mẫu. Bạn nên kiểm tra lại phần cứng, đo thử xem điện áp tại AVDD so với VDD có chênh lệch quá không, và tương tự đối với AVSS và VSS.

Đoạn chương trình liên quan đến thiết lập chế độ cho ADC của tôi:
Code:

        ADPCFG = 0xFFFE;
        ADCON1 = 0x0000;
        ADCON2 = 0x0000;
        ADCHS = 0x0000;
        ADCSSL = 0x0000;
        ADCON3 = 0x0002;
        ADCON1bits.ADON = 1;
        if (!ADCON1bits.ADON) printf("ADON is off");

Trong vòng lặp:
Code:

        while (1) {
                if (k != 0) {
                        ADCON1bits.SAMP = 1;
                        asm("repeat #200");
                        asm("nop");
                        ADCON1bits.SAMP = 0;
                        while (!ADCON1bits.DONE);
                        ADCValue = ADCBUF0;
                        printf("\nADC Value is: %d", ADCValue);
                        k = 0;
                };

Tôi dùng một ngắt timer để đặt k = 1 sau mỗi 0,5 giây.

Thân,

ThanhPhuc 09-05-2006 11:17 PM

Chương trình của em cũng tương tự như trên,riêng phần cứng em nối AVDD với VDD,AVSS nối với VSS.Các chân nầy nối với nhau có ảnh hưởng gì không?
Em đã thử với dspic30F4011 cũng gặp lỗi như trên.

namqn 10-05-2006 12:10 AM

Tôi vẫn nối AVDD vào VDD, và AVSS vào VSS trong nhiều mạch của tôi.

Tuy nhiên, một lần tôi phát hiện ra module ADC trong một mạch dsPIC của tôi không làm việc, dò phần mềm không phát hiện lỗi, cuối cùng phát hiện ra mạch in khi chạy bị đứt một phần ground plane, do đó cái ground plane của ADC và ground plane của board không nối với nhau. Sửa xong phần đó thì mạch chạy tốt. Vì thế tôi mới khuyên bạn nên đo thử trên mạch thật, biết đâu vẽ mạch thì đúng, nhưng làm mạch thì lại bị lỗi đâu đó.

Thân,

ThanhPhuc 10-05-2006 10:51 PM

EM đã tìm được lỗi rồi, do chương trình bootloader disable adc module.Em bỏ lệnh nầy mạch và chương trình hoạt động tốt.
Cám ơn anh nhiều !

namqn 10-05-2006 11:50 PM

Trích:

Nguyên văn bởi ThanhPhuc
EM đã tìm được lỗi rồi, do chương trình bootloader disable adc module.Em bỏ lệnh nầy mạch và chương trình hoạt động tốt.
Cám ơn anh nhiều !

Anh không nghĩ là em lại có lệnh disable module ADC trong bootloader đối với con 4012. Em chỉ cần lệnh đó đối với 2011 và 3012 (mấy con chỉ có 18 chân).

Dù sao cũng là tin tốt, em đã tìm ra lỗi và xác nhận rằng module ADC có thể làm việc bình thường với UART.

Thân,

escapevn 14-05-2006 05:21 PM

Cách sử dụng các hàm dsp của C30?
 
Bác Namqn à, em hiện đang dùng con dsPIC30F3012 nhưng đến phần sử dụng các hàm dsp thì khi em khai báo ma trận và sử dụng các hàm như Matrixadd và Matrixinvert thì lại bị báo lỗi. Mong bác chỉ cho em cách sử dụng và khai báo các hàm này. Cảm ơn bác nhiều lắm, em đang rất cần cái này.

namqn 14-05-2006 07:09 PM

Trích:

Nguyên văn bởi escapevn
Bác Namqn à, em hiện đang dùng con dsPIC30F3012 nhưng đến phần sử dụng các hàm dsp thì khi em khai báo ma trận và sử dụng các hàm như Matrixadd và Matrixinvert thì lại bị báo lỗi. Mong bác chỉ cho em cách sử dụng và khai báo các hàm này. Cảm ơn bác nhiều lắm, em đang rất cần cái này.

Bạn có thể cho biết thêm thông tin về: phiên bản MPLAB, phiên bản C30 đang dùng hay không?. Đồng thời, bạn có thể post phần khai báo, phần code liên quan đến các hàm trong thư viện DSP được dùng, và phần thông báo lỗi hay không?

Thân,

escapevn 15-05-2006 12:03 AM

Hic, tại lúc trước em quên ko add file libdsp-coff.a nên sử dụng hàm dsp mới không được anh à. Bây giờ thì OK rồi.
Bác giải thích cho em về các thanh ghi CORCON và các thanh Accumulator, vai trò của nó trong các hàm DSP đc không? Các hàm dsp tác động tới số kiểu fractional và float thì khác nhau thế nào?
Còn các thanh ghi như XMODSRT, XMODEND, YMODSRT, YMODEND có vai trò thế nào trong dsp? em thấy trong ví dụ về FIR của microchip thì họ có modified mấy thanh ghi này.
Mong bác giúp đỡ.


Múi giờ GMT. Hiện tại là 07:44 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam