|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
11-11-2009, 10:27 PM | #61 | |
Trưởng lão PIC bang
|
Trích:
Nếu tôi đoán không lầm, bạn muốn chuyển các tham số a1 a2 ... thành các giá trị số sau khi nhận được từ bên ngoài. Trong trường hợp này (giả sử bạn đang dùng C30), mỗi chuỗi ai có thể được dùng làm đối số cho hàm C chuẩn atoi() (sẽ cần #include <stdlib.h>). Đề nghị tham khảo tài liệu hướng dẫn !16-bit Language Tools Libraries" (DS51456) của Microchip. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
12-11-2009, 12:22 AM | #62 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 12
: |
Ý của em là khi em gọi thành phần thứ 2 trong mảng, nó sẽ xuất ra cho em là a1(không kể khoảng trắng là ký tự) và a1,a2 ta không biết trước bao nhiêu ký tự.
Em dúng khoảng trắng để nhận biết nó, cuối cùng đã nhận được. Cám ơn anh đã quan tâm trả lời giùm em. |
05-12-2009, 02:00 PM | #63 |
Đệ tử 1 túi
Tham gia ngày: Sep 2007
Bài gửi: 12
: |
Code:
#include <p33FJ256GP710.h> #include <stdlib.h> _FOSCSEL(FNOSC_FRC); _FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_NONE); #define TRUE 1 #define FALSE 0 unsigned char S2Flag, S3Flag, S4Flag, S5Flag; unsigned int on_off ,time_out,j,t,i,x1,k; unsigned char input[50]; unsigned char getc(); void putc(unsigned char value); unsigned char* GetWord(unsigned char a[], int size, int index); /***********************************************************/ void __attribute__((__interrupt__)) _U2RXInterrupt(void) { input[0]=getc(); j=0; if(input[0]=='T'||input[0]=='S') { while(input[j]!='r') { j++; input[j]=getc(); } U2STAbits.OERR = 0; IFS1bits.U2RXIF = 0; //Clear the UART1 transmitter interrupt flag on_off=1; } } /************************************************************/ void __attribute__((__interrupt__)) _U1RXInterrupt(void) { input[0]=getc(); j=0; if(input[0]=='T'||input[0]=='S') { while(input[j]!='r') { j++; input[j]=getc(); } U1STAbits.OERR = 0; IFS0bits.U1RXIF = 0; //Clear the UART1 transmitter interrupt flag on_off=1; } } /**************************************************************/ void __attribute__ ((interrupt, no_auto_psv)) _U2TXInterrupt(void) { IFS1bits.U2TXIF = 0; } /**************************************************************/ void __attribute__ ((interrupt, no_auto_psv)) _U1TXInterrupt(void) { IFS0bits.U1TXIF = 0; } /***************************************************************/ void InitClock() { PLLFBD = 38; // M = 40 CLKDIVbits.PLLPOST = 0; // N1 = 2 CLKDIVbits.PLLPRE = 0; // N2 = 2 OSCTUN = 0;//khong su dung oscillator tuning register RCONbits.SWDTEN = 0; // disabe watch dog timer // Clock switch to incorporate PLL __builtin_write_OSCCONH(0x01); // Initiate Clock Switch to FRC with PLL (NOSC=0b001) // luu y : doc thanh ghi OSCCON de thay __builtin_write_OSCCONL(0x01); // Start clock switching //ghi lan luot vao 8 bit cao va thap cua OSCCON while (OSCCONbits.COSC != 0b001); // Wait for Clock switch to occur while(OSCCONbits.LOCK != 1) {}; //pll lock status bit } /****************************************************************/ void Init_UART1 (void) { int i; U1MODE = 0x0000; //Clear UART1 registers U1STA = 0x0000; U1BRG=20; //set baud rate U1MODEbits.PDSEL = 0; //8bits, no parity U1MODEbits.STSEL = 0; //1stop bit U1MODEbits.ABAUD = 0; //No autobaud U1MODEbits.BRGH = 0; //Low speed U1STAbits.UTXISEL0 = 0; U1STAbits.UTXISEL1 = 1; U1STAbits.URXISEL = 0; IEC0bits.U1TXIE = 1; // Enable UART Tx interrupt IEC0bits.U1RXIE = 1; U1MODEbits.UARTEN = 1; // Enable UART IFS0bits.U1RXIF = 0; IFS0bits.U1TXIF = 0; U1STAbits.UTXEN = 1; // Enable UART Tx /* wait at least 104 usec (1/9600) before sending first char*/ for(i = 0; i < 4160; i++) { Nop(); } } /**********************************************************************/ void Init_UART2 (void) { int i; U2MODE = 0x0000; //Clear UART1 registers U2STA = 0x0000; U2BRG=20; //set baud rate U2MODEbits.PDSEL = 0; //8bits, no parity U2MODEbits.STSEL = 0; //1stop bit U2MODEbits.ABAUD = 0; //No autobaud U2MODEbits.BRGH = 0; //Low speed U2STAbits.UTXISEL0 = 0; U2STAbits.UTXISEL1 = 1; U2STAbits.URXISEL = 0; IEC1bits.U2TXIE = 1; // Enable UART Tx interrupt IEC1bits.U2RXIE = 1; U2MODEbits.UARTEN = 1; // Enable UART IFS1bits.U2RXIF = 0; IFS1bits.U2TXIF = 0; U2STAbits.UTXEN = 1; // Enable UART Tx /* wait at least 104 usec (1/9600) before sending first char*/ for(i = 0; i < 4160; i++) { Nop(); } } /*****************************************************************************/ void InitPorts() { //ODCFbits.ODCF3 = 1; //ODCFbits.ODCF5 = 1; // S2 (portB Pin 3, chosen as trigger for sending ... to UART) // S3 (portB Pin 2, chosen as trigger for sending ... to UART) // S4 (portB Pin 1, chosen as trigger for sending ... to UART) // S5 (portB Pin 0, chosen as trigger for sending ... to UART) AD1PCFGLbits.PCFG0 = 1; // This is important. RB0 is muxxed with AN0, // So we need to config the pin as DIGITAL AD1PCFGLbits.PCFG1 = 1; AD1PCFGLbits.PCFG2 = 1; AD1PCFGLbits.PCFG3 = 1; AD2PCFGLbits.PCFG0 = 1; // This is important. RB0 is muxxed with AN0, // So we need to config the pin as DIGITAL AD2PCFGLbits.PCFG1 = 1; AD2PCFGLbits.PCFG2 = 1; AD2PCFGLbits.PCFG3 = 1; TRISB = 0x000F; //B0&B1&B2&B3 is input S2Flag = S3Flag = S4Flag = S5Flag = 0; // Some Debounce Flags } /*******************************************************************************/ /*************************************************************************/ int main(void) { InitPorts(); InitClock(); // This is the PLL settings Init_TMR1(); Init_UART1(); // Initialize UART1 for 9600,8,N,1 TX/RX Init_UART2(); // Initialize UART1 for 9600,8,N,1 TX/RX while (1) { if (on_off == 1) { on_off = 0; // Chuong trinh xuat ra thanh phan thu 1 cua chuoi int index = 1; int i=0; int j=0; int wordIndex = 0; unsigned char a[5]; while(i<50 || a[i] != 'r') { if(input[i] == ' ') { wordIndex++; i++; } if(wordIndex == index) { a[j] = input[i]; j++; } i++; } a[j] = ' '; i=0; while (a[i] != ' ') { int x = atoi(a); delay_ms(10); x1 = x; //putc(a[i]); i++; } // Chuong trinh xuat ra thanh phan thu 7 cua chuoi int index1 = 7; int i1=0; int j1=0; int wordIndex1 = 0; unsigned char a1[5]; while(i1<50 || a1[i1] != 'r') { if(input[i1] == ' ') { wordIndex1++; i1++; } if(wordIndex1 == index1) { a1[j1] = input[i1]; j1++; } i1++; } a1[j1] = ' '; i1=0; while (a1[i1] != ' ') { int y = atoi(a1); delay_ms(100); delay_ms(100); delay_ms(100); t=y; //putc(a1[i1]); i1++; } k= t/2 + x1*2; putc(k); } } } /******************************************************************************************* //Function: void Init_TMR1(void) //Input: None //Output: Setup Parameter to Timer1 Operate // TMR1 use for delay *******************************************************************************************/ void Init_TMR1(void) { T1CONbits.TON=0; //Stop Timer1 T1CONbits.TGATE=0; //Disable Gated Timer mode T1CONbits.TCKPS=0; //Select Prescale 1:1 T1CONbits.TCS=0; _T1IF=0; _T1IE=1; TMR1=0; } /******************************************************************************************* //Function: void delay_us(unsigned int n) //Input: n: n us to delay //Output: Delay n us *******************************************************************************************/ void delay_us(unsigned int n) { PR1=n*40; time_out=0; T1CONbits.TON=1; while(time_out==0); T1CONbits.TON = 0; TMR1=0; } /******************************************************************************************* //Function: void delay_ms(unsigned int n) //Input: n: n ms to delay //Output: Delay n ms *******************************************************************************************/ void delay_ms(unsigned int n) { unsigned int i; i=0; while(i<=n) { delay_us(1000); i++; } } void _ISR _T1Interrupt(void) { _T1IF = 0; //Clear Timer1 flag time_out = 1; } /*************************************************************************/ void putc(unsigned char value) { while (U2STAbits.UTXBF); U2TXREG=value; } /****************************************************************************/ unsigned char getc() { while (!U2STAbits.URXDA); return U2RXREG; } Đây là đoạn chương trình em định dung 2 module uart một lúc,nhưng khi chạy thử,gửi từ uart2 thì có lúc gửi, lúc không, em đoán là hàm ngat có vấn đề. Mong mọi người xem giúp thay đổi nội dung bởi: namqn, 05-12-2009 lúc 02:54 PM. Lý do: định dạng code |
20-12-2009, 08:18 PM | #64 |
Đệ tử 6 túi
Tham gia ngày: Jul 2009
Bài gửi: 152
: |
Anh Nam ơi cho em hỏi 2 dòng lệnh này dùng để làm gì ạ?
_PSV=1; PSVPAG = __builtin_psvpage(Chuoi1); |
20-12-2009, 08:59 PM | #65 | |
Trưởng lão PIC bang
|
Trích:
Về chế độ PSV, bạn tìm kiếm trong diễn đàn với từ khóa "PSV", đã có bạn hỏi về PSV và tôi đã trả lời. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
21-12-2009, 09:12 PM | #66 |
Đệ tử 6 túi
Tham gia ngày: Jul 2009
Bài gửi: 152
: |
Anh Nam cho em hởi cái này. Sao em cài 2 module UART1 và UART2. Cụ thể em lấy U1RX nhận dữ liệu từ cổng COM và U2TX để gửi dữ liệu nhận được về máy tính mà không được. Mong anh Nam chỉ giúp em!
|
21-12-2009, 10:30 PM | #67 | |
Trưởng lão PIC bang
|
Trích:
Sơ đồ mạch ứng dụng của bạn ra sao? Code liên quan đến 2 module UART như thế nào? Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
21-12-2009, 11:25 PM | #68 |
Đệ tử 6 túi
Tham gia ngày: Jul 2009
Bài gửi: 152
: |
Cụ thể em dùng dsPIC30F4013 dùng UART1 nhận dữ liệu từ máy tính và trả ký tự nhận được về máy tính qua module UART2 thử được không. Ý của em là dùng một lúc 2 module UART của dsPIC30F4013 đó mà. Em dùng Hyper Terminal của Win
|
22-12-2009, 07:37 AM | #69 | |
Trưởng lão PIC bang
|
Trích:
Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
|
15-01-2010, 11:33 AM | #70 |
Đệ tử 4 túi
Tham gia ngày: Mar 2009
Bài gửi: 64
: |
dsPIC33 ko nhận được uart.
phần cứng dspic33fj128 nối với max232 (loại smd cấp nguồn 3v3) truyển từ dspic lên pc thì ngon nhưng truyền từ pc xuống dspic thì ngỏm. Có xung rất đẹp đến chân nhận của dspic chân truyền nhận đã được remappable. Khi cấu hình loopback thì đường truyền 1 chuỗi ký tự !!!!!!!!!. Để loopback thì bít U1STAbits.URXDA có được bật lên, nếu để ngắt thì cũng có nhảy vào ngắt nhận nhưng nếu ko dùng loopback thì bít U1STAbits.URXDA ko bật lên, mà cũng chẳng vào ngắt, mặc dù có xung ở nhân nhận Code:
//Remap //UART1 TX1 RP3-3 RPOR1 ; RX1 RP2 RPINR18 _RP3R = 0x03; //RP3 is UART1 output RB3 _U1RXR = 0x02; //RP2 is uart1 input RB2 Code:
/* check for receive errors */ if(U1STAbits.FERR == 1) { lcd_putchar('?'); } /* must clear the overrun error to keep uart receiving */ if(U1STAbits.OERR == 1) { U1STAbits.OERR = 0; lcd_putchar('?'); } /* get the data */ while(U1STAbits.URXDA) { ReceivedChar = U1RXREG; _LATA10 =~ _LATA10; } |
25-05-2010, 05:36 PM | #71 |
Nhập môn đệ tử
Tham gia ngày: Mar 2010
Bài gửi: 3
: |
Em đang thử làm giao tiếp RS232 qua 1 bộ wireless. Truyền nhận có dây lên terminal thì ok, nhưng cứ cắm bộ không dây vào thì không có tín hiệu. Có ai biết nguyên nhân có thể là do đâu không ạ ?
----- Đi lại dây ở cổng COM lại chạy tốt rồi thay đổi nội dung bởi: shinosuke, 26-05-2010 lúc 04:03 PM. |
20-09-2010, 11:37 AM | #72 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 3
: |
dsPIC30 UART module
Chào các bạn
Mẹo vặt để tính BRG có làm tron 1 số sau dấu chấm thập phân vd: Sau khi tính BRG = 12.1 làm tròn 12 BRG = 15.5 làm tròn 16 //define in UART header file #define XTAL (7372800UL) //ETT board has 7.7328Mhz XT crystal #define PLL (16) //Clock source = Primary XT and PLL_16 #define FOSC (XTAL*PLL) #define FCY ((FOSC)/4) //Intrustion frequency #define BAUD_RATE 115200UL //UART baud rate //UART1 brg value U1BRG = ((FCY / BAUD_RATE) + 8) / 16; thay đổi nội dung bởi: channan, 20-09-2010 lúc 11:42 AM. Lý do: space in text look messy !! |
20-09-2010, 11:58 AM | #73 |
Nhập môn đệ tử
Tham gia ngày: Nov 2009
Bài gửi: 3
: |
Chào bạn
Cho tôi hỏi ngoài đề 1 chút: Làm sao viết source code ở trong các bài post lên vậy? Cẩm ơn ! |
09-04-2012, 12:42 PM | #74 |
Nhập môn đệ tử
Tham gia ngày: Jul 2011
Bài gửi: 3
: |
Chào các bác!!!
Hiện tại em có đang làm về truyền thông RS485 theo giao thức modbus để truyền thông giữa bộ điều khiển slave (dựa trên VĐK DSPIC30F4011) và phần mềm modbusmaster. Có bác nào làm về vấn đề này, hay có code mẫu cũng như tài liệu có thể share giúp mình được không??? em đang gặp rất nhiều khó khăn với đề tài này. Cảm ơn các bác nhiều!!! |
15-04-2012, 12:41 AM | #75 |
Nhập môn đệ tử
Tham gia ngày: Jul 2011
Bài gửi: 3
: |
Đợi mãi không thấy bác nào lên tiếng, nản quá?
|
Tags |
dspic30f i2c, dspic30f uart, i2c, rtc |
Ðiều Chỉnh | |
Xếp Bài | |
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
dsPIC Tutorial 3-Đọc ngõ vào và giao tiếp LCD | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 92 | 19-02-2017 11:15 PM |
dsPIC Tutorial 2-Các kỹ thuật cơ bản | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 33 | 17-10-2013 11:09 PM |
dsPIC Tutorial 5-Module ADC và MCPWM | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 83 | 12-09-2013 10:33 PM |
dsPIC Tutorial 1-Tạo và biên dịch một project (ASM30) | namqn | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 16 | 22-08-2012 12:35 AM |
Alternate UART pin??? | alexjp | dsPIC - Bộ điều khiển tín hiệu số 16-bit | 1 | 02-05-2006 06:26 PM |